From 21b0611b2261f11d66fb45cd194cf2d1739fe186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Thu, 7 Apr 2022 12:55:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=9C=B0=E5=88=BA=E3=80=81?= =?UTF-8?q?=E5=80=AD=E7=93=9C=E6=94=BB=E5=87=BB=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/data/map/level_0.json | 12 +++++++++++- source/component/plant.py | 20 ++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/resources/data/map/level_0.json b/resources/data/map/level_0.json index e090888..53ba7d9 100644 --- a/resources/data/map/level_0.json +++ b/resources/data/map/level_0.json @@ -8,6 +8,16 @@ {"time":1000, "map_y":2, "name":"Zombie"}, {"time":1000, "map_y":2, "name":"Zombie"}, {"time":1000, "map_y":2, "name":"Zombie"}, - {"time":1000, "map_y":2, "name":"Zombie"} + {"time":1000, "map_y":2, "name":"Zombie"}, + {"time":2000, "map_y":2, "name":"BucketheadZombie"}, + {"time":3000, "map_y":2, "name":"BucketheadZombie"}, + {"time":4000, "map_y":2, "name":"Zombie"}, + {"time":5000, "map_y":2, "name":"Zombie"}, + {"time":6000, "map_y":2, "name":"Zombie"}, + {"time":7000, "map_y":2, "name":"BucketheadZombie"}, + {"time":8000, "map_y":2, "name":"BucketheadZombie"}, + {"time":9000, "map_y":2, "name":"Zombie"}, + {"time":10000, "map_y":2, "name":"Zombie"}, + {"time":11000, "map_y":2, "name":"Zombie"} ] } \ No newline at end of file diff --git a/source/component/plant.py b/source/component/plant.py index b55e6b6..5cec652 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -575,8 +575,16 @@ class Squash(Plant): (self.rect.right + c.GRID_X_SIZE >= zombie.rect.x)): return True # 攻击状态 - elif (self.state == c.ATTACK) and (self.rect.left <= zombie.rect.right or self.rect.right >= zombie.rect.left): - return True + elif (self.state == c.ATTACK): + # 僵尸在倭瓜右侧 + if zombie.rect.x >= self.rect.x: + # 重叠20个像素或15%判断为可以攻击 + if (self.rect.right - zombie.rect.left >= 20) or (self.rect.right - zombie.rect.left >= 0.15*zombie.rect.width): + return True + # 僵尸在倭瓜右侧 + else: + if (zombie.rect.right - self.rect.left >= 20) or (zombie.rect.right - self.rect.left >= 0.15*zombie.rect.width): + return True return False def setAttack(self, zombie, zombie_group): @@ -589,11 +597,11 @@ class Squash(Plant): def attacking(self): if self.squashing: if (self.frame_index + 1) == self.frame_num: - self.attack_zombie.kill() for zombie in self.zombie_group: if self.canAttack(zombie): zombie.setDamage(1800, False) - self.health = 0 + self.health = 0 # 避免僵尸在原位啃食 + self.kill() elif self.aim_timer == 0: self.aim_timer = self.current_time self.changeFrames(self.aim_frames) @@ -622,8 +630,8 @@ class Spikeweed(Plant): self.state = c.IDLE def canAttack(self, zombie): - if (self.rect.x <= zombie.rect.right and - (self.rect.right >= zombie.rect.x)): + # 地刺能不能扎的判据:僵尸中心与地刺中心的距离或僵尸包括了地刺中心和右端(平衡得到合理的攻击范围,"僵尸包括了地刺中心和右端"是为以后巨人做准备) + if ((-60 <= zombie.rect.x - self.rect.x <= 40) or (zombie.rect.left <= self.rect.x <= zombie.rect.right and zombie.rect.left <= self.rect.right <= zombie.rect.right)): return True return False