本程式將井字棋拆分為獨立函式模組,採用結構化程式設計風格,包含:棋盤初始化、顯示、玩家輸入驗證、電腦簡易 AI、勝負判斷、主迴圈控制。
int Arr[3][3]; // 0:空, 'X':玩家, '0':電腦(注意:原碼用字元 '0' 非數字 0)
void Init_Arr(int arr[][3]) {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
arr[i][j] = ' ';
}
void Print_Checkerboard(int arr[][3]) {
for (int i = 0; i < 3; i++) {
printf("\t\t %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
if (i < 2) printf("\t\t---|---|---\n");
}
}
int Player(int arr[][3], int line, int list) {
// 座標 1-based 轉 0-based
if (line >= 1 && line <= 3 && list >= 1 && list <= 3) {
if (arr[line-1][list-1] == ' ') {
arr[line-1][list-1] = 'X';
return 1; // 成功
}
}
return 0; // 失敗:座標錯誤或已佔用
}
void Robot(int *arr) {
// 將二維陣列視為一維掃描第一個空位
for (int i = 0; i < 9; i++)
if (arr[i] == ' ') { arr[i] = '0'; break; }
}
int Judge(int arr[][3]) {
// 檢查玩家 'X' 勝利
for (int i = 0; i < 3; i++) {
if ((arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][0]=='X') ||
(arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[0][i]=='X')) return 1;
}
if ((arr[0][0]==arr[1][1] && arr[0][0]==arr[2][2] && arr[0][0]=='X') ||
(arr[0][2]==arr[1][1] && arr[1][1]==arr[2][0] && arr[0][2]=='X')) return 1;
// 檢查電腦 '0' 勝利
for (int i = 0; i < 3; i++) {
if ((arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][0]=='0') ||
(arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[0][i]=='0')) return 2;
}
if ((arr[0][0]==arr[1][1] && arr[0][0]==arr[2][2] && arr[0][0]=='0') ||
(arr[0][2]==arr[1][1] && arr[1][1]==arr[2][0] && arr[0][2]=='0')) return 2;
// 平手檢查
int flag = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (arr[i][j] != ' ') flag++;
if (flag == 9) return 3;
return 0; // 遊戲繼續
}
int main() {
int Arr[3][3], x, y, result, Result;
Init_Arr(Arr);
Print_Checkerboard(Arr);
printf("Welcome to play the Checkboard Game!\n");
while (1) {
printf("Enter X,Y coordinates for your move: ");
scanf("%d %d", &x, &y);
Result = Player(Arr, x, y);
if (Result) {
Robot(&Arr[0][0]);
Print_Checkerboard(Arr);
result = Judge(Arr);
if (result == 1) { printf("The player win!\n\n"); break; }
if (result == 2) { printf("The robot win!\n\n"); break; }
if (result == 3) { printf("Peace!\n\n"); break; }
} else {
printf("Can not next chess here!\n");
}
}
system("pause");
return 0;
}
#include#include #define EMPTY ' ' #define PLAYER 'X' #define COMPUTER 'O' void init_board(char b[3][3]); void print_board(char b[3][3]); int player_move(char b[3][3]); void computer_move(char b[3][3]); int check_winner(char b[3][3]); int is_draw(char b[3][3]); int main() { char board[3][3]; init_board(board); print_board(board); while (1) { if (player_move(board)) { print_board(board); if (check_winner(board) == PLAYER) { puts("You win!"); break; } if (is_draw(board)) { puts("Draw!"); break; } computer_move(board); print_board(board); if (check_winner(board) == COMPUTER) { puts("Computer wins!"); break; } if (is_draw(board)) { puts("Draw!"); break; } } } return 0; } // ... 實作各函式(略,參考上述邏輯)
本程式展示了結構化 C 程式設計的典型模式:資料與函式分離、單一職責原則、主迴圈控制流程。雖然電腦 AI 極簡單,但架構清晰,極易擴展為完美 AI 或圖形介面版本。適合作為 C 語言期末專案或教學範例。