스푸79 기록 보관소

타자 연습 게임, 타이핑 몬스터(6) - 플레이어 사망 및 사운드 본문

게임공작소

타자 연습 게임, 타이핑 몬스터(6) - 플레이어 사망 및 사운드

스푸79 2025. 3. 16. 13:00

 

 

너무 오랫만에 게임공작소에 글을 올립니다.

세상 일이 그렇듯 마무리할 때가 제일 귀찮고 힘들고 참 그렇습니다.ㅎ

좀비가 창궐한 세상에서 열심히 글자를 타이핑하면서 버티던 용감한 람보의 최후의 모습을

스프라이트로 만들었습니다.ㅜㅜ

지난 번 포스팅에서는 철조망 앞에서 손만 흔들 뿐 좀비가 철조망을 뚫지 못했습니다.

이제는 최후의 보루인 철조망까지 뚫고 람포를 향해 계속 걸어가도록 처리했습니다.

class Barrier(pygame.sprite.Sprite):
    def __init__(self, main, fence, pos, crash):
        super().__init__()
        self.id = "barrier"
        self.main = main
        
        ...(중략)
        
        self.damaged = 0
        self.sound_delay_time = 1000
        self.last_sound_time = pygame.time.get_ticks()
        self.crash = crash
    
        
    def damage(self, power):
        self.damaged += power    
        self.play_crash_sound()
        if self.damaged >= len(self.images):
            return False
        else:
            return True

 

펜스 클래스를 위와 같이 수정했습니다. 좀비가 공격을 하는 수치를 누적해서 damaged에 적용을 합니다.

damaged 값이 barrier의 총 이미지의 갯수보다 큰 경우는 좀비가 공격을 중지하도록 처리했습니다.

barrier의 총 이미지보다 큰 경우는 barrier가 공격에 의해 뚫린거라

좀비가 공격을 중지하고 원래대로 앞으로 전진을 하게 됩니다.

 

class Resources:
    def __init__(self):
        ...(중략)...
                
        self.machinegun = pygame.mixer.Sound(cfg.GAME_SOUND_DIR + "machinegun.wav")
        self.male_scream = pygame.mixer.Sound(cfg.GAME_SOUND_DIR + "male_scream.wav")
        self.female_scream = pygame.mixer.Sound(cfg.GAME_SOUND_DIR + "female_scream.wav")
        self.crash = pygame.mixer.Sound(cfg.GAME_SOUND_DIR + "crash.wav")

 

Resource에는 게임에서 사용할 여러 효과음을 적용했습니다.

타이핑이 성공할 때 적용할 총소리와 좀비가 죽을 때 괴성, 그리고 철조망이 조금씩 부서지는 소리

이렇게 효과음을 게임 초기화 시점에 resource 클래스에서 로딩하도록 처리했습니다.

    def check_hit(self, text):
        ...(중략)...       
        for e in self.enemy_text_sprites:
            if e.text == text:
                if e.rect.centerx >= cfg.SCREEN_WIDTH / 2:
                    self.player.attack("RIGHT")
                    self.resources.machinegun.play()
                    e.destroy()
                else:
                    self.player.attack("LEFT")
                    self.resources.machinegun.play()
                    e.destroy()
                break

 

총소리는 정확하게 타이핑한 경우에만 총을 쏘는 애니메이션과 총소리가 나도록 처리했습니다.

	def set_status(self, status):
        if status == "DIE":
            self.monster_status = cfg.DIE
            self.images = self.die_images
            self.speed = pygame.math.Vector2(0, 0)
            self.scream.play()
            self.collider.clear()

 

좀비는 DIE 상태가 되는 경우에는 scream.play()로 비명을 지르도록 처리했습니다.

좀비는 남자 좀비와 여자 좀비 성별이 나눠져 있기 때문에 소리를 다르게 처리했습니다. (남녀차별 같은거 아닙니다.^^;)

            random_pos = (x, 0)
            random_length = get_word_length(time.time() - self.word_pick_time)
            random_text = random.choice(self.word_dict[random_length])
            #50퍼센트 확률로 남자좀비 또는 여자좀비
            if random.random() < 0.5:
                walk = self.resources.zombie_walk_images
                die = self.resources.zombie_die_images
                attack = self.resources.zombie_attack_images
                scream = self.resources.male_scream
            else:
                walk = self.resources.zombie_woman_walk_images
                die = self.resources.zombie_woman_die_images
                attack = self.resources.zombie_woman_attack_images    
                scream = self.resources.female_scream

 

갈등이 없도록 0.5로 반반 나눴습니다.

한쪽 성별이 많이 나온다고 생각하셨다면 백프로 오해예요.

 

전체 소스를 첨부합니다.

뭐 대단한거는 아니지만 게임 내에 사용한 sprites도 첨부합니다.

자유롭게 사용하셔도 무방합니다.

06. sound.zip
14.81MB

 

실행방법은 간단합니다. python이 설치된 PC에서 (설치 버전 3.8 이상)

압축파일을 풀고 python main.py로 실행하시면 됩니다.

pygame과 관련된 오류가 나는 경우

pip install pygame으로 pygame library를 설치하시면 됩니다.