如何在pygame中读取瓷砖Map的.csv文件?

0vvn1miw  于 2023-04-09  发布在  其他
关注(0)|答案(3)|浏览(133)

我正在制作我在GMTK Game Jam中制作的一个条目的续集。这是一个平台游戏,玩家必须通过各种游戏模式的随机选择的Map,比如平台竞赛,老板战,还有我只能描述为躲避球,但有一个巨大的杀手pac man。为此,我想制作许多关卡,在python脚本中慢慢编辑列表并不能解决这个问题。所以我想学习如何读取.csv文件,并使用它们来创建一个使用许多瓷砖的关卡。但是我该怎么做呢?
到目前为止,我有一个主脚本,一个精灵脚本和一个关卡脚本。最后一个脚本里面有两个测试关卡Map,我想用一个包含各种.csv文件的文件夹替换它。在我的主脚本中,我有一个游戏类。在__init__方法中,我设置了一个从关卡脚本中拉取的关卡列表,随机选择一个加载,并循环遍历它,以便在索引为某个值时从我的sprite脚本创建一个sprite。

#Set tile map
        self.level = [levels.plat_lvl_1, levels.plat_lvl_2]

        self.tile_map = random.choice(self.level)

        for i in range(len(self.tile_map)):
            for j in range(len(self.tile_map[i])):
                if self.tile_map[i][j] == 1:
                    sprites.Tile(j * 32, i * 32, 1, self.tile_group)

                elif self.tile_map[i][j] == 2:
                    sprites.Tile(j * 32, i * 32, 2, self.tile_group, self.platform_group)

                elif self.tile_map[i][j] == 3:
                    sprites.Tile(j * 32, i * 32, 3, self.tile_group, self.platform_group)

                elif self.tile_map[i][j] == 4:
                    sprites.Tile(j * 32, i * 32, 4, self.tile_group, self.platform_group)

                elif self.tile_map[i][j] == 5:
                    self.player = sprites.Player(j * 32, i * 32, self.player_group, self.platform_group)

                elif self.tile_map[i][j] == 6:
                    sprites.Tile(j * 32, i * 32 - 32, 6, self.tile_group)

我如何用.csv文件替换列表,以及如何循环它或剥离它或其他以便正确创建我的级别?如果您需要,请将Here is the link添加到整个项目中。
非常感谢!

  • 多米尼克
zbsbpyhn

zbsbpyhn1#

我有这个函数来将csvMap转换为List[List[int]]格式。

def convert_csv_to_2d_list(csv_file: str):
    tile_map = []
    with open(csv_file, "r") as f:
        for map_row in csv.reader(f):
            tile_map.append(list(map(int, map_row)))
    return tile_map

它的用法将是:

self.tile_map = convert_csv_to_2d_list(csv_file="csv_file_location.csv")
for row in range(len(self.tile_map)):
    for col in range(len(self.tile_map[row])):
        # specific codes follows here
tag5nh1u

tag5nh1u2#

你可以这样做:

import csv

with open('level_file.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
   
    for row in csv_reader:
        for column in range(len(row)):
            if row[column] == 1:
                #do sprite stuff
                sprites.Tile(column * 32, row * 32, 1, self.tile_group)

            elif row[column] == 2:
                #etc
hvvq6cgz

hvvq6cgz3#

导入csv

#LOADING A MAP DATA
    with open("YOUR CSV FILE") as f:
        data = csv.reader(f, delimiter=',')
        y = 0
        for row in data:
            x = 0
            for column in range(len(row)):
                x += 1

                #IF THE TILE IS IN THE ROW THEN WE RENDERING IT
                if row[column] == "-1":
                    #Render your tile here
      
                    display.blit(image, (x * your tile width, y * your tile height , tile width size, tile height size))

            y += 1

相关问题