호응이 일상
하룻밤만에 만든 야구 시뮬레이션 게임 본문
이름은 거창하지만 매우 허접한 시뮬레이션 프로그램이다. 팀프로젝트로 하룻밤 새서 대충 만들었는데 컴공과 아무도 없이 코딩알못 3명이서 대충 만든 것 치고 잘 만든 것 같아서 올려본다.
선수 스탯 선정 방법을 보자. 20이 최댓값이다.
타자 스탯
선구: 볼넷율 - 삼진율의 정규분포
컨택: 타자의 타석 * 타율의 정규분포
파워: 2루타 * 2 + 3루타 * 3 + 홈런 * 4의 정규분포
투수 스탯
구속: 평균 직구 구속의 정규분포
제구: 방어율의 역수의 정규분포
체력: 한 시즌 이닝수 * (1+1/게임수)
스탯은 내가 대충 어떤 어떤 지표를 가지고 알아서 만들어 달라고 요청해서 야구에 대해 거의 모르는 조원 분이 만들었다. 그래서 선정 방법이 제일 아쉽다. 말이 안 되는 부분이 좀 있기 때문이다. 근데 대충 보면 출전 경기수가 많지 않은 몇몇 선수들 빼고는 상당히 납득할 만한 스탯을 보여준다. 예를 들면 (이제는 아니지만) 두산의 양의지 선수의 스탯은 선구 20, 컨택 20, 파워 19이고 LG의 박용택 선수는 선구 15, 정확 12, 파워 14이다. 투수를 보면 LG의 윌슨 선수는 구속 18, 제구 19, 체력 20이고 SK의 김태훈 선수는 구속 17, 제구 17, 체력 14이다.
그럼 프로그램을 뜯어보자.
아... 디자인은 내가 한 것이 아니므로 무시하도록 하자. 또한 하룻밤만에 코딩 초보자들이 탄생시켰다는 점도 감안하자. 우리는 모두 Qt를 능숙하게 다룰 줄 모른다.
구 로고가 많이 보이는데, 아무튼 팀 선택 화면이다. 우리 팀과 상대 팀을 선택할 수 있다.
친절하게 어디를 선택했는 지 알려준다. 다만 팀 선택을 다시 하려면 프로그램을 껐다 켜야 한다. 본인은 LG트윈스의 팬이므로 LG를 선택하고, 상대팀은 두산을 선택해 보았다. 프로그램 시연 때도 똑같이 했다.
팀 선택 이후 경기 시작 전 화면이다. 우리 팀에 한해서 타자 타순과 선발투수를 바꿀 수 있다. 건들지 않으면 기본값으로 세팅된 상태에서 경기를 진행된다. 상대팀은 기본값으로만 진행된다. 2018년 각 팀별, 각 포지션별 WAR이 가장 높은 야수들이 주로 출장한 타순으로 타자들의 기본 타순과 수비 위치를 정하였고, WAR이 가장 높은 선발 투수를 기본 선발 투수로 하였다. 물론 김재율이 LG의 선발 1루수로 출장하는 등 조금 이상한 경우도 있긴 한데 이건 내가 가르시아가 없다고 생각하고 짜다 보니 이렇게 되었다. 그리고 타 팀 상황도 정확히 모르니... 정근우는 선발 2루수로 넣어드렸다.
내 마음대로 타순과 수비위치를 정해 보았다. 스탯 선정 방식이 그리 내 마음에 들지는 않지만 그럭저럭 맞지 않는가?
선발투수 바꾸는 화면이다. 기본 선발은 WAR이 가장 높은 윌슨이고, 나머지 투수는 다 구원에 두었다. 데이터가 존재하는 선수 전부를 포함시켰기 때문에 엔트리보다는 선수 수가 넘친다. 그런 것은 무시하도록 하자.
사소한 오류가 있다. 1구 다음 2구가 아니라 그대로 1구다. 미처 발견하지 못하고 냈나보다.
LG가 이겼다. 사실 이긴 화면을 띄우기 위해 4번 돌렸다. 1회 말 김현수의 솔로 홈런과 3회 말 이형종의 솔로 홈런에 힘입어 이겼다. 확률상 볼넷이나 삼진이 절대 나올 수 없고, 타자도 3구 이내에 무조건 타격을 하다 보니 투수 교체 상황은 잘 오지 않는다. 타자 교체는 7회 이후 박빙 상황에서 스탯이 더 높은 타자가 존재하면 나올 수 있게 했는데, 이 상황도 잘 오지 않는다. 안타, 2루타, 3루타, 홈런은 비율이 그럴듯하게 나온다.
사실 경기 진행 알고리즘도 상당히 섬세하게 짰다. 각 스탯을 기반으로 투수가 볼/스트라이크를 던질 확률, 볼/스트라이크에 타자의 배트가 반응할 확률, 휘두른 배트가 맞았을 때 아웃/파울/안타/2루타/3루타/홈런이 될 확률을 각각 짜서 넣어두었다. 또한 베이스 상황도, 예를 들면 무사 1, 2루에서 타자가 안타를 쳤을 때 주자 만루/1, 2루에 1득점/1, 3루에 1득점할 확률이 다 다르며, 아웃카운트별로도 확률이 다르다. 물론 타자/주자의 주력은 스탯에서 배제하였으므로 그냥 상황마다 확률이 존재할 뿐이다. 처음에 짰을 때 실수가 있었는지 프로그램이 절대 안끝나길래 디버깅해보니 파울을 칠 확률이 1이 넘게 설정되어 있어 무한 용규놀이를 하고 있더라.
어쨌든 경기 결과는 야구 경기답게 나온다. 하루컷 치고 상당히 만족스럽다.
어찌된 게 주자 1, 3루 찬스에서 못치는 건 게임에서나 현실에서나 똑같다. 내년엔 잘하자, LG.
'잡담' 카테고리의 다른 글
도쿄여행 사진 정리 (2) | 2019.01.06 |
---|---|
2018년을 보내며 (0) | 2019.01.02 |
중학교 때 만든 Seoul Subway Song (0) | 2018.12.11 |
텐션 떨어질 때 듣는 노래 (0) | 2018.12.11 |
개강 7주차 (2) | 2018.10.15 |