【问题标题】:Storing 2D arrays within a 2D array - Python在二维数组中存储二维数组 - Python
【发布时间】:2014-04-28 22:33:50
【问题描述】:

我有两个二维数组,每个数组都包含将显示图层的信息:

layer0 = [[info], [info]]
layer1 = [[info], [info]]

我想在另一个数组中包含这两个二维数组:

map = [[layer0], [layer1]]

但是,我的程序无法正确显示图块。 我的问题是: 是否可以在另一个二维数组中存储二维数组? 谢谢。

我有一个循环系统,用于遍历所述数组并显示与数组内容对应的图块:

for array in maplayer:
            for tile in array:
                if tile == 0:
                    screen.blit(self.tile_dict[0], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
                if tile == 1:
                    screen.blit(self.tile_dict[1], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
            self.tileX = self.cameraX
            self.tileY += 16

我尝试添加另一个简单的 for 循环,以遍历实际的地图数组,但 PyGame 显示一个空白屏幕:

for maplayer in map:
        for array in maplayer:
            for tile in array:
                if tile == 0:
                    screen.blit(self.tile_dict[0], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
                if tile == 1:
                    screen.blit(self.tile_dict[1], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
            self.tileX = self.cameraX
            self.tileY += 16

这里是完整的方法:

def LoadMap(self, map):
    self.tileX = self.cameraX
    self.tileY = self.cameraY
    for maplayer in map:
        for array in maplayer:
            for tile in array:
                if tile == 0:
                    screen.blit(self.tile_dict[0], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
                if tile == 1:
                    screen.blit(self.tile_dict[1], (self.tileX, self.tileY))
                    self.tileX = self.tileX+16
            self.tileX = self.cameraX
            self.tileY += 16

谢谢。

【问题讨论】:

  • 你指的是什么瓷砖?你是如何试图展示这些东西的?正在发生什么,它与您的预期有何不同?但快速回答,是的,可以将 2D 数组存储在 2D 数组中。示例:[[ [[1,2][3,4]] ]]
  • 嘿,FrobberOfBits,我将问题编辑得更具体。 :)

标签: python arrays 2d storage


【解决方案1】:

我在读取 2D 数组时也做了同样的事情,但实际上不明白为什么需要将数组放在另一个数组中。 我使用此代码从文件创建数组:

gameMap = [list(row.rstrip('\n')) for row in open('Room 1.txt')]

那就这样读吧:

for i in range(0, len(gameMap)):

    for x in range(0, len(gameMap[i])):
        xC = x * 30
        y = i * 30

        if gameMap[i][x] == "*":
            screen.blit(wallImage, (xC, y))

        elif gameMap[i][x] == ".":
            screen.blit(floorImage, (xC, y))

        elif gameMap[i][x] == "+":

            if playerDirection == "up" or playerDirection == "":
                screen.blit(playerForwardImage, (xC, y))

            elif playerDirection == "right":
                screen.blit(playerRightImage, (xC, y))

            elif playerDirection == "left":
                screen.blit(playerLeftImage, (xC, y))

            elif playerDirection == "down":
                screen.blit(playerDownImage, (xC, y))

        elif gameMap[i][x] == "#":
            pygame.draw.rect(screen, black, (xC, y, 30, 30))

        elif gameMap[i][x] == "=":
            pygame.draw.rect(screen, red, (xC, y, 30, 30))

希望对您有所帮助,有点困惑为什么您甚至需要将它放在另一个数组中。

【讨论】:

  • 你知道的,你是对的,我其实不需要2D的,我不知道我为什么这样做......
  • 这很酷。乐意效劳。您可以创建一个并阅读它吗?
  • 不是试图听起来很狡猾,但如果我解决了你的问题,你能打勾吗:)
  • 哎呀,对不起,这里还是新的。 :)
猜你喜欢
  • 2016-10-14
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
相关资源
最近更新 更多