From 167ed5a1f5432b559ef9787350979b11c5fd2ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Mon, 9 May 2022 09:36:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E5=A4=A7=E6=B3=A2=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=E5=A2=93?= =?UTF-8?q?=E7=A2=91=E7=9A=84=E6=9C=BA=E5=88=B6=EF=BC=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - source/component/map.py | 12 ++++++------ source/component/plant.py | 2 +- source/state/level.py | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e0efdaf..dce125d 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,6 @@ nuitka --mingw64 --standalone --onefile --show-progress --show-memory --output-d * 已实现 * 星星 * 已实现 - * 与原版有所区别,设定为能直接伤害铁门、报纸后面的僵尸 * 尖刺 * 特殊子弹实体——非普通伤害或有特殊效果 * 冰豌豆(减速) diff --git a/source/component/map.py b/source/component/map.py index 237ce48..bc4745d 100755 --- a/source/component/map.py +++ b/source/component/map.py @@ -61,8 +61,8 @@ class Map(): if plantName not in {c.LILYPAD, c.SEASHROOM, c.TANGLEKLEP}: # 这里的集合也可以换成存储在某一文件中的常数的表达 if not self.map[map_y][map_x][c.MAP_PLANT]: # 没有植物肯定可以种植 return True - elif ((self.map[map_y][map_x][c.MAP_PLANT] | {'花盆(未实现)', '南瓜头(未实现)'} == {'花盆(未实现)', '南瓜头(未实现)'}) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 + elif (all((i in {'花盆(未实现)', '南瓜头(未实现)'}) for i in self.map[map_y][map_x][c.MAP_PLANT]) + and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 return True else: return False @@ -72,8 +72,8 @@ class Map(): # 首先需要判断植物是否是水生植物,水生植物不能种植在陆地上 if plantName not in {c.LILYPAD, c.SEASHROOM, c.TANGLEKLEP}: # 这里的集合也可以换成存储在某一文件中的常数的表达 if '花盆(未实现)' in self.map[map_y][map_x][c.MAP_PLANT]: - if ((self.map[map_y][map_x][c.MAP_PLANT] | {'花盆(未实现)', '南瓜头(未实现)'} == {'花盆(未实现)', '南瓜头(未实现)'}) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 + if (all((i in {'花盆(未实现)', '南瓜头(未实现)'}) for i in self.map[map_y][map_x][c.MAP_PLANT]) + and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 if plantName in {c.SPIKEWEED}: # 不能在花盆上种植的植物 return False else: @@ -92,8 +92,8 @@ class Map(): return False else: # 非水生植物,依赖睡莲 if c.LILYPAD in self.map[map_y][map_x][c.MAP_PLANT]: - if ((self.map[map_y][map_x][c.MAP_PLANT] | {c.LILYPAD, '南瓜头(未实现)'} == {c.LILYPAD, '南瓜头(未实现)'}) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 + if (all((i in {c.LILYPAD, '南瓜头(未实现)'}) for i in self.map[map_y][map_x][c.MAP_PLANT]) + and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植;判断方法:并集 if plantName in {c.SPIKEWEED, c.POTATOMINE,'花盆(未实现)'}: # 不能在睡莲上种植的植物 return False else: diff --git a/source/component/plant.py b/source/component/plant.py index 5e6ee73..856d2fb 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -840,7 +840,7 @@ class SunShroom(Plant): def __init__(self, x, y, sun_group): Plant.__init__(self, x, y, c.SUNSHROOM, c.PLANT_HEALTH, None) self.can_sleep = True - self.animate_interval = 200 + self.animate_interval = 140 self.sun_timer = 0 self.sun_group = sun_group self.is_big = False diff --git a/source/state/level.py b/source/state/level.py index f3d4df7..4ced7f8 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -178,6 +178,44 @@ class Level(tool.State): # 否则直接return if self.waveNum >= self.map_data[c.NUM_FLAGS] * 10: if self.map_data[c.BACKGROUND_TYPE] == c.BACKGROUND_NIGHT: + # 生长墓碑 + if not self.graveInLevelAdded: + if current_time - self.waveTime > 100: + # 墓碑最多有12个 + if len(self.graveSet) < 12: + unoccupied = [] + occupied = [] + # 遍历能生成墓碑的区域 + for mapY in range(0, 4): + for mapX in range(4, 8): + # 为空、为毁灭菇坑、为冰道时看作未被植物占据 + if ((not self.map.map[mapY][mapX][c.MAP_PLANT]) or + (all((i in {c.HOLE, c.ICE_FROZEN_PLOT}) for i in self.map.map[mapY][mapX][c.MAP_PLANT]))): + unoccupied.append((mapX, mapY)) + # 已有墓碑的格子不应该放到任何列表中 + elif c.GRAVE not in self.map.map[mapY][mapX][c.MAP_PLANT]: + occupied.append((mapX, mapY)) + if unoccupied: + target = unoccupied[randint(0, len(unoccupied) - 1)] + mapX, mapY = target + posX, posY = self.map.getMapGridPos(mapX, mapY) + self.plant_groups[mapY].add(plant.Grave(posX, posY)) + self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) + self.graveSet.add((mapX, mapY)) + elif occupied: + target = occupied[randint(0, len(occupied) - 1)] + mapX, mapY = target + posX, posY = self.map.getMapGridPos(mapX, mapY) + for i in self.plant_groups[mapY]: + checkMapX, _ = self.map.getMapIndex(i.rect.centerx, i.rect.bottom) + if mapX == checkMapX: + if i.name not in {c.HOLE, c.ICE_FROZEN_PLOT}: + i.health = 0 + self.plant_groups[mapY].add(plant.Grave(posX, posY)) + self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) + self.graveSet.add((mapX, mapY)) + self.graveInLevelAdded = True + # 从墓碑中生成僵尸 if not self.graveZombieCreated: if current_time - self.waveTime > 1500: for item in self.graveSet: @@ -445,6 +483,7 @@ class Level(tool.State): self.plant_groups[mapY].add(plant.Grave(posX, posY)) self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) self.graveZombieCreated = False + self.graveInLevelAdded = False # 小菜单