게임은 언제 끝나나
좋아, 점수 계산은 알았어. 그런데 한 가지 — 언제 점수를 계산할까? 게임은 언제 끝나?
📖 게임 종료 — 두 번 연속 패스
두 사람이 연속으로 "둘 곳이 없다(패스)"고 선언하면 게임 종료. 그 시점의 보드로 집을 계산.
왜 패스? 게임 끝 무렵에는 둘 만한 자리가 사라져. 마지막 둘 자리들은 양쪽에 영향이 거의 없거나, 두면 오히려 자기 집이 줄어드는 자리가 많아. 그러면 합리적인 선택은 안 두는 것 — 패스.
두 사람이 연속 패스하면 "더 둘 가치 있는 자리가 없다"는 합의야. 거기서 마무리.
💡 죽은 돌 처리 — 우리는 단순화
실제 바둑에서는 게임 종료 후 "이 돌은 죽었다(잡혀야 한다)"고 합의하는 단계가 있어. 두 플레이어가 합의 안 되면 진짜로 따냄을 두기도 함.
우리 코드에서는 이미 보드 위 모든 돌이 살아 있다고 가정. 즉 잡혔어야 할 돌은 이미 보드에서 사라진 상태. 알파고도 자가 대국에서는 이렇게 단순화한 룰(Tromp-Taylor 룰)을 쓰지.
그래서 우리 play() 루프를 짜면 이런 모양:
passes = 0
turn = BLACK
while passes < 2:
move = get_move(turn) # 사람 또는 AI가 결정
if move == 'pass':
passes += 1
else:
result = play(board, move.r, move.c, turn, prev)
if result is not None and result != 'ko':
passes = 0 # 진짜 둔 수
turn = WHITE if turn == BLACK else BLACK
b, w, winner = score(board)
print(winner)
이게 진짜 게임 루프. 다음 챕터에서 이 모든 걸 깔끔한 Board 클래스로 정리할 거야.