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

純 C 語言控制台貪吃蛇遊戲完整源碼與架構解析

     編輯:關於C語言

遊戲特性

  • 16x16 遊戲區域,邊界為牆壁 (■)
  • 蛇身動態增長,最大 225 節
  • 食物 (★) 隨機生成,避開蛇身
  • WASD 控制方向,防止 180 度反向
  • 碰撞檢測:撞牆、咬到自己 → 遊戲結束
  • 分數統計,Sleep(250) 控制速度

核心數據結構


#define N 225 // 最大節數

struct Food { int x, y; int yes; }; // yes=1 需生成新食物

struct Snake {
    struct Food body[N]; // 復用 Food 結構存座標
    int life;   // 1=死, 0=活
    int node;   // 當前節數
    char direction; // 移動方向
} snake;

int score = 0;

關鍵算法邏輯

1. 蛇移動:隊列思想


// 從尾部向頭部依次移動座標
for (int i = snake.node - 1; i > 0; i--) {
    snake.body[i].x = snake.body[i-1].x;
    snake.body[i].y = snake.body[i-1].y;
}
// 更新頭部座標
switch(snake.direction) {
    case 'a': snake.body[0].y--; break;
    case 'w': snake.body[0].x--; break;
    case 'd': snake.body[0].y++; break;
    case 's': snake.body[0].x++; break;
}

這實際是一個環形隊列/雙端隊列的簡化模擬。高性能版本可用頭尾指針 O(1) 移動,避免 O(n) 複製。

2. 食物生成與檢測


if (food.yes) {
    do {
        food.x = 1 + rand() % 14; // 避開邊界牆壁
        food.y = 1 + rand() % 14;
    } while (IsOnSnake(food.x, food.y)); // 確保不在蛇身上
    food.yes = 0;
}

// 吃食物檢測
if (snake.body[0].x == food.x && snake.body[0].y == food.y) {
    snake.node++; // 增長
    food.yes = 1; // 標記需生成新食物
    score += 5;
}

3. 碰撞檢測


// 自咬檢測:頭部與任意身體節點重合
for (int i = 3; i < snake.node; i++) // 從第4節開始(前3節不可能自咬)
    if (snake.body[i].x == snake.body[0].x && snake.body[i].y == snake.body[0].y)
        snake.life = 1;

// 撞牆檢測:超出 1..14 範圍(0和15為牆壁)
if (snake.body[0].x <= 0 || snake.body[0].x >= 15 ||
    snake.body[0].y <= 0 || snake.body[0].y >= 15)
    snake.life = 1;

4. 繪製優化


system("cls"); // 全屏清屏,有閃爍
for (int i=0; i<16; i++) {
    for (int j=0; j<16; j++) {
        bool drawn = false;
        // 繪製蛇身
        for (int k=0; k

優化建議:使用 Windows API SetConsoleCursorPosition 只更新變化的字符,消除閃爍,大幅提升幀率。

地圖文件 file.txt

1111111111111111
1000000000000001
1000000000000001
... (共16行,首尾行全1,中間首尾列為1,內部全0)
1111111111111111

總結與擴展

代碼結構清晰,邏輯完整,是經典的「結構體+數組+遊戲循環」教學案例。擴展方向:

  • 雙緩衝/光標定位消除閃爍
  • 等級系統(加速、障礙物、毒藥食物)
  • AI 對戰模式(簡單規則或 A* 追蹤)
  • 本地排行榜文件存儲
  • 移植到 SDL2/OpenGL 圖形化版本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved