From 39a98e38481be0e49b2f5401c0b916bc1da878ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Fri, 6 May 2022 14:25:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=9F=B3=E6=95=88=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E8=AE=BE=E5=AE=9A=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E8=AE=BE=E5=AE=9A=EF=BC=8C=E5=8A=A0=E5=85=A5=E6=8A=A5?= =?UTF-8?q?=E7=BA=B8=E5=83=B5=E5=B0=B8=E6=9A=B4=E8=B5=B0=E9=9F=B3=E6=95=88?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B8=B8=E6=88=8F=E9=80=9F=E5=BA=A6?= =?UTF-8?q?=E5=80=8D=E7=8E=87=E8=AE=BE=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/data/map/level_0.json | 3 ++- resources/sound/newspaperZombieAngry.ogg | Bin 0 -> 8513 bytes source/component/menubar.py | 4 ++++ source/component/plant.py | 11 +++++++---- source/component/zombie.py | 4 +++- source/state/level.py | 2 -- source/tool.py | 4 ++-- 7 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 resources/sound/newspaperZombieAngry.ogg diff --git a/resources/data/map/level_0.json b/resources/data/map/level_0.json index 486255c..ec95b95 100644 --- a/resources/data/map/level_0.json +++ b/resources/data/map/level_0.json @@ -5,7 +5,8 @@ "spawn_zombies":"list", "zombie_list":[ {"time":0, "map_y":4, "name":"ScreenDoorZombie"}, + {"time":0, "map_y":1, "name":"NewspaperZombie"}, {"time":0, "map_y":2, "name":"ConeheadDuckyTubeZombie"}, - {"time":60000, "map_y":2, "name":"Zombie"} + {"time":80000, "map_y":2, "name":"ConeheadDuckyTubeZombie"} ] } \ No newline at end of file diff --git a/resources/sound/newspaperZombieAngry.ogg b/resources/sound/newspaperZombieAngry.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e690503d0739472c83541e8d931a739b377edcfe GIT binary patch literal 8513 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 OfPi5ztw}Z@2K)!RkN4~V literal 0 HcmV?d00001 diff --git a/source/component/menubar.py b/source/component/menubar.py index 8232597..8a63d17 100755 --- a/source/component/menubar.py +++ b/source/component/menubar.py @@ -361,6 +361,8 @@ class Panel(): if delete_card: self.selected_cards.remove(delete_card) self.selected_num -= 1 + # 播放点击音效 + pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "tap.ogg")).play() if self.selected_num >= c.CARD_MAX_NUM: return @@ -369,6 +371,8 @@ class Panel(): if card.checkMouseClick(mouse_pos): if card.canSelect(): self.addCard(card) + # 播放点击音效 + pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "tap.ogg")).play() break def addCard(self, card): diff --git a/source/component/plant.py b/source/component/plant.py index 1f71acf..79b9a7e 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -141,7 +141,8 @@ class StarBullet(Bullet): self.rect.x += 7 self.rect.y += 7 elif self.direction == c.STAR_UPWARD: - self.rect.y -= 10 + # 实际上不知道为什么向上飞的看起来要快一些,所以拟合的时候把速度调小了一点 + self.rect.y -= 9 elif self.direction == c.STAR_DOWNWARD: self.rect.y += 10 else: @@ -412,7 +413,7 @@ class SnowPeaShooter(Plant): # 播放发射音效 pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "shoot.ogg")).play() # 播放冰子弹音效 - pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "snowPeaSparkles")).play() + pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "snowPeaSparkles.ogg")).play() class WallNut(Plant): @@ -1150,10 +1151,12 @@ class StarFruit(Plant): if (self.rect.x >= zombie.rect.x) and (self.map_y == zombieMapY): # 对于同行且在杨桃后的僵尸 return True # 斜向上,理想直线方程为:f(zombie.rect.x) = -0.75*(zombie.rect.x - (self.rect.right - 5)) + self.rect.y - 10 - elif -100 <= (zombie.rect.y - (-0.75*(zombie.rect.x - (self.rect.right - 5)) + self.rect.y - 10)) <= 70 and (zombie.rect.left <= c.SCREEN_WIDTH): + # 注意实际上为射线 + elif -100 <= (zombie.rect.y - (-0.75*(zombie.rect.x - (self.rect.right - 5)) + self.rect.y - 10)) <= 70 and (zombie.rect.left <= c.SCREEN_WIDTH) and (zombie.rect.x >= self.rect.x): return True # 斜向下,理想直线方程为:f(zombie.rect.x) = zombie.rect.x + self.rect.y - self.rect.right - 15 - elif abs(zombie.rect.y - (zombie.rect.x + self.rect.y - self.rect.right - 15)) <= 70 and (zombie.rect.left <= c.SCREEN_WIDTH): + # 注意实际上为射线 + elif abs(zombie.rect.y - (zombie.rect.x + self.rect.y - self.rect.right - 15)) <= 70 and (zombie.rect.left <= c.SCREEN_WIDTH) and (zombie.rect.x >= self.rect.x): return True elif zombie.rect.left <= self.rect.x <= zombie.rect.right: return True diff --git a/source/component/zombie.py b/source/component/zombie.py index 9798d2c..77030a8 100755 --- a/source/component/zombie.py +++ b/source/component/zombie.py @@ -105,7 +105,7 @@ class Zombie(pg.sprite.Sprite): # 在右侧岸左 if self.rect.right <= c.MAP_POOL_FRONT_X: # 在左侧岸右,左侧岸位置为预估 - if self.rect.x >= c.MAP_POOL_OFFSET_X: + if self.rect.right - 25 >= c.MAP_POOL_OFFSET_X: # 还未进入游泳状态 if not self.swimming: self.swimming = True @@ -183,6 +183,8 @@ class Zombie(pg.sprite.Sprite): self.helmetType2 = False if self.name == c.NEWSPAPER_ZOMBIE: self.speed = 2.5 + # 触发报纸僵尸暴走音效 + pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "newspaperZombieAngry.ogg")).play() if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio()): self.walk_timer = self.current_time if self.is_hypno: diff --git a/source/state/level.py b/source/state/level.py index 2e3987e..d21dd16 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -288,8 +288,6 @@ class Level(tool.State): self.panel.checkCardClick(mouse_pos) if self.panel.checkStartButtonClick(mouse_pos): self.initPlay(self.panel.getSelectedCards()) - # 播放点击音效 - pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "tap.ogg")).play() def initPlay(self, card_list): diff --git a/source/tool.py b/source/tool.py index dbd5e36..43170c2 100755 --- a/source/tool.py +++ b/source/tool.py @@ -34,7 +34,7 @@ class Control(): self.screen = pg.display.get_surface() self.done = False self.clock = pg.time.Clock() # 创建一个对象来帮助跟踪时间 - self.fps = 30 + self.fps = 50 * c.GAME_RATE self.keys = pg.key.get_pressed() self.mouse_pos = None self.mouse_click = [False, False] # value:[left mouse click, right mouse click] @@ -89,7 +89,7 @@ class Control(): elif event.type == pg.MOUSEBUTTONDOWN: self.mouse_pos = pg.mouse.get_pos() self.mouse_click[0], _, self.mouse_click[1] = pg.mouse.get_pressed() - print('pos:', self.mouse_pos, ' mouse:', self.mouse_click) + print('pos:', self.mouse_pos) def run(self):