c语言推箱子代码
时间: 2023-08-12 17:21:54 浏览: 31
以下是C语言实现推箱子游戏的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define ROW 9
#define COL 11
void drawMap(char map[ROW][COL]); // 绘制地图
void moveBox(char map[ROW][COL], int x, int y, int dx, int dy); // 移动箱子
void playGame(char map[ROW][COL]); // 游戏主体
int isWin(char map[ROW][COL]); // 判断是否胜利
int main()
{
char map[ROW][COL] = {
"###########",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"###########"
};
playGame(map);
return 0;
}
void drawMap(char map[ROW][COL])
{
system("cls"); // 清屏
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
}
void moveBox(char map[ROW][COL], int x, int y, int dx, int dy)
{
if (map[x+dx][y+dy] == ' ') {
map[x+dx][y+dy] = '$';
map[x][y] = ' ';
} else if (map[x+dx][y+dy] == '.') {
map[x+dx][y+dy] = '*';
map[x][y] = ' ';
}
}
void playGame(char map[ROW][COL])
{
int x, y; // 人的坐标
int dx, dy; // 人要移动的方向
int i, j;
// 找到人的位置
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (map[i][j] == '@' || map[i][j] == '+') {
x = i;
y = j;
}
}
}
while (1) {
drawMap(map);
// 判断是否胜利
if (isWin(map)) {
printf("You win!\n");
break;
}
// 获取用户输入方向
switch (_getch()) {
case 'w':
case 'W':
dx = -1;
dy = 0;
break;
case 's':
case 'S':
dx = 1;
dy = 0;
break;
case 'a':
case 'A':
dx = 0;
dy = -1;
break;
case 'd':
case 'D':
dx = 0;
dy = 1;
break;
default:
dx = dy = 0;
break;
}
// 移动人
if (map[x+dx][y+dy] == ' ') {
map[x+dx][y+dy] = '@';
if (map[x][y] == '@') {
map[x][y] = ' ';
} else {
map[x][y] = '.';
}
x += dx;
y += dy;
} else if (map[x+dx][y+dy] == '.') {
map[x+dx][y+dy] = '+';
if (map[x][y] == '@') {
map[x][y] = ' ';
} else {
map[x][y] = '.';
}
x += dx;
y += dy;
}
// 移动箱子
if (map[x+dx][y+dy] == '$' || map[x+dx][y+dy] == '*') {
moveBox(map, x+dx, y+dy, dx, dy);
x += dx;
y += dy;
}
}
}
int isWin(char map[ROW][COL])
{
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (map[i][j] == '.') {
return 0;
}
}
}
return 1;
}
```
该代码实现了一个简单的推箱子游戏,地图由二维字符数组表示,其中`#`表示墙,` `表示空地,`$`表示箱子,`.`表示目标,`@`表示人,`+`表示人站在目标上。通过输入`w`、`a`、`s`、`d`控制人的移动,如果人碰到箱子,则箱子也会随之移动。当所有的箱子都被移动到目标上时,游戏结束。