推箱子c语言程序代码250行
时间: 2023-07-02 19:03:35 浏览: 70
以下是一份简单的推箱子游戏 C 语言程序代码,共 250 行左右:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define ROW 10 // 地图行数
#define COL 10 // 地图列数
char map[ROW][COL] = { // 地图数组,0 表示空地,1 表示墙,2 表示箱子,3 表示目标点,4 表示人
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 2, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 3, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 4, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
int player_x, player_y; // 人的坐标
void draw_map() { // 绘制地图
system("cls"); // 清屏
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (i == player_y && j == player_x) { // 绘制人
printf("P");
} else if (map[i][j] == 0) { // 绘制空地
printf(" ");
} else if (map[i][j] == 1) { // 绘制墙
printf("#");
} else if (map[i][j] == 2) { // 绘制箱子
printf("$");
} else if (map[i][j] == 3) { // 绘制目标点
printf(".");
}
}
printf("\n");
}
}
int check_win() { // 检查是否胜利
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (map[i][j] == 3) { // 如果还有目标点没有箱子
return 0;
}
}
}
return 1;
}
int main() {
draw_map(); // 绘制初始地图
while (1) {
int key = getch(); // 获取键盘输入
int dx = 0, dy = 0; // 人的移动方向
if (key == 'w' || key == 'W') { // 上移
dy = -1;
} else if (key == 's' || key == 'S') { // 下移
dy = 1;
} else if (key == 'a' || key == 'A') { // 左移
dx = -1;
} else if (key == 'd' || key == 'D') { // 右移
dx = 1;
} else if (key == 'r' || key == 'R') { // 重新开始
player_x = 3;
player_y = 8;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (map[i][j] == 2) { // 将箱子移回原位
map[i][j] = 0;
} else if (map[i][j] == 4) { // 将人移回原位
map[i][j] = 0;
}
}
}
map[5][5] = 2; // 放置箱子
map[6][5] = 3; // 放置目标点
draw_map(); // 重新绘制地图
continue;
} else if (key == 27) { // 退出游戏
break;
}
int new_x = player_x + dx, new_y = player_y + dy; // 人移动后的坐标
if (map[new_y][new_x] == 0 || map[new_y][new_x] == 3) { // 如果是空地或目标点
map[player_y][player_x] = 0; // 将原位置置为0
map[new_y][new_x] = 4; // 将人移动到新位置
player_x = new_x;
player_y = new_y;
} else if (map[new_y][new_x] == 2) { // 如果是箱子
int new_box_x = new_x + dx, new_box_y = new_y + dy; // 箱子移动后的坐标
if (map[new_box_y][new_box_x] == 0 || map[new_box_y][new_box_x] == 3) { // 如果箱子可以移动
map[player_y][player_x] = 0; // 将人移动到新位置
map[new_y][new_x] = 4;
player_x = new_x;
player_y = new_y;
map[new_box_y][new_box_x] = 2; // 将箱子移动到新位置
}
}
draw_map(); // 绘制新地图
if (check_win()) { // 如果胜利
printf("You win!\n");
break;
}
}
return 0;
}
```
这份代码实现了一个简单的推箱子游戏,包括地图绘制、人和箱子的移动、胜利判断等功能。玩家可以使用 WASD 或方向键控制人的移动,推动箱子到目标点即可获胜。