3/20~26 WIL

나명흠·2023년 3월 27일

일주일 동안 파이썬 기초강의와 심화강의를 반복해서 들었고 모두 생소하지만 익숙한 이상한 느낌이었다.

금요일에 개인 과제가 발제되었고 주말에 시간을 내어서 과제를 들여다 보았다.
과제는 파이썬으로 턴제 게임을 만드는 것.

class Character:
    """
    모든 캐릭터의 모체가 되는 클래스
    """
    def __init__(self, name, hp, power):
        self.name = name
        self.max_hp = hp
        self.hp = hp
        self.power = power

    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 show_status(self):
        print(f"{self.name}의 상태: HP {self.hp}/{self.max_hp}")

이게 힌트로 주어진 코드인데 이걸 해석하는 것 부터 시작했다.
우선 init 이게 도대체 뭐지..?

chat gpt:

init는 파이썬 클래스의 특수한 메서드로, 객체가 생성될 때 호출되는 초기화 함수입니다. 클래스 내부에 정의된 init 메서드는 객체의 인스턴스 변수를 초기화하고, 객체를 생성할 때 필요한 모든 속성과 값을 설정할 수 있습니다.

그러니까 객체를 생성할 때 기본값으로 가지게 될 베이스 라는거지? 라고 이해했다.

일주일이 지난 지금 2023/04/02에 다시 와서 보니 이 때는 제대로 이해를 못했던 것 같다. 객체가 생성 될 때 호출되는 함수. 무조건 실행되기 때문에 속성과 값을 설정했던 것이다. 그래야 이 init를 가진 Character 클래스를 통해 player를 객체로 만들어 내가 원하는 스텟을 줄 수 있으니까!!

나는 이 게임을 도박적인 수가 많도록 만들고 싶었다.

def __init__(self, name, attack_type):
        self.name = name
        self.max_hp = random.randint(50,150)
        self.hp = self.max_hp
        self.max_mp = random.randint(50,150)
        self.mp = self.max_mp
        self.ad = random.randint(5,15)
        self.ap = random.randint(10,20)
        self.attack_type = attack_type

시작 시 체력, 마나, 물리공격력과 마법공격력도 때마다 편차가 크게 하고 싶어서 작업중이다.

이후 다음 목표는 일정량의 마나를 소모하고 랜덤 데미지를 가하는 것이다. 마나소모를 어떻게 해야할지 고민..

profile
가보자고

0개의 댓글