用c语言写一个推箱子程序
时间: 2023-11-27 22:02:38 浏览: 59
推箱子是一种经典的益智游戏,可以用C语言实现。下面是一个简单的推箱子程序实现:
```c
#include <stdio.h>
#define MAX_ROW 10
#define MAX_COL 10
int map[MAX_ROW][MAX_COL] = {
{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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}; // 地图,1表示墙,0表示空地,X表示箱子,P表示人
int row = 1, col = 1; // 人所在的位置,初始在(1,1)
void print_map() {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
if (map[i][j] == 1) {
printf("#");
} else if (i == row && j == col) {
printf("P");
} else if (map[i][j] == 2) {
printf("X");
} else {
printf(" ");
}
}
printf("\n");
}
}
int main() {
int i, j;
// 找到箱子和人的初始位置
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
if (map[i][j] == 'P') {
row = i;
col = j;
}
}
}
while (1) {
system("clear"); // 清屏
print_map(); // 打印地图
// 判断是否胜利
int win = 1;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
if (map[i][j] == 'X') {
win = 0;
}
}
}
if (win) {
printf("You win!\n");
break;
}
char input;
printf("Please enter a direction (w/s/a/d): ");
scanf("%c", &input);
int new_row = row, new_col = col;
switch (input) {
case 'w': new_row--; break;
case 's': new_row++; break;
case 'a': new_col--; break;
case 'd': new_col++; break;
}
if (map[new_row][new_col] == 0) { // 空地
row = new_row;
col = new_col;
} else if (map[new_row][new_col] == 'X') { // 箱子
int new_box_row = new_row, new_box_col = new_col;
switch (input) {
case 'w': new_box_row--; break;
case 's': new_box_row++; break;
case 'a': new_box_col--; break;
case 'd': new_box_col++; break;
}
if (map[new_box_row][new_box_col] == 0) { // 箱子前面是空地
map[new_box_row][new_box_col] = 'X';
map[new_row][new_col] = 0;
row = new_row;
col = new_col;
}
}
getchar(); // 读取多余的回车
}
return 0;
}
```
这个程序有一个简单的地图,可以用w、s、a、d键控制人物的移动,将箱子推到指定位置即可获胜。该程序可以在Linux终端中运行,使用system("clear")清屏。
阅读全文