Commit 699cf360 by 최애림

INNODEV-2996 Seminar- 야구 게임 시뮬레이션 돌리기(최종)

*시뮬레이션에 필요한 객체 코드 수정
- Pitcher, Batter
	- match_n 파라미터 삽입
- Base, Game
	- Game클래스로 합치기
	- 아웃 카운트 셀 수 있는 메소드인 out_state 추가
	- 이닝 확인하는 메소드인 inning_state 추가
- TeamSelected
	- 불필요한 Enum 클래스 삭제
* 시뮬레이션 코드(main문) 추가
parent d84cb4d9
import pandas as pd
import pandas as pd
import json
import random
from programming_simulation_v2_5_최종 import *
# 이름
kor_name = pd.read_csv('kor_name.csv', header=None)
kor_name.columns = ['name', 'counts']
# 성
kor_surname_json = open('kor_surname.json', encoding='UTF8')
kor_surname_dict = json.load(kor_surname_json)['surnames']
kor_surname = pd.DataFrame(kor_surname_dict)
# 이름, 성 리스트화
last_name = list(kor_name['name'])
first_name = list(kor_surname['surname'])
def player_maker(n):
player_dict = {
'name': [random.choice(first_name) + random.choice(last_name) for _ in range(n)],
'num': random.sample(range(1, 200), n),
'age': [random.randint(20, 40) for _ in range(n)],
'height': [random.randint(170, 190) for _ in range(n)],
'weight': [random.randint(70, 100) for _ in range(n)],
'position': random.choices(['pitcher', 'batter'], weights=[1, 9], k=n)
}
return player_dict
def player_to_team(team_obj, player_dict, n):
for idx in range(n):
player_inform = [value[idx] for value in player_dict.values()]
if 'pitcher' in player_inform:
player = Pitcher(*player_inform[:-1])
else:
player = Batter(*player_inform[:-1])
team_obj.add_player(player)
print(Team.player_id)
print('\n선수 추가가 완료되었습니다.\n')
# 팀
kiwoom_heros = Team('키움', '서울')
ssg_landers = Team('SSG', '인천')
lg_twins = Team('LG', '서울')
kt_wiz = Team('KT', '수원')
kia_tigers = Team('기아', '광주')
nc_dinos = Team('NC', '창원')
samsung_lions = Team('삼성', '대구')
lotte_giants = Team('롯데', '부산')
doosan_bears = Team('두산', '서울')
hanwha_eagles = Team('한화', '대전')
Team_li = [kiwoom_heros, ssg_landers, lg_twins, kt_wiz, kia_tigers,
nc_dinos, samsung_lions, lotte_giants, doosan_bears, hanwha_eagles]
# 선수 인원
n = 100
for team in Team_li:
# 선수 생성
team_player_li = player_maker(n)
# 선수 추가
player_to_team(team, team_player_li, n)
# 선수 명단 확인
team.check_player()
# 선수 삭제
# hanwha_eagles.remove_player(901)
####### 시즌 시작 #######
season = Season(Team_li)
# 대전 정보 생성
match_iter = season.game_schedule()
####### 시즌 경기 시작 #######
for match_team in match_iter:
# 경기 팀 불러오기
team1, team2 = match_team[0], match_team[1]
print('*' * 10, f'"{team1}" vs "{team2}"', '*' * 60)
# 출전 선수 군단 선택
team1_players = team1.select_player()
team2_players = team2.select_player()
# 경기 시작 회초/말 공격 선택, 경기장 셋
game = Game(team1, team2)
# 선수군 선택
game.choice_players(team1_players, team2_players)
while game.inning_state():
print(f'\n\n{"=" * 10} {game.innings}이닝 {"=" * 80}')
print('-' * 20, match_team[game.team_idx].name, '-' * 70)
# 투수(수비), 타자(공격) 선수 셋팅
pitcher, batters = game.set_player()
for batter in game.batter_generator(batters):
# 3아웃 될 때 까지 경기 진행
output = game.batting_output(pitcher, batter)
if output == PlayerBatting.OUTS:
pitcher.update_records(output)
pitcher.out_avg
# 아웃 횟수 확인하고 3아웃인 경우, 타순 재배치
if game.out_state():
# 마지막 타자 기억 후 타순 재배치
game.save_order(batters.index(batter))
break
else:
game.move_base(batter, output)
# game.now_base()
batter.update_records(output)
batter.batting_avg
get_score = game.result_score(all = False)
print(f'\n\t점수: {get_score}점')
# 점수 정보 저장
game.save_score(get_score)
# 공수 교대
game.shift_attack_defense()
# 경기 결과 저장
result = game.result_score()
season.update_record(result)
# 시즌 전체 경기 순위 확인
season.rank()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment