我正在制作一个涉及方形瓷砖地图的游戏(如文明III)。地图中的每个方格都是一个具有x,y坐标和其他一些属性的对象(平铺,高程等资源)。
我的地图文件存储为数组,如下所示:
tilemap = [
[GRASS, DIRT, DIRT],
[GRASS, GRASS, WATER],
[GRASS, GRASS, WATER],
[DIRT, GRASS, WATER],
[DIRT, GRASS, GRASS]
]
我想通过地图并在数组中的位置给出的x,y坐标处制作一个正方形,并使用文本指示的类型(草,泥土等)。
到目前为止,我已经尝试过这个:
class LevelMap():
def __init__(self, level_array=tilemap):
self.level_array = level_array
# Go through every row in the map...
for row in range(MAPHEIGHT):
# ... and every column...
for column in range(MAPWIDTH):
# ...and make a square at that location.
Square(row, column, tilemap[row][column])
Square类接受参数Square(x,y,square_type)
。
但是,我不知道如何给每个方块赋予自己独特的名称,所以我可以说
square_1 = the square at 0,0
square_2 = the square at 0,1
依此类推,以便我可以使用,例如square1.get_square_type()或square_1.change_terrain_type(rocky)。
如何将地图数组转换为一组具有唯一名称的Square对象?
我正在使用Python 3.4和pygame。
答案 0 :(得分:2)
您已经说过您将地图存储为2D列表。您只能通过该数组中的索引引用您的图块。
class LevelMap():
def __init__(self, level_array=tilemap):
self.level_array = level_array
# Go through every row in the map...
for row in range(MAPHEIGHT):
# ... and every column...
for column in range(MAPWIDTH):
# ...and make a square at that location.
Square(row, column, tilemap[row][column])
map = LevelMap(level_array=[])
# change the tile at (0, 1) to rocky:
map.level_array[1][0].change_terrain_to("rocky")
我甚至强烈建议在LevelMap
上编写一个帮助函数来获取一个给定(x,y)
的图块。
class LevelMap():
...
def get_tile(self, x, y):
return self.level_array[y][x]
map = LevelMap()
tile = map.get_tile(0, 1)
# or
location = (0, 1)
tile = map.get_tile(*location)
当我过去写过这样的内容时,我已Map
成为list
的孩子
class Map(list):
def __init__(self, height, width):
for y in range(height):
self.append([Square(y, x, tilemap[y][x]) for x in range(width)])
def get_tile(self, x, y):
return self[y][x]