Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pygame中生成任意数量的矩形_Python_Pygame_Rect - Fatal编程技术网

Python 在pygame中生成任意数量的矩形

Python 在pygame中生成任意数量的矩形,python,pygame,rect,Python,Pygame,Rect,我以为你们能帮我解决这个问题。我希望能够生成矩形并将图像分配给这些矩形。我在整个项目中都在这样做,这并不难。这里最困难的部分是,我希望这个特殊的函数能够生成任意多个不同的矩形。这个项目是一个在棋盘上进行的游戏。我想我可以写得像。。。每个空间的if语句和then在函数中都有无数个参数,指示生成哪些rect以及在哪里生成,但我希望有人能想出一个更优雅的解决方案 可以使用两个嵌套的“for”循环-- 然后,要获得左上角的矩形,可以执行棋盘[0][0]。要获得右上角的矩形,可以执行棋盘[0][7] 您无

我以为你们能帮我解决这个问题。我希望能够生成矩形并将图像分配给这些矩形。我在整个项目中都在这样做,这并不难。这里最困难的部分是,我希望这个特殊的函数能够生成任意多个不同的矩形。这个项目是一个在棋盘上进行的游戏。我想我可以写得像。。。每个空间的if语句和then在函数中都有无数个参数,指示生成哪些rect以及在哪里生成,但我希望有人能想出一个更优雅的解决方案

可以使用两个嵌套的“for”循环--

然后,要获得左上角的矩形,可以执行
棋盘[0][0]
。要获得右上角的矩形,可以执行
棋盘[0][7]

您无法显式地命名每个rect,但同样,您真的不需要这样做

注意:我假设您想要创建一个类似棋盘的矩形模式。如果你详细说明你想做什么,我可以编辑我的问题

class ChessTile(pygame.sprite.Sprite):

    def __init__(self, image, location):
        pygame.sprite.Sprite.__init__(self)

        self.image = image.convert()
        self.mask = pygame.mask.from_surface(self.image)
        self.rect = pygame.Rect(location, self.image.get_size())
然后制作另一个名为“MakeBoard”的方法。调用MakeBoad并根据电路板的大小进行循环设置。所以伪代码应该是:

(假设“img”是一个32x32的白色或黑色正方形)

然后,只需绘制平铺对象,就像在某些渲染方法中使用法线一样


希望有帮助

我刚刚想到了一个可能的解决方案,使用一个带有参数的for循环,告诉它我要生成多少个矩形,但我仍然停留在如何命名这些矩形上?有没有办法用变量来命名变量?喜欢Rect(+x),然后像循环中的x+1那样执行。所以应该是Rect1、rect2等等。您可以创建一个包含
Rects
的常规列表。但既然您使用的是Rect和Surface,那么您最好使用一个包含.Rect和.image的
Sprite
s列表,这样就创建了一个包含64个Rect的列表,我可以通过棋盘[x][y]?@user2765554来引用它——关闭,可以通过执行
Chessboard[y][x]
来引用它。如果您交换for循环的顺序,以便一次添加一列,而不是一次添加一行,您可以通过执行
棋盘[x][y]
来引用它。希望您仍然在。当我刚刚尝试copypasta时,它在chessboard.append上给了我无效的语法,突出显示chessboard@user2765554--啊,对不起。我忘了在上面一行加上括号。现在应该修好了。
class ChessTile(pygame.sprite.Sprite):

    def __init__(self, image, location):
        pygame.sprite.Sprite.__init__(self)

        self.image = image.convert()
        self.mask = pygame.mask.from_surface(self.image)
        self.rect = pygame.Rect(location, self.image.get_size())
for y in range(0,7):
    for x in range(0,7):
        # alternate the tile image from black/white before calling ChessTile with it
        # the location parameter is going to be x*32,y*32.. something like that
        # so you'd have a tile at (0,0) then at (32,0), then (64,0), etc...
        # after the first "j" run is done, "i" increments so now we have
        # (0, 32), (32, 32), etc etc.
        # 
        tile = ChessTile(img, (x,y))