실습(01 ~ 08 총정리)
보물상자에서 랜덤으로 무기를 획득하여 길을 가다가 마주치는 몬스터와 싸우는 게임 만들기
1-1. 보물상자를 발견했다는 메시지를 출력하고 사용자가 아무 키나 누르기를 기다린다.(print, input)
print('당신은 길을 가다가 ' + YELLOW + '[보물상자]' + END + '를 발견했습니다.')
input('아무 키나 누르십시오...............')
1-2. 보물상자에서 랜덤으로 1개의 무기를 획득한다.(random, list)
- 각 무기는 [무기이름, 최소공격력, 최대공격력]의 데이터를 가짐
sel = rd.randint(0, 4) # 선택 가능 weapons 개수([0] ~ [4])
weapons = [['휴지', 1, 3], ['목검', 3, 5], ['검', 5, 10], ['대포', 1, 50], ['에픽검', 50, 100]]
my_weapon = weapons[sel] # 획득한 무기
if sel == 0: # sel : weapons 1번째 항목, [0] : 1번째 항목의 휴지
print('당신은 [{}]을/를 획득하엿습니다.'.format(weapons[sel][0]))
elif sel == 1: # sel : weapons 2번째 항목, [0] : 2번째 항목의 목검
print('당신은' + GREEN + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 2: # sel : weapons 3번째 항목, [0] : 3번째 항목의 검
print('당신은' + BLUE + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 3: # sel : weapons 4번째 항목, [0] : 4번째 항목의 대포
print('당신은' + YELLOW + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 4: # sel : weapons 5번째 항목, [0] : 5번째 항목의 에픽검
print('당신은' + MAGENTA + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
2-1. 길을 가다가 랜덤으로 몬스터를 만난다.(random, List)
- 각 몬스터는 [몬스터명, 최소공격력, 최대공격력]의 데이터를 가짐
MYIMAGE = '(・ิω・ิ)'
MONIMAGE = ['(;◔д◔)', 'ヘ(= ̄∇ ̄)ノ', '๑◕‿‿◕๑']
mons = [['늑대', 1, 3], ['산적', 5, 10], ['드래곤', 1, 100]]
sel = rd.randint(0, 2) # 선택 가능 mons 개수([0] ~ [4])
if sel == 2: # sel : mons 3번째 항목, [0] : 3번째 항목의 드래곤
print('당신은 길을 가다가' + RED + '[{}]'.format(mons[sel][0]) + END + '을/를 만났습니다.')
else:
print('당신은 길을 가다가' + GREEN + '[{}]'.format(mons[sel][0]) + END + '을/를 만났습니다.')
my_mons = mons[sel] # 마주친 몬스터
3-1. 초기 양쪽의 에너지는 100이다.(my_energy, mon_energy에 저장한다.)
my_energy = 100
mon_energy = 100
3-2. 무한루프로 전투를 한다. 단, 둘 중 하나가 에너지가 0이 되면 탈출한다.(while, break)
while True:
3-3. 사용자는 공격 또는 회복을 선택한다.
user_input = input('행동을 선택하십시오.(1. 공격, 2. 회복) : ')
while True:
if user_input == '1' or user_input == '2':
break
3-4. 공격을 선택했다면 최소와 최대 공격력 사이로 공격을 한다.
if user_input == '1':
damage = rd.randint(my_weapon[1], my_weapon[2])
mon_energy = mon_energy - damage
print('당신은 공격으로 {}의 데미지를 입혔습니다. {}의 체력 : {}'.format(damage, my_mons[0], mon_energy)
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END # 에너지를 한 칸당 5로 설정하여 총 20칸으로 설정
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5)) # 21로 설정하지 않으면 몬스터와 나의 에너지가 붙어서 출력된다(위에서 IMAGE 출력을 11로 설정했기 때문)
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
if mon_energy <= 0:
break
3-5. 회복을 선택했다면 0 ~ 30 사이로 회복한다.(단, 최대 에너지인 100을 넘길 수 없다.)
if user_input == '2':
heal = rd.randint(0, 30)
my_energy = my_energy + heal
if my_energy > 100:
my_energy = 100
print('당신은 회복으로 {}의 에너지가 회복되었습니다. 당신의 체력 : {}'.format(heal, my_energy))
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5))
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
3-6. 몬스터 차례
damage = rd.randint(my_mons[1], my_mons[2])
my_energy = my_energy - damage
if my_energy < 0:
my_energy = 0
print('당신은 {}의 공격으로 {}의 피해를 입었습니다. 당신의 체력 : {}'.format(my_mons[0], damage, my_energy))
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5))
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
if my_energy <= 0:
break
4-1. 승리 또는 패배에 따라 메시지를 출력한다.
if mon_energy <= 0: # 승리
print('{}이/가 말했습니다. "강하군"'.format(my_mons[0]))
time.sleep(1) # 1초 후 다음 print()가 출력됨
print('{}이/가 [붉은보석]을 주었습니다.'.format(my_mons[0]))
else: # 패배
print('{}이/가 말했습니다. 하하하 상대가 안되는군'.format(my_mons[0]))
print('{}이/가 [내 가방]을 가져갔습니다.'.format(my_mons[0]))
5. 결과
※ 전체 코드
from myutils import *
import random as rd
import time
# 1-1. 보물상자를 발견했다는 메시지를 출력하고 사용자가 아무 키나 누르기를 기다린다.(print, input)
print('당신은 길을 가다가 ' + YELLOW + '[보물상자]' + END + '를 발견했습니다.')
input('아무 키나 누르십시오...............')
# 1-2. 보물상자에서 랜덤으로 1개의 무기를 획득한다.(random, list)
# 각 무기는 [무기이름, 최소공격력, 최대공격력]의 데이터를 가짐
sel = rd.randint(0, 4) # 선택 가능 weapons 개수([0] ~ [4])
weapons = [['휴지', 1, 3], ['목검', 3, 5], ['검', 5, 10], ['대포', 1, 50], ['에픽검', 50, 100]]
my_weapon = weapons[sel] # 획득한 무기
if sel == 0: # sel : weapons 1번째 항목, [0] : 1번째 항목의 휴지
print('당신은 [{}]을/를 획득하엿습니다.'.format(weapons[sel][0]))
elif sel == 1: # sel : weapons 2번째 항목, [0] : 2번째 항목의 목검
print('당신은' + GREEN + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 2: # sel : weapons 3번째 항목, [0] : 3번째 항목의 검
print('당신은' + BLUE + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 3: # sel : weapons 4번째 항목, [0] : 4번째 항목의 대포
print('당신은' + YELLOW + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
elif sel == 4: # sel : weapons 5번째 항목, [0] : 5번째 항목의 에픽검
print('당신은' + MAGENTA + '[{}]'.format(weapons[sel][0]) + END + '을/를 획득하엿습니다.')
# 2-1. 길을 가다가 랜덤으로 몬스터를 만난다.(random, List)
# 각 몬스터는 [몬스터명, 최소공격력, 최대공격력]의 데이터를 가짐
MYIMAGE = '(・ิω・ิ)'
MONIMAGE = ['(;◔д◔)', 'ヘ(= ̄∇ ̄)ノ', '๑◕‿‿◕๑']
mons = [['늑대', 1, 3], ['산적', 5, 10], ['드래곤', 1, 100]]
sel = rd.randint(0, 2) # 선택 가능 mons 개수([0] ~ [4])
if sel == 2: # sel : mons 3번째 항목, [0] : 3번째 항목의 드래곤
print('당신은 길을 가다가' + RED + '[{}]'.format(mons[sel][0]) + END + '을/를 만났습니다.')
else:
print('당신은 길을 가다가' + GREEN + '[{}]'.format(mons[sel][0]) + END + '을/를 만났습니다.')
my_mons = mons[sel] # 마주친 몬스터
# 3-1. 초기 양쪽의 에너지는 100이다.(my_energy, mon_energy에 저장한다.)
my_energy = 100
mon_energy = 100
# 3-2. 무한루프로 전투를 한다. 단, 둘 중 하나가 에너지가 0이 되면 탈출한다.(while, break)
while True:
# 3-3. 사용자는 공격 또는 회복을 선택한다.
user_input = input('행동을 선택하십시오.(1. 공격, 2. 회복) : ')
while True:
if user_input == '1' or user_input == '2':
break
# 3-4. 공격을 선택했다면 최소와 최대 공격력 사이로 공격을 한다.
if user_input == '1':
damage = rd.randint(my_weapon[1], my_weapon[2])
mon_energy = mon_energy - damage
print('당신은 공격으로 {}의 데미지를 입혔습니다. {}의 체력 : {}'.format(damage, my_mons[0], mon_energy))
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END # 에너지를 한 칸당 5로 설정하여 총 20칸으로 설정
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5)) # 21로 설정하지 않으면 몬스터와 나의 에너지가 붙어서 출력된다(위에서 IMAGE 출력을 11로 설정했기 때문)
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
if mon_energy <= 0:
break
# 3-5. 회복을 선택했다면
if user_input == '2':
heal = rd.randint(0, 30)
my_energy = my_energy + heal
if my_energy > 100:
my_energy = 100
print('당신은 회복으로 {}의 에너지가 회복되었습니다. 당신의 체력 : {}'.format(heal, my_energy))
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5))
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
# 3-6. 몬스터 차례
damage = rd.randint(my_mons[1], my_mons[2])
my_energy = my_energy - damage
if my_energy < 0:
my_energy = 0
print('당신은 {}의 공격으로 {}의 피해를 입었습니다. 당신의 체력 : {}'.format(my_mons[0], damage, my_energy))
print(MYIMAGE + ' ' * 11 + MONIMAGE[sel])
energy_str = ''
if my_energy < 30:
energy_str += RED_BG + ' ' * int(my_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(my_energy / 5) + END
energy_str += ' ' * (21 - int(my_energy / 5))
if mon_energy < 30:
energy_str += RED_BG + ' ' * int(mon_energy / 5) + END
else:
energy_str += GREEN_BG + ' ' * int(mon_energy / 5) + END
print(energy_str)
if my_energy <= 0:
break
# 4-1. 승리 또는 패배에 따라 메시지를 출력한다.
if mon_energy <= 0: # 승리
print('{}이/가 말했습니다. "강하군"'.format(my_mons[0]))
time.sleep(1) # 1초 후 다음 print()가 출력됨
print('{}이/가 [붉은보석]을 주었습니다.'.format(my_mons[0]))
else: # 패배
print('{}이/가 말했습니다. 하하하 상대가 안되는군'.format(my_mons[0]))
print('{}이/가 [내 가방]을 가져갔습니다.'.format(my_mons[0]))
'Python' 카테고리의 다른 글
[Python] 11 (0) | 2021.11.28 |
---|---|
[Python] 10 (0) | 2021.11.27 |
[Python] 08 (0) | 2021.11.23 |
[Python] 07 (0) | 2021.11.21 |
[Python] 06 (0) | 2021.11.20 |