diff --git a/source/component/map.py b/source/component/map.py index b1e571d..2272e52 100755 --- a/source/component/map.py +++ b/source/component/map.py @@ -10,27 +10,27 @@ class Map(): self.width = c.GRID_POOL_X_LEN self.height = c.GRID_POOL_Y_LEN self.gridHeightSize = c.GRID_POOL_Y_SIZE - self.map = [[(c.INIT_MAP_GRID(c.MAP_GRASS), c.INIT_MAP_GRID(c.MAP_WATER))[y in {2, 3}] for x in range(self.width)] for y in range(self.height)] + self.map = [[(self.initMapGrid(c.MAP_GRASS), self.initMapGrid(c.MAP_WATER))[y in {2, 3}] for x in range(self.width)] for y in range(self.height)] elif self.background_type in c.ON_ROOF_BACKGROUNDS: self.width = c.GRID_ROOF_X_LEN self.height = c.GRID_ROOF_Y_LEN self.gridHeightSize = c.GRID_ROOF_Y_SIZE - self.map = [[c.INIT_MAP_GRID(c.MAP_TILE) for x in range(self.width)] for y in range(self.height)] + self.map = [[self.initMapGrid(c.MAP_TILE) for x in range(self.width)] for y in range(self.height)] elif self.background_type == c.BACKGROUND_SINGLE: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN self.gridHeightSize = c.GRID_Y_SIZE - self.map = [[(c.INIT_MAP_GRID(c.MAP_UNAVAILABLE), c.INIT_MAP_GRID(c.MAP_GRASS))[y == 2] for x in range(self.width)] for y in range(self.height)] + self.map = [[(self.initMapGrid(c.MAP_UNAVAILABLE), self.initMapGrid(c.MAP_GRASS))[y == 2] for x in range(self.width)] for y in range(self.height)] elif self.background_type == c.BACKGROUND_TRIPLE: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN self.gridHeightSize = c.GRID_Y_SIZE - self.map = [[(c.INIT_MAP_GRID(c.MAP_UNAVAILABLE), c.INIT_MAP_GRID(c.MAP_GRASS))[y in {1, 2, 3}] for x in range(self.width)] for y in range(self.height)] + self.map = [[(self.initMapGrid(c.MAP_UNAVAILABLE), self.initMapGrid(c.MAP_GRASS))[y in {1, 2, 3}] for x in range(self.width)] for y in range(self.height)] else: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN self.gridHeightSize = c.GRID_Y_SIZE - self.map = [[c.INIT_MAP_GRID(c.MAP_GRASS) for x in range(self.width)] for y in range(self.height)] + self.map = [[self.initMapGrid(c.MAP_GRASS) for x in range(self.width)] for y in range(self.height)] def isValid(self, map_x, map_y): if (map_x < 0 or map_x >= self.width or @@ -38,6 +38,12 @@ class Map(): return False return True + # 地图单元格状态 + # 注意是可变对象,不能直接引用 + # 由于同一格显然不可能种两个相同的植物,所以用集合 + def initMapGrid(PLOT_TYPE): + return {c.MAP_PLANT:set(), c.MAP_SLEEP:False, c.MAP_PLOT_TYPE:PLOT_TYPE} + # 判断位置是否可用 # 暂时没有写紫卡植物的判断方法 # 由于紫卡植物需要移除以前的植物,所以可用另外定义一个函数 diff --git a/source/constants.py b/source/constants.py index e67541f..dc9e2e8 100755 --- a/source/constants.py +++ b/source/constants.py @@ -182,12 +182,6 @@ MAP_GRASS = "grass" MAP_WATER = "water" MAP_TILE = "tile" # 指屋顶上的瓦片 MAP_UNAVAILABLE = "unavailable" # 指完全不能种植物的地方,包括无草皮的荒地和坚果保龄球等红线右侧 -# 地图单元格状态 -# 注意是可变对象,不能直接引用 -# 不喜欢用深拷贝,直接改用函数表示,需要时直接调用该函数生成即可 -# 由于同一格显然不可能种两个相同的植物,所以用集合 -def INIT_MAP_GRID(PLOT_TYPE): - return {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:PLOT_TYPE} # 地图相关像素数据 BACKGROUND_OFFSET_X = 220 @@ -646,6 +640,7 @@ for _part1 in (DUCKY_TUBE_ZOMBIE, CONEHEAD_DUCKY_TUBE_ZOMBIE, BUCKETHEAD_DUCKY_T for _part2 in ("", "Attack", "Swim"): ZOMBIE_RECT[f"{_part1}{_part2}"] = {"x":55, "width":105} + # 音效 def _getSound(filename): return pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(__file__)) ,"resources", "sound", filename)) @@ -696,7 +691,7 @@ SOUNDS = ( # 程序交互等 SOUND_WIN := _getSound("win.ogg"), SOUND_SCREAM := _getSound("scream.ogg"), SOUND_CANNOT_CHOOSE_WARNING := _getSound("cannotChooseWarning.ogg"), - SOUND_FINAL_FANFARE := _getSound("finalfanfare.ogg") + SOUND_FINAL_FANFARE := _getSound("finalfanfare.ogg"), ) # 记录本地存储文件初始值