【问题标题】:I'm making a code with pygame in oop and I'm having trouble making one of my methods work我在 oop 中使用 pygame 编写代码,但无法使我的一种方法正常工作
【发布时间】:2022-01-25 15:30:22
【问题描述】:

基本上,我正在编写一个同时使用 oop 和 pygame 的代码。它在屏幕的角落绘制了 4 个矩形,并为每个矩形命名。我必须询问用户其中一个矩形的名称并随机更改该矩形的颜色。

代码:

import random
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("BOOGABOOGA")
blue = (0,0,255)
red = (255,0,0)
green = (0,255,0)
white = (255,255,255)
random = [blue,red,green,white]
class Rectangle:
    def __init__(self,name,color,x,y,width,height,thickness):
        self.name = name
        self.color = color
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.thickness = thickness
    def coolboymethoddraw(self):
        pygame.draw.rect(screen,self.color,(self.x,self.y,self.width,self.height),self.thickness)
        
recty1 = Rectangle("YOYO",blue,50,50,50,50,0)
recty2 = Rectangle("BABYBOOGA",blue,450,450,50,50,0)
recty3 = Rectangle("ChotaBEAM",blue,0,450,50,50,0)
recty4 = Rectangle("CHOTAJAGGU",blue,450,0,50,50,0)
jaggu = [recty1,recty2,recty3,recty4]
recty3.coolboymethoddraw()
recty1.coolboymethoddraw()
recty4.coolboymethoddraw()
recty2.coolboymethoddraw()
def change_color(self):
    print("Give me the name of 1 of the 4 rectangles!")
    x = input()
    for chota in jaggu:
        if  x == chota.name:
            l = random.choice(random)
            chota.color = l
recty1.change_color()
recty2.changecolor()
recty3.change_color()
recty4.change_color()
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()
    pygame.display.update()

我会很感激一个答案以及为什么它不起作用。谢谢!

【问题讨论】:

  • 究竟是什么不工作?首先你需要移动change_color作为一个实例方法,所以把它放在类定义中,你也有一个错误地使用了它的名字

标签: oop methods pygame


【解决方案1】:

首先将你的方法 change_color 移动到类 Rectangle 中。

class Rectangle:
def __init__(self,name,color,x,y,width,height,thickness):
    self.name = name
    self.color = color
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.thickness = thickness
def coolboymethoddraw(self):
    pygame.draw.rect(screen,self.color,(self.x,self.y,self.width,self.height),self.thickness)
def change_color(self):
    print("Give me the name of 1 of the 4 rectangles!")
    x = input()
    for chota in jaggu:
        if  x == chota.name:
            l = random.choice(random)
            chota.color = l

那你需要把draw方法移到主循环里面,否则矩形不会被绘制出来。

while True:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        exit()
recty3.coolboymethoddraw()
recty1.coolboymethoddraw()
recty4.coolboymethoddraw()
recty2.coolboymethoddraw()
pygame.display.update()

不要随机命名您的颜色列表,因为您导入了一个名为 random 的包。将列表命名为 colors_list 之类的名称

您不需要为所有 4 个矩形调用 change_color 方法,因为在此方法中您已经浏览了 4 个矩形的列表。

change_color方法也有问题。您还需要在主循环中调用该方法,但由于 print 语句和输入,它将以无限循环结束。

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2019-12-19
    • 2022-11-15
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多