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

C 語言控制台掃雷遊戲:二維數組實現完整邏輯與交互

     編輯:C 語言入門

遊戲設計

  • 棋盤:8×8 二維數組
  • 地雷分佈:預置 map[8][8],1 表示有雷
  • 顯示層:ui[8][8] 初始全 '+',揭開後顯示數字
  • 周鄰偏移:p[8][2] 定義 8 方向相對坐標
  • 勝利條件:揭開所有非雷格(共 54 個)

核心代碼結構

#include 

int main() {
    char ui[8][8] = { {'+'} };  // 初始化全 '+'
    int map[8][8] = {  // 地雷分佈(1=有雷)
        {0,0,0,0,0,0,0,0},
        {0,0,1,0,0,1,0,0},
        {0,0,0,0,1,0,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,1,0,0,0,0,0},
        {0,0,1,0,0,0,0,0},
        {0,1,0,1,1,0,0,0},
        {1,0,0,0,0,0,0,0}
    };
    int p[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
    
    int h, l, win = 0;
    while (1) {
        // 1. 繪製界面
        printf("掃雷遊戲\n");
        for (int i=0; i<8; i++) {
            for (int j=0; j<8; j++) printf("%c ", ui[i][j]);
            printf("\n");
        }
        
        // 2. 獲取輸入
        printf("請輸入要打開的位置 行 列: ");
        scanf("%d%d", &h, &l);
        h--; l--;  // 轉 0 基索引
        
        // 3. 踩雷判斷
        if (map[h][l] == 1) {
            printf("踩到雷 遊戲結束\n");
            break;
        }
        
        // 4. 計算周圍雷數
        int count = 0;
        for (int i=0; i<8; i++) {
            int nh = h + p[i][0], nl = l + p[i][1];
            if (nh>=0 && nh<8 && nl>=0 && nl<8 && map[nh][nl]==1)
                count++;
        }
        
        // 5. 更新顯示
        ui[h][l] = '0' + count;  // 數字轉字符
        
        // 6. 勝利判斷
        if (++win == 54) {
            printf("獲勝 遊戲結束\n");
            break;
        }
    }
    return 0;
}

關鍵算法解析

八方向鄰居遍歷

int p[8][2] = {
    {-1,-1}, {-1,0}, {-1,1},  // 上三格
    {0,-1},          {0,1},   // 左右
    {1,-1},  {1,0},  {1,1}    // 下三格
};

統一邊界檢查:nh>=0 && nh<8 && nl>=0 && nl<8

數字字符轉換

ui[h][l] = '0' + count;  // 0-8 對應 ASCII '0'-'8'

比 switch 更簡潔高效。

功能擴展建議

  1. 隨機生成地雷:srand(time(NULL)) + rand() 佈雷
  2. 遞歸展開:點擊 0 區域自動展開周圍格子
  3. 標記功能:右鍵/輸入 f 切換旗幟
  4. 計時器:記錄遊戲用時
  5. 難度選擇:9×9/10、16×16/40、30×16/99
  6. NCurses 界面:鍵盤導航、顏色高亮

教學價值

  • 二維數組建模棋盤遊戲
  • 狀態分離:邏輯層 map vs 視圖層 ui
  • 坐標轉換與邊界檢查
  • 遊戲循環:渲染→輸入→邏輯→判斷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved