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

C語言貪吃蛇遊戲:從手動控制到簡易 AI 完整實現

     編輯:關於C語言

項目概覽

使用 C 語言在 Windows 控制台實現經典貪吃蛇遊戲,包含兩個版本:

  1. 手動版:鍵盤 WASD 控制方向。
  2. 自動版:簡易贪心 AI 自動尋路吃食物。

核心數據結構

struct SnakeNode {
    int x, y;   // 坐標
    int dir;    // 方向:0上 1右 2下 3左(僅蛇頭有效)
} snake[100];

char map[17][17]; // 遊戲地圖:邊界'*',空格' ',蛇身'X',蛇頭'H',食物'O'
int sum = 5;      // 蛇身長度
int speed = 500;  // 幀延遲(ms)
int food_x, food_y;

關鍵函數流程

初始化 (ini)

  • 設置邊界、空白區域、初始蛇身(左上角橫向 5 格)。
  • 隨機生成第一個食物。

主循環 (show)

while (1) {
    Sleep(speed);
    turn();   // 處理輸入 / AI 決策
    move();   // 更新蛇身坐標、檢測碰撞/進食
    if (game_over) handle_restart_or_quit();
    system("cls");
    render_map();
}

移動邏輯 (move)

  • 未進食:尾部釋放,身體前移,頭部按方向前進一格。
  • 進食:長度+1,頭部前進,原頭變身體,重新生成食物,加速。

碰撞檢測 (check)

  • 下一格為邊界 '*' 或蛇身 'X'(除尾部外) → 遊戲結束。
  • 下一格為食物 'O' → 標記進食。

手動版輸入處理 (turn)

if (_kbhit()) {
    char ch = _getch();
    switch (ch) {
        case 'w': if (head.dir != 2) head.dir = 0; break;
        case 'd': if (head.dir != 3) head.dir = 1; break;
        case 's': if (head.dir != 0) head.dir = 2; break;
        case 'a': if (head.dir != 1) head.dir = 3; break;
    }
}

防止 180° 掉頭導致瞬間自殺。

自動版 AI 策略 (turn + calculate)

void calculate() {
    for (int d = 0; d < 4; d++) {
        int nx = head.x + dx[d], ny = head.y + dy[d];
        if (map[nx][ny] == ' ' || map[nx][ny] == 'O') {
            movable[d] = 1;
            distance[d] = abs(nx - food_x) + abs(ny - food_y); // 曼哈頓距離
        } else movable[d] = 0;
    }
}
void turn() {
    int best = 0;
    for (int d = 1; d < 4; d++)
        if (movable[d] && distance[d] < distance[best]) best = d;
    // 同手動版邏輯設置 head.dir = best
}

策略:在可移動方向中選擇曼哈頓距離食物最近者。簡單但有效,無法處理陷阱(如自我包圍)。

完整代碼結構

兩版本代碼結構幾乎相同,差異僅在 turn() 與 calculate()。完整代碼請參考原文,此處不再重複貼出。

編譯與運行

gcc snake.c -o snake.exe
# 或使用 Visual Studio 建立控制台項目

需鏈接 Windows API(windows.h, conio.h),故僅限 Windows 平台。

擴展建議

  • 使用雙端隊列優化蛇身更新(O(1) 移除尾部、添加頭部)。
  • 引入 BFS/DFS 實現真正的尋路 AI(避開陷阱)。
  • 使用 ncurses 移植到 Linux/macOS 終端。
  • 添加計分、最高分記錄、多關卡、障礙物等玩法。

總結

貪吃蛇是鍛鍊 C 語言基礎(數組、結構體、控制台輸入輸出、遊戲循環)的絕佳項目。從手動到簡易 AI 的演進展示了遊戲邏輯與決策分離的設計思想。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved