```c
include include include include define WIDTH 8 define HEIGHT 8 int map[HEIGHT][WIDTH] = { {0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 4, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 1, 1, 1}, {1, 1, 1, 3, 0, 3, 4, 1}, {1, 4, 0, 3, 2, 1, 1, 1}, {1, 1, 1, 1, 3, 1, 0, 0}, {0, 0, 0, 1, 4, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0} }; void drawMap() { for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { switch (map[i][j]) { case 0: printf(" "); break; case 1: printf(" "); break; case 2: printf("@ "); break; case 3: printf("X "); break; case 4: printf("D "); break; } } printf("\n"); } } int main() { int x = 1, y = 1; // 人的起始位置 int box_x = 3, box_y = 3; // 箱子的起始位置 int direction = ' '; // 存储键盘按的方向 while (1) { system("cls"); // 清屏 drawMap(); // 绘制地图 switch (direction) { case 'w': y--; break; case 'a': x--; break; case 's': y++; break; case 'd': x++; break; } if (map[y][x] == 1) { // 如果撞到墙 printf("Game Over!\n"); return 0; } if (map[y][x] == 2) { // 如果撞到人 printf("Game Over!\n"); return 0; } if (map[y][x] == 3) { // 如果到达目的地 printf("You Win!\n"); return 0; } if (map[box_y][box_x] == 0) { // 如果箱子可以移动到 map[box_y][box_x] = 4; // 标记箱子已移动 map[y][x] = 3; // 人移动到箱子原来的位置 box_x = x; box_y = y; } Sleep(100); // 暂停 direction = _getch(); // 获取键盘输入 } return 0; } ``` 请注意,这个代码使用了Windows特定的`system("cls")`和`_getch()`函数。如果你在非Windows系统上编译和运行,可能需要替换这些函数。例如,在Linux上,你可以使用`system("clear")`代替`system("cls")`,使用`getchar()`代替`_getch()`。 这个代码示例提供了一个基本的推箱子游戏框架,你可以在此基础上添加更多功能,比如更复杂的移动逻辑、不同的游戏级别、图形界面等。