파이썬 토이 프로젝트 _ 낚시게임 (미완)
파이썬으로 낚시게임을 만들어 보자
수업시간에 진행했던 토이 프로젝트 복습. 0607
[1] 라이브러리 호출
import time
import random
import pandas as pd
import numpy as np
>> 필요한 라이브러리를 호출
[2] 낚시터 구현하기
낚시를 하기 위해서는 낚시터가 필요하다. 물고기를 잡을 수 있는 낚시터를 만든다.
def game_fishing_center():
print('낚시를 시작합니다....')
print('낚시줄을 던졌습니다....')
fishing = pd.read_excel('물고기표.xlsx')
choose_fish = np.array(fishing).reshape(-1,4)
# 0부터 fishing 전체 행까지 반복, 랜덤 추출
choose_fish_num = random.randint(0, len(fishing))
choose_fish_waiting_num = random.randint(choose_fish[choose_fish_num][0],
choose_fish[choose_fish_num][1])
time.sleep(choose_fish_waiting_num) # 대기시간 주기
# 낚시 성공 or 실패
succ_fail = ['성공','실패']
succ_fail_choice = random.choice(succ_fail)
if succ_fail_choice == '성공':
print('낚시에 성공하였습니다.')
print('[성공] {}님이 낚은 물고기는 {}입니다.'.format('id',choose_fish[choose_fish_num][2]))
# print('[성공] {}님이 낚은 물고기는 {}입니다.'.format(id,choose_fish[choose_fish_num][2]))
else:
print('[실패] 낚시에 실패했습니다.ㅠㅠ')
pass
# DB 저장 / 엑셀 저장
# id, pw, 물고기, 수량, 가격, 현황
df.loc[len(df)] = [id, pw, choose_fish[choose_fish_num][2], 1,
choose_fish[choose_fish_num][-1], '미판']
df.to_excel('텍스트게임.xlsx', sheet_name = "낚시게임", index=None)
print(game_fishing_center())
- 1. 물고기표 불러오기
pd.read_excel('물고기표.xlsx')
>> 물고기표 엑셀을 불러옴
No1, No2 는 각각 가로 세로 길이이고, 물고기 이름과 가격이 나와있다.
- 2. 물고기표 엑셀에서 물고기 정보를 불러오자
def game_fishing_center():
print('낚시를 시작합니다....')
print('낚싯줄을 던졌습니다....')
fishing = pd.read_excel('물고기표.xlsx')
return fishing
print(game_fishing_center())
>> fame_fishing_center()를 정의
>> 불러온 엑셀을 fishing이라고 지정
choose_fish = np.array(fishing).reshape(-1,4)
>> fishing이 DataFrame이므로 numpy의 ndarray로 바꿔주자.
이때, reshape(-1,4)로 재배열 (4개의 열을 가지는 배열)
바꾼 numpy 배열을 choose_fish로 지정
# reshape(-1,n) : 행 자리에 -1, 열 자리에 정수가 있을 때 정수에 따라서 해당 열 개수만큼 자동으로 구조화
- 3. 물고기표에서 랜덤으로 물고기를 낚기
# 0부터 fishing 전체 행까지 반복, 랜덤 추출
choose_fish_num = random.randint(0, len(fishing)) # 랜덤으로 낚은 물고기
choose_fish_waiting_num = random.randint(choose_fish[choose_fish_num][0], # 물고기 낚는 데 걸린 시간
choose_fish[choose_fish_num][1])
time.sleep(choose_fish_waiting_num) # 대기시간 주기
>> 0 부터 fishing 전체 길이 (len(fishing) = 751) 중에서 랜덤 추출
# random.randint(a,b) : a, b 사이의 정수(int)를 랜덤으로 반환, b 포함인거 주의!! ( a<= N <= b)
>> 여기서 No1, No2 값을 뽑고 (choose_fish[choose_fish_num][0], [1])
choose_fish_waiting_num이라고 지정 (물고기 낚는 데 걸린 시간)
>> choose_fish_waiting_num(물고기 낚는 데 걸린 시간)만큼 time.sleep을 걸어서 대기시간을 검
- 4. 낚시 성공? or 실패?
succ_fail = ['성공','실패']
succ_fail_choice = random.choice(succ_fail)
if succ_fail_choice == '성공':
print('낚시에 성공하였습니다.')
print('[성공] {}님이 낚은 물고기는 {}입니다.'.format('id',choose_fish[choose_fish_num][2]))
# print('[성공] {}님이 낚은 물고기는 {}입니다.'.format(id,choose_fish[choose_fish_num][2]))
else:
print('[실패] 낚시에 실패했습니다.ㅠㅠ')
pass
>> '성공', '실패'가 들어있는 succ_fail 리스트에서 랜덤으로 하나를 뽑는다.
# random.choice() : 랜덤하게 하나의 원소를 뽑음
>> 만약 '성공'을 뽑는다면 > 낚시 성공! > 낚은 물고기의 이름 반환
>> 만약 '실패'를 뽑는다면 > 낚시 실패ㅠㅠ
- 뽑은 물고기를 '텍스트게임' 엑셀에 저장
# DB 저장 / 엑셀 저장
# id, pw, 물고기, 수량, 가격, 현황
df.loc[len(df)] = [id, pw, choose_fish[choose_fish_num][2], 1,
choose_fish[choose_fish_num][-1], '미판']
df.to_excel('텍스트게임.xlsx', sheet_name = "낚시게임", index=None)
>> 이런 엑셀이 생성되는데, 나중에 나올 로그인할때 지정한 id와 pw와 낚은 물고기 이름, 낚은 물고기 개수 (=1)
낚은 물고기 가격, 현황(='미판' > 나중에 상점에서 팔면 '판매'로 바뀜)이 저장된다.
[3] 상점 구현하기
- 1. 상점 정의하기
def game_store(df, id, pw):
print('현재 판매하지 않은 물고기는 {}개 입니다.'.
format(len(df[(df['ID'] == id) & (df['현황'] == '미판')])))
#df = pd.read_excel('텍스트게임.xlsx')
>> '텍스트게임' 엑셀을 불러와서 df로 저장하고
df에서 ID가 입력한 id와 같고, '현황' 중에서 '미판'인 개수를 반환
- 2. 낚은 물고기 중 아직 판매하지 않은 물고기를 팔기
미판_index = df[(df['ID'] == id) & (df['현황'] == '미판')].index
>> df에서 입력한 id의 물고기 중 미판인 행들만 미판_index라고 지정
if len(미판_index) != 0:
for i in range(len(미판_index)):
print('{} 물고기를 판매하였습니다.'.format(df[(df['ID'] == id) & (df['현황'] == '미판')][i]))
else: # 빈 경우
print('미판한 물고기를 완판했습니다.')
>> 미판_index의 개수가 0이 아니라면 (미판인 물고기가 있다면)
for문을 돌면서 그 행들을 차례대로 판매
>> 미판_index가 0이면 (미판인 물고기가 없다면) 완판했다고 출력
- 3. 판매 완료한 내용을 엑셀에 저장
if len(미판_index) != 0:
for i in range(len(미판_index)):
print('{} 물고기를 판매하였습니다.'.format(df[(df['ID'] == id) & (df['현황'] == '미판')][i]))
# DB 저장 / 엑셀 저장
df.loc[미판_index[i]] = [
id, pw,
df[ (df['ID'] == id) & (df['현황'] == '미판')]['물고기'][미판_index[i]],
df[ (df['ID'] == id) & (df['현황'] == '미판')]['수량'][미판_index[i]],
df[ (df['ID'] == id) & (df['현황'] == '미판')]['가격'][미판_index[i]],
"판매" ]
>> df에서 id, pw와 물고기, 수량, 가격 그대로 가져오고, '미판' >> '판매' 바꿈
df.to_excel('텍스트게임.xlsx', sheet_name = "낚시게임", index=None)
>> 엑셀에 저장
[4] 게임 플레이 및 사용자 정보 구현하기
# 게임 플레이 및 사용자 정보 구현하기
def game_play(id, pw):
while True:
df = pd.read_excel('텍스트게임.xlsx')
돈 = df[ (df['ID'] == id) & ( df['현황'] == '판매')]['가격'].sum()
물고기_종류 = len(np.unique( df[df['ID'] == id]['물고기']))
잡은_물고기 = df[df['ID'] == id]['수량'].sum()
티어 = len(df[ (df['ID'] == id) & (df['현황'] =='판매') ])
if 티어 <= 10 :
티어 = "낚시꿈나무"
elif 티어 >=11 and 티어 <= 20 :
티어 = "낚시사생팬"
elif 티어 >=21:
티어 = "낚시꾼"
# ID, 티어, 돈, 잡은 물고기 종류, 잡은 물고기 수
print("안녕하세요, {} 님 / 티어:{} / 가지고 있는 금액:{} / 잡은 물고기 종류:{} / 잡은 물고기 수량: {}".
format(id, 티어, 돈, 물고기_종류, 잡은_물고기))
선택 = int(input("낚시하기(1) / 상점이용(2) / 게임종료(3)"))
if 선택 == 1: # 낚시터
game_fishing_center(df, id, pw)
elif 선택 ==2 : # 상점
game_store(df, id, pw)
elif 선택 ==3 : # 게임 종료
break
- 1. 게임 플레이 정의
def game_play(id, pw):
while True:
df = pd.read_excel('텍스트게임.xlsx')
돈 = df[ (df['ID'] == id) & ( df['현황'] == '판매')]['가격'].sum()
물고기_종류 = len(np.unique( df[df['ID'] == id]['물고기']))
잡은_물고기 = df[df['ID'] == id]['수량'].sum()
티어 = len(df[ (df['ID'] == id) & (df['현황'] =='판매') ])
>> game_play를 정의하는데, while True 무한 루프를 돌면서 break가 나올 때까지 게임을 플레이 함
>> '돈' : 입력한 id중 판매한 물고기의 가격을 더해서 '돈'이라고 지정
'물고기_종류' : 입력한 id 중 물고기의 개수. 이때 고유한 값만 반환
'잡은_물고기' : 입력한 id 중 '수량' 합
'티어' : 입력한 id 낚시 정보의 '판매' 개수
- 2. 티어를 설정
if 티어 <= 10 :
티어 = "낚시꿈나무"
elif 티어 >=11 and 티어 <= 20 :
티어 = "낚시사생팬"
elif 티어 >=21:
티어 = "낚시꾼"
-3. 현재 상태
print("안녕하세요, {} 님 / 티어:{} / 가지고 있는 금액:{} / 잡은 물고기 종류:{} / 잡은 물고기 수량: {}".
format(id, 티어, 돈, 물고기_종류, 잡은_물고기))
-4. 낚시 플레이를 선택
선택 = int(input("낚시하기(1) / 상점이용(2) / 게임종료(3)"))
if 선택 == 1: # 낚시터
game_fishing_center(df, id, pw)
elif 선택 ==2 : # 상점
game_store(df, id, pw)
elif 선택 ==3 : # 게임 종료
break
# 계정 정보 생성
계정정보 = []
df = pd.read_excel('텍스트게임.xlsx')
계정 = int(input('로그인(1) / 회원가입(2)'))
if 계정 == 1: # 로그인
계정정보.append(input('ID 입력: '))
계정정보.append(int(input("PW 입력: ")))
if 계정정보[0] in df['ID'].unique() and 계정정보[1] in df['PW'].unique():
print('커먼~ 게임을 시작합니다. 유후~')
game_play( 계정정보[0], 계정정보[1])
else:
print( "ID 또는 PW 가 없네요~")
pass
elif 계정 == 2: # 회원가입
계정정보.append(input('ID 입력: '))
계정정보.append(int(input("PW 입력: ")))
print("[축하] 회원가입 완료~ ")
print("게임을 시작합니다.")
game_play( 계정정보[0], 계정정보[1])