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

C語言實現推箱子小遊戲完整源碼解析

     編輯:關於C

基於 8×8 字符界面的推箱子第一關,含移動、推箱、勝負判定、重啟功能。

核心數據結構

int map_1[8][8] = {  // 初始地圖模板
    {0,0,1,1,1,0,0,0},
    {0,0,1,4,1,0,0,0},
    {0,0,1,2,1,1,1,1},
    {1,1,1,0,0,2,4,1},
    {1,4,0,2,3,1,1,1},
    {1,1,1,1,2,1,0,0},
    {0,0,0,1,4,1,0,0},
    {0,0,0,1,1,1,0,0}
};
int map[8][8] = {0};  // 運行時地圖
int x, y;             // 玩家坐標

// 編碼:0空 1牆 2箱子 3玩家 4目標點 5箱子在目標點

關鍵函數

  • shuchu():雙層循環打印地圖,編碼轉字符(■⊙□☆ ★)。
  • find():掃描地圖定位玩家坐標到全局 x,y。
  • count1():統計目標點總數(初始 4 的個數)。
  • count2():統計已到位箱子數(5 的個數)。
  • up/down/left/right():處理 WASD 移動邏輯。核心規則:
    • 前方為空(0) → 玩家移動。
    • 前方為箱子(2)且再前方為目標(4) → 推箱到目標變 5。
    • 左移額外處理:箱子後為空 → 推箱移動(不計勝負)。
  • zhujiemian():打印標題與操作提示。

主循環

int main() {
    system("title 推箱子遊戲~");
    memcpy(map, map_1, sizeof(map_1));  // 初始化
    zhujiemian(); getch(); system("cls");
    int target = count1();
    while (1) {
        system("cls");
        shuchu();
        if (count2() == target) { printf("遊戲勝利~\n"); getch(); return 0; }
        find();
        switch(getch()) {
            case 'w': up(); break;
            case 's': down(); break;
            case 'a': left(); break;
            case 'd': right(); break;
            case 'r': memcpy(map, map_1, sizeof(map_1)); break;  // 重啟
        }
    }
}

依賴庫

  • stdio.h、stdlib.h、string.h(memcpy)、conio.h(getch/cls)。
  • Windows 控制台下運行,Linux 需替換 conio.h 相關函數。

完整代碼約 200 行,邏輯清晰,適合初學者研習遊戲循環、狀態機、二維數組操作。

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