이전 코드:
print("전직할 직업을 골라주세요.")
print("1. 기사 2. 도적 3. 마법사")
number = int(input("→ "))
if number == 1:
if job is "마법사":
print("전직은 한번만 가능합니다.")
continue
if job is "도적":
print("전직은 한번만 가능합니다.")
continue
이렇게 불필요한 코드들이 많았는데
# 3번 선택했을 때
elif ans == 3:
if ch.job == "평민":
print("전직할 직업을 골라주세요.")
print("1. 기사 2. 도적 3. 마법사")
number = int(input("→ "))
if number == 1:
job = "기사"
ch = Knight(name, hp, power, mp, magic_power, job)
ch.get_JOB()
ch.jattack()
ch.skill()
continue
elif number == 2:
job = "도적"
ch = Thief(name, hp, power, mp, magic_power, job)
ch.get_JOB()
ch.jattack()
ch.skill()
continue
elif number == 3:
job = "마법사"
ch = Magician(name, hp, power, mp, magic_power, job)
ch.get_JOB()
ch.jattack()
ch.skill()
continue
else:
print("번호를 다시 선택해주세요.")
else:
print(f"이미 [{ch.job}]로 전직했습니다.")
print("전직은 한번만 가능합니다.")
continue
미리 앞에서 평민인지 아닌지 판별하고 if문 안으로 들어가도록 코딩하라고 피드백 받았다.
# 선택하기
while True:
print("===========SPARTA RPG GAME============")
print(" 1. 플레이어 생성하기 ")
print(" 2. 몬스터 생성 ")
print(" 3. 전직하기(직업선택) ")
print(" 4. 전투 진행 하기 ")
print(" 5. 풀레이어 정보 보기 ")
print(" 6. 몬스터 정보 보기 ")
print(" 7. 몬스터 도감 보기")
print(" 8. 종료 ")
print("===========SPARTA RPG GAME============")
print("숫자로 입력해주세요. >> ")
ans = int(input())
# 1번 선택했을 때
if ans == 1:
# 플레이어로 부터 정보 입력받기
print("이름을 입력해 주세요: ")
name = str(input(" "))
# 기본 스텟 랜덤으로 부여받기
while True:
hp = random.randrange(100, 150)
power = random.randrange(8, 30)
mp = random.randrange(50, 100)
magic_power = random.randrange(3, 8)
job = "평민"
print(f"hp = {hp}, power = {power} , mp = {mp}, magic_power= {magic_power} ")
print(" 스텟을 다시 부여받겠습니까? y = 네, n = 아니오")
ans = str(input())
if ans == 'y':
continue
elif ans == 'n':
print(f"""
{name} 님의 [기본 스텟]
hp = {hp} power = {power} mp = {mp} magic_power= {magic_power}
""")
break
ch = Character(name, hp, power, mp, magic_power, job)
print(ch.name)
ch.show_status()
# 2번 선택했을 때
elif ans == 2:
# 몬스터 생성하기
print("생성할 몬스터 이름을 입력해 주세요: ")
m_name = str(input(" "))
while True:
m_hp = random.randrange(100, 150)
m_power = random.randrange(8, 20)
print(f"hp = {m_hp}, power = {m_power} ")
print(" 스텟을 다시 부여받겠습니까? y = 네, n = 아니오")
ans = str(input())
if ans == 'y':
continue
elif ans == 'n':
print(f"""
몬스터 {m_name} [기본 스텟]
hp = {m_hp} power = {m_power}
""")
break
else:
print("y/n 중 하나만 입력해주세요!")
continue
monster = Monster(m_name, m_hp, m_power)
monsters.append(monster)
이것 또한 불필요한 코드가 한가득인데
찬찬히 뜯어고쳐보면
# 선택하기
while True:
print("===========SPARTA RPG GAME============")
print(" 1. 플레이어 생성하기 ")
print(" 2. 몬스터 생성 ")
print(" 3. 전직하기(직업선택) ")
print(" 4. 전투 진행 하기 ")
print(" 5. 풀레이어 정보 보기 ")
print(" 6. 몬스터 정보 보기 ")
print(" 7. 몬스터 도감 보기")
print(" 8. 종료 ")
print("===========SPARTA RPG GAME============")
print("숫자로 입력해주세요. >> ")
ans = int(input())
먼저 이 코드의 문제점은
1.함수호출 없이 하려니 시작부터 코드가 길어질 것이 예상됨(if문 중첩 많이 하게되니까 오류 발생 확률 늘어남)
2.ans가 무엇을 지칭하는 변수인지 알기 어려움
3.플레이어 생성과 몬스터 생성이 안되어 있으면 전투 시작이 오류 나니까 한번에 되도록 할 것
def print_menu():
print("===========SPARTA RPG GAME============")
print(" 1. 전직하기(직업선택) ")
print(" 2. 전투 진행 하기 ")
print(" 3. 풀레이어 정보 보기 ")
print(" 4. 몬스터 정보 보기 ")
print(" 5. 몬스터 도감 보기")
print(" 6. 종료 ")
print("===========SPARTA RPG GAME============")
print("숫자로 입력해주세요. >> ")
result = int(input())
return result
return result 한 이유는 나중에 if문 안에 넣으려고..!
java했을 땐 switch-case를 써서 result값을 case 숫자로 쓰면 됐는데,
python에선 match case라는것이 있다고 해서 한번 써보자.
def method(result):
match result:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
이렇게
print_menu()함수에서 return된 result를 method함수의 parameter로 받아와서 match-case문을 진행시키면 더 깔끔한 코드를 완성시킬 수 있을 것 같다.
case1, case2 다음에 함수호출 시키는 명령어 넣으면 되는데
이번주 안으로 다 고치는것이 목표 ㅎㅎ