log.Sehee
TIL / 3/29 / Python_Cat game PJ 본문
문제
캐릭터가 몬스터를 잡을 때 마다 보상 시스템으로 일정한 경험치를 얻으면서 레벨이 올라가는 시스템을 만들어야했는데 레벨이 올라갈 때마다 올라가고, 올라가고, 올라가는 스테이터스의 동적인 값을 반복해서 일정한 비율로 올려주어야 하는 시스템이였기 때문에 처음에는 반복문인지... 무슨 함수를 써야하는지... 클래스를 활용하는 것인지 고민이 많았다.
시도
처음엔 몬스터도 레벨이 있으며, 레벨마다 동적인 값의 스테이터스가 있어야 하니 플레이어 뿐만 아니라 몬스터도 상속받는 오브젝트 클래스에 레벨마다의 스테이터스값을 아예 함수값으로 고정해놓을까 했었다.
하지만 생각해보니 이미 몬스터들은 플레이어의 레벨 + 2 + random.randiant(1,2)로 설정되어있으며, 스테이터스도 동적인 설정이 되어있었고 보스몹들은 임의로 설정해주면 되었기에 나는 플레이어들의 레벨업과 레벨업에 따른 스테이터스의 성장만을 신경쓰면 되는 시스템이였다.
그래서 일단 1레벨업을 하면 전체적인 스테이터스가 백분율로 15퍼센트씩 오르는 전역함수를 선언해
플레이어 클래스 속 전체 스테이터스에 넣어놓았다.
# 레벨업마다 전체스탯이 오르는 함수입니다. 20%씩 오르는 것으로 임의 조정해놨습니다
def sh_state_up(a):
return int(a * 1.2)
...
class Character(Object):
def __init__(self, name, level, HP, MP, attack, defense, speed, eq='', exp=0) -> None:
super().__init__(name, level, HP, MP, attack, defense, speed)
self.exp = exp
self.max_exp = 100
self.eq = eq
def level_plus1(self):
self.max_HP = sh_state_up(self.max_HP)
self.HP = sh_state_up(self.HP)
self.max_MP = sh_state_up(self.max_MP)
self.MP = sh_state_up(self.MP)
self.attack = sh_state_up(self.attack)
self.defense = sh_state_up(self.defense)
self.speed = sh_state_up(self.speed)
그런데 레벨업 함수를 어떻게 만들지 감이 안와서.. 일단 함수 자체는 만들어 놓아야 할 것 같아 뼈대는 만들어놓았다...
# sh개인메모,, 레벨오를때마다 self.exp의 초기화와 max_exp의 값이올라야함,,
# 또는 self.max_exp의 값만 올라가게 만들어서 같아질 때 마다 레벨업하기..
def level_up(self):
if self.exp >= self.max_exp:
self.level+1
print(f'{self.name}가 LV.{self.level}로 레벨업했습니다!')
해결
오늘 안으로는 시간이 없어서 해당 함수는 완성하지 못했다.
함수를 만들고 레벨업을 할 때마다 스테이터스가 오르는 level_plus1함수를 level_up 함수 안에 적용시키면 될 것 같긴하다.
배운 점
백분율로 계산하기 위해서 여러 계산식을 검색했는데.. 백분율로 계산하면 결과값이 퍼센트로 나와서 int를 사용해도 실수로 변환할 수가 없었다. 그래서 그냥 변수 a를 넣고 실수 * 1.2(20%)로 곱셈을 한 뒤 int로 감싸주었더니 제대로 값이 나왔다.. 어떨 때는 그냥 내가 알고 있는 지식을 사용해보는 것도 좋은 방법이라는 것을 깨달았다....