尝试加入音效

This commit is contained in:
星外之神 2022-05-05 19:18:50 +08:00
parent 89445251ec
commit 8526d2ed1b
6 changed files with 44 additions and 3 deletions

BIN
resources/sound/shovel.ogg Normal file

Binary file not shown.

View File

@ -30,6 +30,8 @@ class Car(pg.sprite.Sprite):
def setWalk(self):
if self.state == c.IDLE:
self.state = c.WALK
# 播放音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "carWalking.ogg"))
def draw(self, surface):
surface.blit(self.image, self.rect)
@ -108,6 +110,12 @@ class Bullet(pg.sprite.Sprite):
self.frames = self.explode_frames
self.image = self.frames[self.frame_index]
# 播放子弹爆炸音效
if self.name == c.BULLET_FIREBALL:
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "firepea.ogg"))
else:
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "bulletExplode.ogg"))
def draw(self, surface):
surface.blit(self.image, self.rect)

View File

@ -1,4 +1,5 @@
import pygame as pg
from random import randint
from .. import tool
from .. import constants as c
@ -221,8 +222,11 @@ class Zombie(pg.sprite.Sprite):
if self.checkToDie(self.losthead_attack_frames):
return
if (self.current_time - self.freeze_timer) > c.FREEZE_TIME:
if (self.current_time - self.freeze_timer) >= c.MIN_FREEZE_TIME + randint(0, 2000):
self.setWalk()
# 注意寒冰菇解冻后还有减速
self.ice_slow_timer = self.freeze_timer + 10000 # 每次冰冻冻结 + 减速时间为20 s而减速有10 s计时故这里+10 s
self.ice_slow_ratio = 2
def setLostHead(self):
self.losthead_timer = self.current_time
@ -274,6 +278,9 @@ class Zombie(pg.sprite.Sprite):
return self.ice_slow_ratio # 攻击速度只取决于冰冻状态
def setIceSlow(self):
# 在转入冰冻减速状态时播放冰冻音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "freeze.ogg"))
# when get a ice bullet damage, slow the attack or walk speed of the zombie
self.ice_slow_timer = self.current_time
self.ice_slow_ratio = 2
@ -412,6 +419,9 @@ class Zombie(pg.sprite.Sprite):
else:
self.changeFrames(self.attack_frames)
# 播放啃咬音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "zombieAttack.ogg"))
def setDie(self):
self.state = c.DIE
self.animate_interval = self.die_animate_interval

View File

@ -222,7 +222,7 @@ SUN_VALUE = 25
# 僵尸冷冻
ICE_SLOW_TIME = 10000
FREEZE_TIME = 7500
MIN_FREEZE_TIME = 4000
ICETRAP = 'IceTrap'
# 植物卡片信息

View File

@ -193,6 +193,9 @@ class Level(tool.State):
self.waveTime = current_time
self.waveZombies = self.waves[self.waveNum - 1]
self.numZombie = len(self.waveZombies)
# 第一波刚刚刷出来的时候播放音效
if self.waveNum == 1:
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "zombieComing.ogg"))
return
else:
if ((current_time - self.waveTime >= 45000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 25000)):
@ -200,6 +203,8 @@ class Level(tool.State):
self.waveTime = current_time
self.waveZombies = self.waves[self.waveNum - 1]
self.numZombie = len(self.waveZombies)
# 一大波时播放音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "hugeWaveApproching.ogg"))
return
elif ((current_time - self.waveTime >= 43000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 23000)):
self.showHugeWaveApprochingTime = current_time
@ -216,7 +221,6 @@ class Level(tool.State):
self.waveTime = current_time - 23000 # 即倒计时2000 ms
# 旧机制,目前仅用于调试
def setupZombies(self):
def takeTime(element):
@ -587,6 +591,8 @@ class Level(tool.State):
if sun.checkCollision(mouse_pos[0], mouse_pos[1]):
self.menubar.increaseSunValue(sun.sun_value)
clickedSun = True
# 播放收集阳光的音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "collectSun.ogg"))
# 拖动植物或者铲子
if not self.drag_plant and mouse_pos and mouse_click[0] and not clickedSun:
@ -594,6 +600,8 @@ class Level(tool.State):
if result:
self.setupMouseImage(result[0], result[1])
clickedCardsOrMap = True
# 播放音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "clickCard.ogg"))
elif self.drag_plant:
if mouse_click[1]:
self.removeMouseImage()
@ -618,6 +626,8 @@ class Level(tool.State):
self.drag_shovel = not self.drag_shovel
if not self.drag_shovel:
self.removeMouseImagePlus()
# 播放点击铲子的音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "shovel.ogg"))
elif self.drag_shovel:
# 移出这地方的植物
self.shovelRemovePlant(mouse_pos)
@ -775,6 +785,9 @@ class Level(tool.State):
self.map.addMapPlant(map_x, map_y, self.plant_name, sleep=mushroomSleep)
self.removeMouseImage()
# 播放种植音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "plant.ogg"))
def setupHintImage(self):
pos = self.canSeedPlant(self.plant_name)
if pos and self.mouse_image:
@ -938,6 +951,9 @@ class Level(tool.State):
zombie.setBoomDie()
def freezeZombies(self, plant):
# 播放冻结音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "freeze.ogg"))
for i in range(self.map_y_len):
for zombie in self.zombie_groups[i]:
if zombie.rect.left <= c.SCREEN_WIDTH:
@ -979,6 +995,9 @@ class Level(tool.State):
if ((abs(zombie.rect.centerx - x) <= plant.explode_y_range) or
((zombie.rect.right - (x-plant.explode_x_range) > 20) or (zombie.rect.right - (x-plant.explode_x_range))/zombie.rect.width > 0.2, ((x+plant.explode_x_range) - zombie.rect.left > 20) or ((x+plant.explode_x_range) - zombie.rect.left)/zombie.rect.width > 0.2)[zombie.rect.x > x]): # 这代码不太好懂,后面是一个判断僵尸在左还是在右,前面是一个元组,[0]是在左边的情况,[1]是在右边的情况
zombie.setDamage(1800, damageType=c.ZOMBIE_RANGE_DAMAGE)
else:
# 用铲子移除植物时播放音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "plant.ogg"))
# 避免僵尸在用铲子移除植物后还在原位啃食
plant.health = 0
@ -1111,9 +1130,13 @@ class Level(tool.State):
self.game_info[c.LEVEL_NUM] += 1
self.next = c.GAME_VICTORY
self.done = True
# 播放胜利音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "win.ogg"))
elif self.checkLose():
self.next = c.GAME_LOSE
self.done = True
# 播放失败音效
pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ,"resources", "sound", "lose.ogg"))
def drawMouseShow(self, surface):
if self.hint_plant: