首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言井字棋遊戲:菜單驅動、先後手選擇、完整交互版

     編輯:關於C語言

C語言井字棋遊戲:菜單驅動、先後手選擇、完整交互版

功能完整的井字棋:主菜單、先後手選擇、棋盤顯示、玩家落子、簡單電腦 AI(首個空位)、勝負判斷、重新遊戲。

核心模塊

void menu() { ... }           // 歡迎菜單
void order() { ... }          // 先後手選擇
void init(char a[3][3]) { ... }      // 初始化棋盤
void print(char a[3][3]) { ... }     // 顯示棋盤
void play(char a[3][3], int x, int y) { ... }  // 玩家落子
void computer(char a[3][3]) { ... }  // 電腦落子(首空位策略)
int check(char a[3][3]) { ... }      // 勝負判斷(返回 1玩家勝 0電腦勝)

主流程

int main() {
    char board[3][3];
    int choice, first;
    while (1) {
        menu();
        scanf("%d", &choice);
        if (choice == 0) break;
        order();
        scanf("%d", &first);
        init(board);
        print(board);
        if (first == 0) goto computer_first;  // 原代碼用 goto
        
        while (1) {
            // 玩家回合
            scanf("%d%d", &x, &y);
            play(board, x, y);
            if (check(board) == 1) { printf("你贏了!\n"); break; }
            
            computer_first:
            // 電腦回合
            computer(board);
            if (check(board) == 0) { printf("你輸了!\n"); break; }
        }
    }
}

代碼特點與問題

  • ✅ 完整交互流程:菜單→選擇→遊戲→結果
  • ✅ 支持先後手選擇
  • ⚠️ 使用 goto 處理先後手,建議重構為狀態機
  • ⚠️ 電腦 AI 極簡(首個空位),無策略性
  • ⚠️ check 函數未處理平局返回
  • ⚠️ 輸入坐標無邊界檢查

重構建議

// 狀態機替代 goto
typedef enum { PLAYER_TURN, COMPUTER_TURN } Turn;
Turn turn = first ? PLAYER_TURN : COMPUTER_TURN;

while (game_running) {
    if (turn == PLAYER_TURN) {
        // 玩家邏輯
        turn = COMPUTER_TURN;
    } else {
        // 電腦邏輯
        turn = PLAYER_TURN;
    }
    // 統一檢查勝負
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved