gpt4 book ai didi

python - 10个矩形的列表,本意是绘制每一个,但只绘制了一个

转载 作者:行者123 更新时间:2023-12-01 05:46:53 26 4
gpt4 key购买 nike

所以我有一个程序,它应该附加一个名为 Rectangle 的类的 10 个实例,该类为矩形创建随机属性。如果我从列表中打印多个对象,它们会显示为不同的值,但如果我调用多个对象的绘图函数,则屏幕上只会显示一个。

以下是完整代码:http://pastebin.com/hb6LBjss

这里重要的代码如下,第一个是矩形类,第二个将矩形添加到空列表 10 次,第三个在主程序循环中,应该绘制所有 10 个。

谢谢。

1.

class Rectangle():
x = random.randrange(0, 701)
y = random.randrange(0, 501)
width = random.randrange(20,71)
height = random.randrange(20,71)
change_x = random.randrange(-3,4)
change_y = random.randrange(-3,4)
def move(self):
self.x += self.change_x
self.y += self.change_y
def draw(self):
pygame.draw.rect(screen, green, [self.x,self.y, self.width, self.height], 0)

2.

myList = []

for i in range(10):
myList.append(Rectangle())

3.

for i in myList:
i.draw()

我尝试过一大堆不同的东西,比如这个,但每次屏幕上都只有一个矩形。

for i in range(10):
x = myList[i]
x.draw()

最佳答案

您实际上绘制了 10 个矩形,但它们都是同一个。

您没有传递要绘制的矩形类的实例,而是传递了类本身。

这是一个简单的修复。

class Rectangle():
x = random.randrange(0, 701)
y = random.randrange(0, 501)
width = random.randrange(20,71)
height = random.randrange(20,71)
change_x = random.randrange(-3,4)
change_y = random.randrange(-3,4)
def move(self):
self.x += self.change_x
self.y += self.change_y
def draw(self):
pygame.draw.rect(screen, green, [self.x,self.y, self.width, self.height], 0)

变成:

class Rectangle():
def __init__(self):
self.x = random.randrange(0, 701)
self.y = random.randrange(0, 501)
self.width = random.randrange(20,71)
self.height = random.randrange(20,71)
self.change_x = random.randrange(-3,4)
self.change_y = random.randrange(-3,4)

def move(self):
self.x += self.change_x
self.y += self.change_y

def draw(self):
pygame.draw.rect(screen, green, [self.x, self.y, self.width, self.height], 0)
<小时/>

构造对象实例时会调用 init 方法,默认情况下,该方法不执行任何操作。由于您将所有这些变量/成员写入基类,而不是初始化程序,因此该类的每​​个实例的所有变量/成员都具有相同的值,因为它们成为类成员,而不是实例成员...

关于python - 10个矩形的列表,本意是绘制每一个,但只绘制了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15786353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com