0

我想你们也许能帮我解决这个问题。我希望能够生成矩形并将图像分配给这些矩形。我一直在为整个项目做这件事,并不太难。这里的难点是我希望这个特定的函数能够生成我想要的尽可能多的不同矩形。该项目是一个像棋盘一样发生的游戏。我想我可以为每个空间编写... if 语句,然后在函数中有无数个参数来指示生成哪些矩形以及在哪里生成,但我希望有人能够想出一个更优雅的解决方案。

4

2 回答 2

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].

您将无法明确命名每个矩形,但话又说回来,您真的不需要。

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

于 2013-09-17T18:48:48.723 回答
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))

然后像往常一样在某些渲染方法中绘制平铺对象!

希望有帮助!!!

于 2013-09-17T18:59:04.377 回答