在pygame中生成任意数量的Rect

时间:2013-09-17 18:43:18

标签: python pygame rect

我以为你们可以帮助我解决这个问题。我希望能够生成rects并将图像分配给这些rects。我一直在为整个项目做这件事并且不太难。这里的难点在于我希望这个特定的功能能够生成我想要的多个不同的rects。该项目是一个像棋盘一样的游戏。我想我可以写出...如果每个空格的if语句然后在函数中有一个非常多的参数来决定哪些rects生成和在哪里,但我希望有人能够想到一个更优雅的解决方案。

2 个答案:

答案 0 :(得分:1)

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

def make_chessboard(upper_x=0, upper_y=0, size=30):
    chessboard = []

    for y in range(8):
        row = []
        for x in range(8):
            coords = (upper_x + x * size, upper_y + y * size)
            row.append(pygame.Rect(coords, (size, size)))
        chessboard.append(row)
    return chessboard

然后,要获得位于左上角的矩形,您可以chessboard[0][0]。要获得位于右上角的矩形,您可以chessboard[0][7]

你无法明确地为每个矩形命名,但是你真的不需要。

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

答案 1 :(得分:0)

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 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))

然后只需绘制一个tile对象,就像你在某些渲染方法中所做的那样!

希望有所帮助!!!