- 오델로 게임의 기본 원리 및 마이크로 앱 개발 환경 설정
오델로는 8x8 격자 위에서 진행되는 전략적 체스 게임으로, 검은 돌과 흰 돌을 사용해 상대방의 돌을 뒤집는 방식으로 승패를 결정합니다. 이 게임은 규칙이 단순하지만 전략적 깊이가 있어, 인공지능 알고리즘의 초보자용 실습 프로젝트로 이상적입니다.
마이크로 앱에서 오델로를 구현하기 위해선 먼저 개발 환경을 구성해야 합니다. 공식 웨이챗 마이크로 앱 개발 도구를 추천하며, 이 도구는 완전한 개발 환경과 시뮬레이터를 제공합니다. 새 프로젝트를 생성한 후, app.json 파일에 페이지 경로를 등록하고 게임 메인 페이지를 생성합니다.
{
"pages": [
"pages/game/game"
],
"window": {
"navigationBarTitleText": "오델로 AI 대전"
}
}
게임의 핵심 데이터 구조는 8행 8열의 이차원 배열로, 각 칸의 상태를 나타냅니다. 0은 비어 있음을 의미하고, 1은 검은 돌, 2는 흰 돌을 나타냅니다. 초기 상태에서는 중심부에 네 개의 돌이 대칭적으로 배치되며, 이 배열은 전체 게임 로직의 기반이 됩니다.
// 체스판 초기화
initializeBoard() {
const board = Array(8).fill().map(() => Array(8).fill(0));
board[3][3] = 2; // 흰 돌
board[4][4] = 2; // 흰 돌
board[3][4] = 1; // 검은 돌
board[4][3] = 1; // 검은 돌
return board;
}
UI 구현은 <view>와 <button> 컴포넌트를 활용하여 진행합니다. 각 칸은 버튼으로 표현되며, 클릭 이벤트로 수를 두는 로직이 연결됩니다. 반응형 디자인을 위해 flex 레이아웃을 적용하면 다양한 디바이스에서도 일관된 표시가 가능합니다.
- 게임 규칙의 핵심 알고리즘 구현
오델로의 핵심은 세 가지 알고리즘으로 구성됩니다: 수의 유효성 검사, 돌 뒤집기 로직, 승패 판정. 이들 알고리즘이 정확하게 동작해야 게임이 올바르게 작동합니다.
2.1 수의 유효성 검사
수의 유효성은 한 칸이 비어 있고, 적어도 하나의 방향에서 상대편 돌을 뒤집을 수 있어야 합니다. 총 8개의 방향(상하좌우 및 대각선)을 확인하며, 각 방향에서 연속된 상대편 돌이 존재하고 그 끝에 자신의 돌이 있는지를 판단합니다.
// 수의 유효성 확인
isLegalMove(board, row, col, player) {
if (board[row][col] !== 0) return false;
const directions = [
[-1, 0], [1, 0], [0, -1], [0, 1],
[-1, -1], [-1, 1], [1, -1], [1, 1]
];
for (const [dx, dy] of directions) {
if (this.checkLine(board, row, col, dx, dy, player)) {
return true;
}
}
return false;
}
// 특정 방향에서 뒤집기 가능한지 확인
checkLine(board, row, col, dx, dy, player) {
let r = row + dx, c = col + dy;
let hasOpponent = false;
while (r >= 0 && r < 8 && c >= 0 && c < 8) {
if (board[r][c] === 0) break;
if (board[r][c] === player) {
return hasOpponent;
}
hasOpponent = true;
r += dx;
c += dy;
}
return false;
}
이 알고리즘은 모든 가능한 방향을 탐색하면서, 자신과 상대의 돌 사이에 상대 돌이 연속적으로 존재하는지 확인합니다. 조건 충족 시 해당 위치에 수를 둘 수 있으며, 이후에는 뒤집기 로직이 실행됩니다.