게임 상태 클래스
지난 챕터들에서는 함수형 스타일이었어. 이제 OOP로 깔끔하게 정리. Ch 6의 Board 클래스랑 비슷한 패턴이지.
📖 메서드 4개가 핵심
possible_moves()— 가능한 수 리스트play(pos)— 한 수 둠 (불변, 새 객체 반환)winner()— 'X', 'O', 'draw', Nonescore()— 게임 끝났을 때 +1/-1/0
이 4개만 있으면 minimax 적용 가능. 인터페이스가 깔끔하면 알고리즘이 단순해짐.
💡 불변 객체 (Immutable) 패턴
play()는 현재 객체를 수정하지 않고 새 객체 반환. 이게 minimax에서 중요해. 한 가지를 탐색하다가 다시 부모 노드로 돌아갈 때 원래 상태가 그대로 있어야 하거든.
변경 가능한 보드를 minimax에서 쓰면 매 호출마다 copy()를 해야 하는데, 빼먹으면 끔찍한 버그 발생. 불변이 안전.
다음 페이지에서 이 클래스 위에 minimax를 입혀서 AI를 만들자.
PYTHON