From 25bf28e4f42f057d6d40e38b49dd6abc86e1abe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sun, 15 May 2022 13:17:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=92=91=E6=9D=86=E8=B7=B3?= =?UTF-8?q?=E8=A2=AB=E5=90=8C=E4=B8=80=E8=A1=8C=E7=9A=84=E5=AF=92=E5=86=B0?= =?UTF-8?q?=E8=8F=87=E5=86=BB=E7=BB=93=E5=90=8E=E4=B8=A2=E5=A4=B1=E6=9D=86?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/level.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/source/state/level.py b/source/state/level.py index acdfcfe..039c358 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -1072,24 +1072,48 @@ class Level(tool.State): if zombie.canSwim and (not zombie.swimming): continue - # 以下代码为了实现各个功能,极其凌乱,尚未优化性能 + # 以下代码为了实现各个功能,较为凌乱 attackableCommonPlants = [] attackableBackupPlant = [] # 利用更加精细的循环判断啃咬优先顺序 for plant in self.plant_groups[i]: if collided_func(plant, zombie): - if plant.name in {"南瓜头(未实现)"}: + # 优先攻击南瓜头 + if plant.name == "南瓜头(未实现)": targetPlant = plant break + # 衬底植物情形 elif plant.name in {c.LILYPAD, "花盆(未实现)"}: attackableBackupPlant.append(plant) - # 注意要剔除掉两个“假植物”,以及不能被啃的地刺 - elif plant.name == c.SQUASH: - # 跳起后不得被啃食 - if not plant.squashing: - attackableCommonPlants.append(plant) - elif plant.name not in {c.HOLE, c.ICE_FROZEN_PLOT, c.GRAVE, c.SPIKEWEED}: + # 一般植物情形 + # 同时也忽略了不可啃食对象 + elif plant.name not in {# 不可啃食对象 + # 非植物对象 + c.HOLE, c.ICE_FROZEN_PLOT, + c.GRAVE, + # 对一般僵尸无条件不可啃食植物:地刺 + c.SPIKEWEED, + # 对一般僵尸有条件不可啃食植物:跳起的倭瓜、释放效果后的爆炸类植物 + # 这类在后面还需要判断 + c.SQUASH, c.ICESHROOM, + c.REDWALLNUTBOWLING, c.CHERRYBOMB, + c.JALAPENO, c.DOOMSHROOM, + c.POTATOMINE + }: attackableCommonPlants.append(plant) + # 在某些状态下忽略啃食碰撞但某些状况下不能忽略的情形 + elif plant.name in {# 注意爆炸坚果的触发也是啃食类碰撞,因此这里不能省略 + c.SQUASH, c.ICESHROOM, + c.REDWALLNUTBOWLING, c.CHERRYBOMB, + c.JALAPENO, c.DOOMSHROOM, + c.POTATOMINE, + }: + if plant.name == c.SQUASH: + if not plant.squashing: + attackableCommonPlants.append(plant) + else: + if not plant.start_boom: + attackableCommonPlants.append(plant) else: if attackableCommonPlants: # 默认为最右侧的一个植物