經典控制台遊戲入門項目,使用二維字符數組表示地圖,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;
}
}
}
scanf(" %c", &dir) 空格跳過殘留換行符kbhit()/getch() 實現即時控制涵蓋:二維數組、結構化程序設計、鍵盤交互、遊戲循環、狀態機、邊界檢測,是 C 語言進階項目絕佳切入點。