project/project

미니 프로젝트3 : 파이썬으로 게임 만들어보기(2)

JM Lee 2023. 3. 28. 20:58
728x90

어제에 이어 오늘도 진행했는데, 사실 큰 수정을 진행하지는 않았다.

일단 그래도 수정, 첨부 사항을 만들었는데

 

- assassin 캐릭터가 너무 약하다.

>> 이 캐릭터가 warrior와 wizard에 비해서 뭔가 임팩트 있는 스탯이 없다고 판단

>> 어떠한 스탯을 새로 투여할까 고민(회피, 혹은 일정 턴 당 폭딜)

>>암살 쪽으로 진행해야 한다고 판단해서 순간적인 폭딜 중요하게 생각

>>하지만 무작정 늘리면 다른 캐릭터와 특색이 겹침

그 결과, 플레이어 공격 두 번 당 한 차례씩 공격하도록 설정하는 것이 밸런스에 맞겠다고 판단하여 공격.

if문을 사용해서 turn % 4 = 2가 되면, 목적에 부합하는 결과가 나오기 때문에 이렇게 하기로 함.


또한 클래스 부분도 손을 봤다.

사실 크게 손 댄 것은 없지만, 부모 클래스와 자식 클래스 간에 교통정리가 제대로 되지 않았고,

불필요하게 부모 클래스에 많은 함수가 정의되어 있어서 잡아줄 필요가 있었다.

class Character:
    """
    모든 캐릭터의 모체가 되는 클래스
    """
    def __init__(self, name, hp, mp, power, magic_power):
        self.name = name
        self.max_hp = hp
        self.hp = hp
        self.max_mp = mp
        self.mp = mp
        self.power = power
        self.magic_power = magic_power
    
    #상태창(플레이어)
    def player_show_status(self):
        print(f"{self.name}의 상태: HP {int(self.hp)}/{self.max_hp} MP {self.mp}/{self.max_mp}")

    #상태창(몬스터)
    def monster_show_status(self):
        print(f"{self.name}의 상태: HP {self.hp}/{self.max_hp}")


class Player(Character):
    # 모체 캐릭터의 성능을 가진 자식 플레이어의 특성

    # 플레이어의 물리딜
    def attack(self, other):
        damage = random.randint(self.power - 2, self.power + 2)
        other.hp = max(other.hp - damage, 0)
        print(f"{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
        if other.hp == 0:
            print(f"{other.name}이(가) 쓰러졌습니다.")

    # 플레이어의 마법딜
    def magic_attack(self, other):
        magic_damage = random.randint(self.magic_power + 6, self.magic_power + 12)
        other.hp = max(other.hp - magic_damage, 0)
        self.mp = max(self.mp - 10, 0)

        print(f"{self.name}의 공격! {other.name}에게 {magic_damage}의 데미지를 입혔습니다.")
        if other.hp <= 0:
            print(f"{other.name}이(가) 쓰러졌습니다.")
        
class Monster(Character):
    # 모체 캐릭터의 성능을 가진 자식 몬스터의 특성 ##
    def monster_attack(self, other):
        damage = random.randint(self.power - 2, self.power + 2)
        other.hp = max(other.hp - damage, 0)
        print(f"{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
        if self.hp <= 0:
            print(f"{other.name}이(가) 쓰러졌습니다.")

상태창은 어떻게 할지 고민했는데, Player와 Monster과는 완벽하게 관련있는 것 같진 않아서 뭔가 찜찜해서 그대로 두었다.


추가 : 변수는 대문자를 쓰지 말고 소문자를 사용하자(네이밍 컨벤션)