csv文件做为游戏地图的通用Python程序

在研究Arcade模块的过程中,发现Arcade模块能读取由Tiled软件输出的地图文件。这个地图文件可以是csv格式,也可以是tmx格式。用记事本打开tmx文件,发现它是一个xml文档。无论什么格式,地图文件记录的都是图块和数据的映射。首先我们来看一下csv格式,它是以逗号隔开的数据集合。

0,0,0,-1,-1
1,1,2,0,-1
3,3,3,3,2

上面的数据有3行,每行有5个数据。 对应的地图就是3行5列。每个数据代表不同的图形块,实质上记录的是图形块的编号。不过Arcade貌似没有内置相关函数来读取它。我们需要自己编写程序或导入相关模块来解析csv文件。解析完后 返回一个二维阵列。
接下来我们就能根据这份数据表决定加载什么类型的方块图片,最后实例化成角色。示例程序:sprite_csv_map.py.

下面是一个比较通用的读取csv文件格式的,不过数据要能转换成整数。假设左边的csv文件中的数据有三行,每行以逗号隔开有5个数据,那么形成的嵌套列表就像下面左边这样所示:

0,0,0,-1,-1
1,1,2,0,-1
3,3,3,3,2
[[0,0,0,-1,-1],
 [1,1,2,0,-1],
 [3,3,3,3,2]
]

下面的程序读取csv文件,形成嵌套列表:

def get_map(filename):
    """
    加载逗号隔开csv文件,解析成嵌套列表。
    """
    map_file = open(filename)                   # 打开csv文件 
    map_array = [ ]
    for line in map_file:                              # 文件中的每一行
          line = line.strip()                             # 去掉空白字符
          map_row = line.split(“,”)                 # 以逗号分隔数据,返回列表     
          # 执行下列这个推导式是为了把列表中的每项数据转换成整数 
          map_row = [ int(item) for item in map_row ] 
          map_array.append(map_row)

     return map_array

csv文件读取后,形成一个嵌套列表。我们就能遍历这个列表中的每一个数据从而实例化成一个个的角色做为地图使用了。