파이썬 수업/파이썬 미니프로젝트

[파이썬] 포켓몬 배틀 구현하기 1

climacus 2024. 3. 31. 20:25

파이썬 기초문법 1~3권 내용과 병행하여 만들 수 있는 미니프로젝트 입니다. 

 

1. [입출력/문자의연산] 타이틀 출력하기

  • 게임이 시작되면 "포켓몬 배틀"이라고 출력
  • 위 아래로 "=" 20개 출력
print("="*20)
print("포켓몬 배틀")
print("="*20)

 

2. [입출력] 이름 정하기

  • 당신의 이름은 무엇입니까? input으로 받아 a에 저장하세요
a=input("당신의 이름은 무엇입니까?")

 

3. [f스트링] 이름 출력하기

  • 두 줄로 아래의 내용을 출력하세요
    "{a}님, 반갑습니다. 
    포켓몬을 드리겠습니다."
print(f"{a}님, 반갑습니다.\n포켓몬을 드리겠습니다.")

 

4. [리스트] 포켓몬 리스트 만들기

  • 포켓몬 3마리를 p 리스트에 저장해봅시다. 
    - 이상해씨, 파이리, 꼬부기
p=['이상해씨','파이리','꼬부기']

 

5. [리스트-추가하기, 꺼내오기 연습] 포켓몬 이름 출력하기

  • 인덱싱으로 리스트에 있는 포켓몬을 가져와서 출력해봅시다. 
p[0]

결과>
'이상해씨'

 

  • 가나다 순으로 정렬해 봅시다. 리스트의 메서드를 사용해 리스트에 추가/변경 할 수 있습니다. 
    리스트 이름 뒤에 "."을 입력하고 tab키를 눌러봅시다. 다음 중 어떤 메서드를 사용해야 할까요? 

p.sort()
['꼬부기', '이상해씨', '파이리']
  • 꼬부기를 삭제해 봅시다. 어떤 메서드를 사용해야 할까요?
p.remove('꼬부기')
['이상해씨','파이리']
  • 이번에는 맨 뒤에 '꼬부기'를 추가해 봅시다. 어떤 메서드를 사용해야 할까요?
p.append('꼬부기')

print(p)
결과>
['이상해씨','파이리','꼬부기']

 

6. [출력 \n 이스케이프문자열로 줄바꾸기] 포켓몬 고르기 메뉴 출력하기

스타팅 포켓몬을 고를 수 있도록 menu를 출력해 봅시다. 
[스타팅 포켓몬을 고르세요]
1. 이상해씨
2. 파이리
3. 꼬부기

print("스타팅 포켓몬을 고르세요")
print(f'1.{p[0]}')
print(f'2.{p[1]}')
print(f'3.{p[2]}')

 

7. [숫자값 입력받기(int input)] 포켓몬 고르기

다음 포켓몬 중 어떤 포켓몬을 고르시겠습니까? (1,2,3중 하나를 입력)
m에 input함수를 이용하여 숫자로 값을 받아보세요.

m=int(input('다음 포켓몬 중 어떤 포켓몬을 고르시겠습니까?'))

 

8. [리스트 값 가져오기] 내 포켓몬 이름 출력하기

{m}을 고르셨습니다. 
당신의 포켓몬은 {m}입니다. 

print(f"{p[m-1]}을(를) 고르셨습니다.\n당신의 포켓몬은 {p[m-1]}입니다.")

메뉴에서는 1.이상해씨, 2.파이리, 3.꼬부기 이지만, 리스트에서는 인덱싱이 [0,1,2]이므로 1씩 차이가 나게 된다. 
인덱싱 p[m]을 하게 되면 안되고, p[m-1]을 해야 한다.

m ... p[m-1]
1.이상해씨 ... p[0]
2.파이리 ... p[1]
3.꼬부기 ... p[2]

 

9. [딕셔너리 저장하기, 호출하기] 

p1, p2, p3에 아래 값을 딕셔너리로 저장하고, 각 value를 key값으로 호출해 본다. 

p1={'name':'이상해씨','hp':45,'atk':49,'df':49}
p2={'name':'파이리','hp':39,'atk':52,'df':43}
p3={'name':'꼬부기','hp':44,'atk':48,'df':65}

딕셔너리의 호출방법은 p1['name'] -> 리스트와 비슷하지만, 인덱싱 숫자가 아닌 key값을 입력하여, value를 호출한다. 

name: 이상해씨
hp: 45
atk: 49
df: 49
name: 파이리
hp: 39
atk: 52
df: 43
name: 꼬부기
hp: 44
atk: 48
df: 65
print('name:', p1['name'])
print('hp:', p1['hp'])
print('atk:', p1['atk'])
print('df:', p1['df'])

 

10. [함수 정의하기] 

stat()이라는 함수를 정의하여, 이상해씨의 데이터를 출력해 봅시다.

def stat():
    print('name:', p1['name'])
    print('hp:', p1['hp'])
    print('atk:', p1['atk'])
    print('df:', p1['df'])

 

11. [매개변수가 있는 함수+if문 구현하기]

def stat(x):
    print('name:',x['name'])
    print('hp:',x['hp'])
    print('atk:',x['atk'])
    print('df:',x['df'])
    

stat(p1)
출력>
name: 이상해씨
hp: 45
atk: 49
df: 49

stat(p2)
출력>
name: 파이리
hp: 39
atk: 52
df: 43

stat(p3)
출력>
name: 꼬부기
hp: 44
atk: 48
df: 65

 

11. [매개변수가 있는 함수+if문 구현하기]

if문을 사용하여, 조건에 따라 아래 내용대로 출력한다. 

m=내가 선택한 포켓몬 숫자(1,2,3중 입력)
1번을 골랐을 때는 이상해씨의 stat(p1)
2번을 골랐을 때는 파이리의 stat(p2)
3번을 골랐을 때는 꼬부기의 stat(p3)

def choice(x):
    if x==1:
        stat(p1)
    elif x==2:
        stat(p2)
    elif x==3:
        stat(p3)
    else:
        print("잘못 고르셨습니다.")

choice(m)

 

12. [메소드, 모듈-time]
포켓몬 배틀이 시작됨을 알리며, 야생의 포켓몬과 조우하기까지의 딜레이를 추가한다.

import time

.
.
.

print("포켓몬 배틀을 시작합니다.")
time.sleep(1)
print(".")
time.sleep(1)
print(".")
time.sleep(1)
print(".")

 

13. [for문을 이용한 단순 횟수 반복] 

time.sleep(1)을 3번~5번 반복하도록 코드를 수정한다. 

for i in range(3):
    time.sleep(1)
    print(".")

 

14. [모듈-random] 야생의 포켓몬 출현

import random을 불러와 p리스트에서 랜덤하게 하나를 뽑아 e에 저장한다. 

---------변수 리스트----------------------

p=['이상해씨','파이리','꼬부기']
a=내 이름
m=내가 선택한 포켓몬 숫자(1,2,3)
e=랜덤하게 출몰한 포켓몬 숫자

-------------------------------------------------

print("야생의 포켓몬이 출몰했다.")
e=random.randint(1,3)

 

15. [매개변수가 있는 함수] 적 포켓몬의 stat을 출력

stat(e)

 

poke_battle1.py
0.00MB

import random
import time




p=['이상해씨','파이리','꼬부기']
p1={'name':'이상해씨','hp':45,'atk':49,'df':49}
p2={'name':'파이리','hp':39,'atk':52,'df':43}
p3={'name':'꼬부기','hp':44,'atk':48,'df':65}

def stat(x):
    print('name:',x['name'])
    print('hp:',x['hp'])
    print('atk:',x['atk'])
    print('df:',x['df'])

def choice(x):
    if x==1:
        stat(p1)
    elif x==2:
        stat(p2)
    elif x==3:
        stat(p3)
    else:
        print("잘못 고르셨습니다.")

def delay():
    for i in range(3):
        time.sleep(1)
        print(".")

def title():
    print("="*20)
    print("포켓몬 배틀")
    print("="*20)

title()
a=input("당신의 이름은 무엇입니까?")
print(f"{a}님, 반갑습니다.\n포켓몬을 드리겠습니다.")
delay()

print("스타팅 포켓몬을 고르세요")
print(f'1.{p[0]}')
print(f'2.{p[1]}')
print(f'3.{p[2]}')

m=int(input('다음 포켓몬 중 어떤 포켓몬을 고르시겠습니까?'))
print(f"{p[m-1]}을(를) 고르셨습니다.\n당신의 포켓몬은 {p[m-1]}입니다.")
delay()
choice(m)

print("포켓몬 배틀을 시작합니다.")

delay()
delay()

e=random.randint(1,3)
print(f"야생의 포켓몬이 출몰했다.")
choice(e)

 

 

 

반응형