AI가 게임을 잘 두는 첫 번째 방법: 모든 수를 끝까지 읽어보기. 딥블루·알파고로 이어지는 '탐색'의 조상, 미니맥스와 직접 겨뤄 보세요.
🖱️ 내 차례예요 — 빈 칸을 클릭해서 ❌를 두세요
읽는 법: ❌ = 나, ⭕ = AI. AI가 두기 직전 빈 칸에 뜨는 반투명 숫자는 “그 칸에 뒀을 때”의 미니맥스 점수예요(AI 입장) — + = 이기는 길, 0 = 무승부, − = 지는 길, 절댓값이 클수록 빨리 끝나요. AI가 고른 칸은 노란 배경, 승부가 나면 이긴 줄 세 칸이 하이라이트돼요.
AI가 몇 수 앞까지 읽을지 고르세요. 깊게 읽을수록 강해져요.
🧠 끝까지 읽기 AI의 첫 수에서 탐색 국면 수를 확인해 보세요 — 특히 AI 선공이면 빈 판에서 수십만 국면을 읽어요.
# 미니맥스: 나도 최선, 상대도 최선을 둔다고 가정하고 끝까지 읽기
def minimax(board, current, ai, depth):
w = winner(board) # 승부가 났는지 확인
if w == ai: return 10 - depth # AI 승리 (빨리 이길수록 높은 점수)
if w is not None: return -10 + depth # AI 패배 (늦게 질수록 덜 나쁨)
if is_full(board):return 0 # 빈 칸 없음 = 무승부
scores = []
for cell in empty_cells(board): # 둘 수 있는 모든 칸에
board[cell] = current # 한 수 둬 보고
scores.append(minimax(board, other(current), ai, depth + 1))
board[cell] = None # 되돌리기 (수읽기니까!)
if current == ai:
return max(scores) # 내(AI) 차례: 제일 좋은 수를 고름
return min(scores) # 상대 차례: 나에게 제일 나쁜 수를 둠
# AI의 실제 착수 = 빈 칸마다 minimax 점수를 매겨 최고점 칸 선택