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

C 語言控制台貪吃蛇遊戲完整實作:邏輯、繪圖、輸入與碰撞檢測

     編輯:關於C語言

C 語言控制台貪吃蛇遊戲完整實作:邏輯、繪圖、輸入與碰撞檢測

經典貪吃蛇在 17x17 字符網格中運行,核心邏輯:主循環 → 繪圖 → 非阻塞輸入 → 更新座標 → 碰撞檢測 → 延時刷新。完整代碼含詳細註解。

核心資料結構

char map[17][17] = {0};           // 地圖:0空地 1蛇 2食物 3牆
unsigned char snake[50] = {77};   // 蛇身座標編碼:高4位x, 低4位y (0~16)
unsigned char food = 68;          // 食物座標
char len = 1;                     // 蛇長

關鍵函數

  • tran(num, &x, &y):位運算解碼座標 (x = num>>4, y = num&0x0F)。
  • print_game():遍歷 map 印出字符,*蛇 #牆 $食物,Sleep(500) + system("cls") 實現動畫。
  • get_dir():_kbhit() + _getch() 非阻塞讀取方向鍵 (72/80/75/77),防止長度>1 時反向輸入。
  • move_snake():更新頭座標 → 檢查吃食 → 身體節點依次前移 (last/current 交換) → 成長處理 → 重建 map。
  • generate_food():rand() 產生邊界內非蛇身座標。
  • isalive():檢查頭撞牆或咬到自己。

完整代碼 (精簡版)

#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> #include <time.h>
#define UP 72; #define DOWN 80; #define LEFT 75; #define RIGHT 77
#define SNAKE 1; #define FOOD 2; #define BAR 3

// ... 全域變數、函數宣告 ...

int main() {
    int dir = UP;
    while (1) {
        print_game();
        dir = get_dir(dir);
        move_snake(dir);
        if (!isalive()) break;
    }
    printf("Game Over!\n");
    return 0;
}
// ... 函數定義見原文完整代碼 ...

技術亮點

  1. 座標壓縮:單 unsigned char 儲存 x/y,位運算極快。
  2. 身體移動:last/current 雙變量鏈式賦值,無需額外陣列,O(n) 時間 O(1) 空間。
  3. 非阻塞輸入:_kbhit/_getch 雙呼叫處理方向鍵擴展碼。
  4. 跨平台提示:Linux 下將 Sleep(500) 改 usleep(500000),system("cls") 改 system("clear"),引入 <unistd.h>。

擴展方向

  • 加入分數、等級、加速機制。
  • 使用 ncurses/pdcurses 實現無閃爍、彩色、鍵盤事件驅動。
  • 移植至嵌入式 LCD/OLED 顯示器(修改繪圖函數)。

此實作展示 C 語言處理遊戲邏輯、控制台繪圖、即時輸入的基礎技巧,適合初學者研習。

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