推箱子c语言程序代码设计任务和要求
时间: 2023-07-15 22:10:39 浏览: 149
推箱子是一种经典的游戏,要求玩家将箱子推到指定位置。以下是一个简单的推箱子游戏的 C 语言程序设计任务和要求:
任务:
1. 通过终端输入输出,实现简单的推箱子游戏。
2. 游戏场景大小为 n*m,其中 n 和 m 都是奇数,且 n<=15,m<=15。
3. 箱子、人物和墙壁用不同的字符表示。
4. 箱子放到指定位置即为胜利。
要求:
1. 程序要求使用函数实现,遵循模块化设计原则。
2. 程序要求有良好的界面设计,包括提示信息和游戏场景的显示。
3. 程序要求能够正确响应玩家的操作,包括上下左右移动箱子和人物。
4. 程序要求使用数组存储游戏场景,并且能够根据玩家的操作更新数组内容。
5. 程序要求判断玩家是否胜利,如果胜利则输出相应信息并结束游戏。
下面是一个简单的推箱子游戏的 C 语言程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 11 // 场景大小
#define M 11
int map[N][M] = { // 场景地图
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
int player_x; // 人物坐标
int player_y;
void show_map(); // 显示地图
int move(int x, int y, int dir); // 移动箱子或人物
int main() {
player_x = 4; // 初始化人物坐标
player_y = 4;
show_map(); // 显示地图
while (1) { // 循环读取用户输入并移动箱子或人物
char ch = getch();
int dx = 0, dy = 0;
switch (ch) {
case 'w': dx = -1; break;
case 's': dx = 1; break;
case 'a': dy = -1; break;
case 'd': dy = 1; break;
case 'q': exit(0); // 按 q 退出游戏
}
int flag = move(player_x + dx, player_y + dy, 0); // 移动人物
if (flag == 2) { // 如果移动到了箱子
int flag2 = move(player_x + 2 * dx, player_y + 2 * dy, 1); // 移动箱子
if (flag2 == 1) { // 如果箱子移动成功
player_x += dx;
player_y += dy;
}
} else if (flag == 1) { // 如果移动成功
player_x += dx;
player_y += dy;
}
show_map(); // 显示地图
}
return 0;
}
void show_map() {
system("cls"); // 清屏
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (i == player_x && j == player_y) { // 如果是人物
printf("P");
} else if (map[i][j] == 1) { // 如果是墙壁
printf("#");
} else if (map[i][j] == 2) { // 如果是箱子
printf("O");
} else { // 否则是空地
printf(" ");
}
}
printf("\n");
}
printf("Press 'q' to quit.\n"); // 显示提示信息
}
int move(int x, int y, int dir) {
if (map[x][y] == 1) { // 如果是墙壁
return 0;
} else if (map[x][y] == 2) { // 如果是箱子
if (dir == 0) { // 移动人物
return 2;
} else { // 移动箱子
if (map[x + dir][y + dir] == 0) { // 如果空地
map[x + dir][y + dir] = 2;
map[x][y] = 0;
return 1;
} else { // 否则是墙壁或者箱子
return 0;
}
}
} else { // 否则是空地
if (dir == 0) { // 移动人物
return 1;
} else { // 移动箱子
return 0;
}
}
}
```
上述代码实现了一个简单的推箱子游戏,包括游戏场景大小、人物和箱子的表示、移动操作、胜利检测等功能。
阅读全文