4 장 스포츠 시뮬레이션 - 단순축구
박상혁
게임환경• 경기장 1 : SoccerPitch• 골대 2 : Goal• 축구공 1 : SoccerBall• 팀 2 : SoccerTeam• 필드선수 8 : FieldPlayer• 골키퍼 2 : GoalKeeper
축구장
골
축구공
SoccerTeam
최상 지원 지점 계산• 팀이 공을 제어하고 있을 때 , " 좋은 위치 " 로다른 선수를 보내거나 패스를 하려고 할 때
" 좋은 위치 " 를 결정하는 방법• 상대편 경기장 쪽의 샘플링된 위치 지정
최상 지원 지점 계산
SoccerTeam State
PrepareForKick-Off
AttackingDefending
양 팀 선수가 모두제 위치에 있을 때
팀이 공을 제어할 때
팀이 공을 제어하지 않을 때
골이 들어갈 때
FieldPlayer• 공격수 or 수비수
– 실제로는 최상지원지점 계산에서만 쓰인다– 공격수만 최상지원지점 이용가능함
• ' 도착하기 ', ' 찾기 ', ' 추적하기 ' 등의 조종행동을 하며경기장을 돌아다닌다
FieldPlayer StateGlobalPlayer-
State
Wait
SupportAttacker
ReturnToHomeRe-gion
ChaseBall
Dribble
KickBall
ReceiveBall
Msg_SupportAttackerMsg_GoHomeMsg_ReceiveBallMsg_PassToMeMsg_Wait
공이 찰 수 있는 범위에 있을 때 공에 가장 가까이 있지 않을 때
공에 가장 가까이 &&받는 선수가 지정되지 않고 &&골키퍼가 공을 가지고 있지 않음공에 충분히 가까이 감 ||팀이 공을 제어하지 않음
킥을 시도할 수 없을 때
슛 , 패스를 하고난 뒤
슛 , 패스를 할 수 없을 때 공을 찬 뒤 팀이 제어를 잃음
ChaseBall
ReturnToHomeRe-gion
Chase-Ball
KickBall
공이 찰 수 있는 범위에 있을 때
공에 가장 가까이 있지 않을 때
Wait
Wait
Chase-Ball
공에 가장 가까이 &&받는 선수가 지정되지 않고 &&골키퍼가 공을 가지고 있지 않음
KickBall
ChaseBall
KickBall킥을 시도할 수없을 때
KickBall
슛 , 패스를 하고난 뒤
Wait Dribble
KickBall 슛 , 패스를 할 수 없을 때
GoalKeeper• 골키퍼는 필드선수와는 다른 종류의 기술 사용
– 필드 선수와는 다른 별도의 클래스– 움직임 패턴도 다르다– 필드 선수와 상태 집합이 다름
GoalKeeper StateGlobalKeeper-
State
InterceptBall
PutBallBackIn-Play
ReturnHome
TendGoal
Msg_GoHomeMsg_ReceiveBall
공이 한도 내로 들어오면정해진 거리 내로 들어오면
골에서 멀고위협이 없을 때 홈에 가깝거나상대편이 공을 가지면
패스를 한 뒤골에서 멀고공에서 가장 가깝지 않을때
공을 가로챈 뒤
TendGoal
InterceptBall
PutBallBackIn-Play
Return-Home
Tend-Goal
공이 한도 내로 들어오면
정해진 거리 내로 들어오면 골에서 멀고위협이 없을 때
주요 메소드• SoccerTeam::isPassSafeFromAllOpponent
– 위치 A 에서 B 까지의 패스가 공의 궤적 어딘가에서상대편 선수에게 가로채기 당할 수 있는가 .
주요 메소드• SoccerTeam::CanShoot
추정 및 가정하기• 1. 완벽하게 만든 후 바보스럽게 행동하기
– ex) CanShoot 에서 무작위 목표 설정
• 2. 가정과 추정을 통해 오류가 생길 수 있게 하기– 가로채기 영역을 원으로 설정
• 불확실성을 만들기– 알고리즘이 쉽고 CPU 를 많이 소모하지 않으면 1 번 .– 그렇지 않으면 2 번을 통해 복잡도를 줄인다 .
끗