AlphaZeroGomoku-game.py

youngseojeon·2022년 1월 20일
0

Game.py에는
1.game을 위한 board 클래스
2.game을 나타내줄 graphic코드가 들어있는 Game 클래스
가 있다.

def init(self, **kwargs)

width와 height는 일단 13,13줄로 정해주고
states를 어떤 식으로 넣을지가 관건이다. 여기선 Dictionary로 만들어 주었는데..
states는 Dictionary로 가고, value는 배열로 넣어주면 되겠다., {player1: [[h,w]],player2:[[h,w],[h,w]],player3[[h,w],[h,w]] ..} 이런식으로 넣는 것이 좋겠다.( 맨 처음 player혼자 하나만 넣어서ㅠㅠ 이거 조심.)

그 다음 player는 1,2가 아닌 1, -1로 지정한다.(self play시 win lose와 동일 맥락으로 따져주기 위해서. 필요하다면 self play 알고리즘도 살짝 바꿔야 될 것 같다.

def init_board(self, start_player = 0)

current_player는 players 배열에서 0번째 / 1번째 이런 식으로 가져온다. (현재 누구 차례니? 에 관련된 코드라고 생각하면 된다.
이후 갈 수 있는 곳들에 대한 배열은 availables로 지정해주고,
board에서의 states 또한 dictionary로 만들어주었다.
last_move는 -1 (move에 대한 배열이 이차원 배열이라고 하자.)로 일단 간다.

move_to_location(self, move)

이건 그냥 행/렬 지정해주는 코드

근데 순서가 1번째 인지
두 번째 인지
그걸 따져서 코드를 짜주어야 한다.
순서가 첫번째라면 일단 맨처음 사람은 1차원 배열로 나오도록 만들자.

location_to_move(self, location)

움직일 곳에 대해서 정해주는 건데 일단
1.두개가 찍혔는가 (2차원배열 속 )
2.하나에 x,y 둘 다 찍혔는가
검증한다음에 move를/move1과 move2를 각각 29 이런식으로 만들어준다.

★여기서 생각!
처음 둔 사람은 return 값을 그냥 move하나만 내보내면 되는데 두 번째 부터 둔 사람은 return 값이 두 개여야하는 문제
1. 그럼 그냥 배열로 반환할까? 근데 그러면 나중에 처리할 게 많아져서 고민 ㅠㅠ
2. 그러면 그냥 두 개 반환하면 어떻게 되지? 그러면 tuple로 (39,53)으로 반환된다고 한다..
택 1~

current_state

square_state를 이용해서 바둑판에 각각 놓은 것들을 찍는다!

profile
youngseo-computerblog.tistory.com 을 사용하고 있습니다.

0개의 댓글