基於 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 移動邏輯。核心規則:
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)。conio.h 相關函數。完整代碼約 200 行,邏輯清晰,適合初學者研習遊戲循環、狀態機、二維數組操作。