增加最后一大波新增一个墓碑的机制;优化

This commit is contained in:
星外之神 2022-05-09 09:36:46 +08:00
parent 653009c6be
commit 167ed5a1f5
4 changed files with 46 additions and 8 deletions

View File

@ -126,7 +126,6 @@ nuitka --mingw64 --standalone --onefile --show-progress --show-memory --output-d
* 已实现
* 星星
* 已实现
* 与原版有所区别,设定为能直接伤害铁门、报纸后面的僵尸
* 尖刺
* 特殊子弹实体——非普通伤害或有特殊效果
* 冰豌豆(减速)

View File

@ -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:

View File

@ -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

View File

@ -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
# 小菜单