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

C語言控制台迷宮遊戲:二維數組地圖、鍵盤輸入、狀態更新

     編輯:關於C語言

C語言實現控制台迷宮遊戲:地圖渲染、移動邏輯、勝利判定

經典控制台遊戲入門項目,使用二維字符數組表示地圖,WASD 鍵控制移動,實時渲染玩家位置。

核心數據結構


#define ROWS 7
#define COLS 6

char maze[ROWS][COLS] = {
    {'#','#','#','#','#','#'},
    {'#','0','#',' ',' ',' '},
    {'#',' ','#',' ','#','#'},
    {'#',' ','#',' ',' ','#'},
    {'#',' ',' ','#',' ','#'},
    {'#','#',' ',' ',' ','#'},
    {'#','#','#','#','#','#'}
};

int playerX = 1, playerY = 1;  // 玩家初始位置
char PLAYER = '0';
char WALL = '#';
char PATH = ' ';

主循環架構


void printMaze() {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++)
            printf("%c", maze[i][j]);
        printf("\n");
    }
}

void calculateNextPos(char dir) {
    switch(dir) {
        case 'w': nextX = curX - 1; break;
        case 's': nextX = curX + 1; break;
        case 'a': nextY = curY - 1; break;
        case 'd': nextY = curY + 1; break;
    }
}

void movePlayer() {
    if (maze[nextX][nextY] == PATH) {
        maze[curX][curY] = PATH;
        maze[nextX][nextY] = PLAYER;
        curX = nextX; curY = nextY;
    } else {
        nextX = curX; nextY = curY;  // 撞牆回彈
    }
}

int main() {
    printMaze();
    while (1) {
        char dir; scanf(" %c", &dir);  // 空格跳過換行符
        calculateNextPos(dir);
        movePlayer();
        printMaze();
        if (curX == ROWS-1 || curY == COLS-1) {
            printf("通關!\n"); break;
        }
    }
}

關鍵技術點

  1. 地圖數組雙重用途:同時存儲地形與玩家狀態
  2. 移動合法性檢查:目標格為空格才允許移動
  3. 位置交換實現移動:原位置恢復空格,新位置放置玩家
  4. 輸入處理:scanf(" %c", &dir) 空格跳過殘留換行符
  5. 勝利條件:到達邊界 (最後行/列)

擴展方向

  • 多關卡:地圖文件加載
  • 敵人/陷阱/道具:擴展字符類型
  • 記錄步數/時間:增加統計變量
  • 視野限制:只顯示周圍 3x3 區域
  • 顏色渲染:結合 SetConsoleTextAttribute
  • 非阻塞輸入:kbhit()/getch() 實現即時控制

教學價值

涵蓋:二維數組、結構化程序設計、鍵盤交互、遊戲循環、狀態機、邊界檢測,是 C 語言進階項目絕佳切入點。

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