c语言推箱子代码的程序运行及结果
时间: 2023-09-17 19:12:11 浏览: 98
以下是一个简单的C语言推箱子游戏的程序,可供参考:
```c
#include <stdio.h>
#define ROW 10
#define COL 10
void init(char map[ROW][COL], int *px, int *py);
void display(char map[ROW][COL]);
void move(char map[ROW][COL], int *px, int *py, char dir);
int main()
{
char map[ROW][COL]; // 地图
int x, y; // 玩家坐标
init(map, &x, &y);
display(map);
while (1) {
char dir;
printf("请输入移动方向(w代表上,s代表下,a代表左,d代表右):");
scanf(" %c", &dir);
move(map, &x, &y, dir);
display(map);
}
return 0;
}
// 初始化地图和玩家坐标
void init(char map[ROW][COL], int *px, int *py)
{
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) {
map[i][j] = '#'; // 边界
} else {
map[i][j] = ' '; // 空格
}
}
}
map[2][2] = 'P'; // 玩家
*px = 2;
*py = 2;
map[4][3] = 'B'; // 箱子
}
// 显示地图
void display(char map[ROW][COL])
{
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
putchar(map[i][j]);
}
putchar('\n');
}
}
// 移动玩家及箱子
void move(char map[ROW][COL], int *px, int *py, char dir)
{
int nx = *px, ny = *py; // 下一步坐标
switch (dir) {
case 'w': // 上
nx--;
break;
case 's': // 下
nx++;
break;
case 'a': // 左
ny--;
break;
case 'd': // 右
ny++;
break;
default:
printf("移动方向输入错误!\n");
return;
}
// 判断下一步是否可行
if (map[nx][ny] == '#') {
printf("撞墙了!\n");
return;
} else if (map[nx][ny] == 'B') { // 推箱子
int nnx = nx, nny = ny;
switch (dir) {
case 'w': // 上
nnx--;
break;
case 's': // 下
nnx++;
break;
case 'a': // 左
nny--;
break;
case 'd': // 右
nny++;
break;
}
if (map[nnx][nny] == '#' || map[nnx][nny] == 'B') {
printf("推不动!\n");
return;
} else {
map[nnx][nny] = 'B';
}
}
// 更新地图
map[*px][*py] = ' ';
map[nx][ny] = 'P';
// 更新玩家坐标
*px = nx;
*py = ny;
}
```
程序运行后,会显示一个大小为10x10的地图,其中#表示墙,P表示玩家,B表示箱子。玩家通过输入w、s、a、d来控制玩家的移动,如果玩家碰到墙,则不能移动;如果玩家推着箱子碰到墙或者推不动,则不能移动。当玩家将箱子推到指定位置时,游戏胜利。
以下是一个程序运行的示例:
```
##########
# #
# #
# #
# B#
# #
# #
# #
# #
##########
请输入移动方向(w代表上,s代表下,a代表左,d代表右):d
##########
# #
# #
# #
# B
# P
# #
# #
# #
##########
请输入移动方向(w代表上,s代表下,a代表左,d代表右):d
##########
# #
# #
# #
# #
# BP
# #
# #
# #
##########
请输入移动方向(w代表上,s代表下,a代表左,d代表右):d
##########
# #
# #
# #
# #
# PB
# #
# #
# #
##########
```
阅读全文