10×10 二維數組,0=牆、1=路、2=出口。* 符號,初始座標 (11,6)(對應數組 [1][1])。bioskey() 讀取鍵盤掃描碼(方向鍵為擴展碼)。
union Keyboard {
unsigned int code;
char bytes[2];
};
int getKey() {
Keyboard k;
while (bioskey(1) == 0); // 等待按鍵
k.code = bioskey(0); // 讀取
return (k.bytes[0] == 0) ? k.bytes[1] : k.bytes[0]; // 擴展碼在 bytes[1]
}
方向鍵掃描碼:左75 右77 上72 下80,ESC=27。
int main() {
int map[10][10] = { ... }; // 見原文
int x = 11, y = 6; // 螢幕座標
while (1) {
// 1. 繪製地圖
for (int i = 0; i < 10; ++i) {
gotoxy(10, 5+i);
for (int j = 0; j < 10; ++j) {
if (map[i][j]==0) printf("#");
else if (map[i][j]==1) printf(" ");
else printf("E");
}
}
// 2. 勝負判斷
if (map[y-5][x-10] == 2) { clrscr(); printf("You Win!"); break; }
// 3. 繪製玩家
gotoxy(x, y); printf("*\b");
// 4. 處理輸入
int key = getKey();
if (key==75 && map[y-5][x-11]!=0) x--; // 左
if (key==77 && map[y-5][x-9]!=0) x++; // 右
if (key==72 && map[y-6][x-10]!=0) y--; // 上
if (key==80 && map[y-4][x-10]!=0) y++; // 下
if (key==27) { clrscr(); printf("You Lost"); break; }
clrscr(); // 清屏準備下一幀
}
getch(); return 0;
}
gotoxy(x,y) 控制光標位置(需 conio.h,Turbo C/VC++ 6.0 支持)。clrscr() 清屏實現動畫效果,現代終端可用 ANSI 轉義序列 \033[2J\033[H。(x,y) ↔ 數組下標 [y-5][x-10]。!=0(非牆)。bioskey/conio 為跨平台庫(ncurses、SDL2、raylib)。這個小程序展示了遊戲開發核心循環:輸入 → 更新 → 渲染,以及二維數組作地圖、座標映射、碰撞檢測等基礎概念,極適合初學者上機實驗。