시즌 1 · 알파고편 / PART 2 · PART 2 · 게임을 푸는 첫 방법: 탐색 / Ch 5 · 틱택토 minimax 직접 구현

게임 상태 클래스

지난 챕터들에서는 함수형 스타일이었어. 이제 OOP로 깔끔하게 정리. Ch 6의 Board 클래스랑 비슷한 패턴이지.

📖 메서드 4개가 핵심
  • possible_moves() — 가능한 수 리스트
  • play(pos) — 한 수 둠 (불변, 새 객체 반환)
  • winner() — 'X', 'O', 'draw', None
  • score() — 게임 끝났을 때 +1/-1/0

이 4개만 있으면 minimax 적용 가능. 인터페이스가 깔끔하면 알고리즘이 단순해짐.

💡 불변 객체 (Immutable) 패턴

play()는 현재 객체를 수정하지 않고 새 객체 반환. 이게 minimax에서 중요해. 한 가지를 탐색하다가 다시 부모 노드로 돌아갈 때 원래 상태가 그대로 있어야 하거든.

변경 가능한 보드를 minimax에서 쓰면 매 호출마다 copy()를 해야 하는데, 빼먹으면 끔찍한 버그 발생. 불변이 안전.

다음 페이지에서 이 클래스 위에 minimax를 입혀서 AI를 만들자.

PYTHON