推箱子是一种经典的游戏,以下是一个基本的推箱子游戏的C语言程序代码,供参考:
```
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define MAP_WIDTH 10
#define MAP_HEIGHT 10
#define MAX_STEP 100
int map[MAP_HEIGHT][MAP_WIDTH] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,2,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},
};
int player_x = 1, player_y = 1; //玩家初始位置
int box_x = 2, box_y = 2; //箱子初始位置
int steps = 0; //步数
void draw_map()
{
system("cls"); //清屏
for(int i=0; i<MAP_HEIGHT; i++)
{
for(int j=0; j<MAP_WIDTH; j++)
{
if(i == player_y && j == player_x) //画玩家
printf("P");
else if(i == box_y && j == box_x) //画箱子
printf("B");
else if(map[i][j] == 1) //画墙
printf("#");
else //画空地
printf(" ");
}
printf("\n");
}
printf("Steps: %d/%d\n", steps, MAX_STEP); //显示步数
}
int is_win()
{
return (map[box_y-1][box_x] == 3 && map[box_y][box_x+1] == 3 && map[box_y+1][box_x] == 3 && map[box_y][box_x-1] == 3);
}
void game_over()
{
system("cls");
printf("Game Over!\n");
system("pause");
exit(0);
}
void move_player(int dx, int dy)
{
if(map[player_y+dy][player_x+dx] == 1) //如果前方是墙,返回
return;
if(player_x+dx == box_x && player_y+dy == box_y) //如果前方是箱子
{
if(map[box_y+dy][box_x+dx] == 1 || map[box_y+dy][box_x+dx] == 2) //如果箱子前方是墙或者另一个箱子,返回
return;
box_x += dx;
box_y += dy;
steps++;
if(is_win()) //如果胜利了,游戏结束
game_over();
}
player_x += dx;
player_y += dy;
steps++;
}
int main()
{
while(1)
{
draw_map();
int key = getch();
switch(key)
{
case 72: //Up
move_player(0, -1);
break;
case 80: //Down
move_player(0, 1);
break;
case 75: //Left
move_player(-1, 0);
break;
case 77: //Right
move_player(1, 0);
break;
default:
break;
}
if(steps >= MAX_STEP) //如果步数达到上限,游戏结束
game_over();
}
return 0;
}
```
这个程序实现了一个简单的推箱子游戏,玩家可以用方向键控制移动,将箱子推到目标位置即可胜利,当步数达到上限或者无法继续移动时游戏结束。程序中使用了二维数组来表示地图,使用了函数来封装游戏逻辑,同时也用到了一些C语言库函数和系统调用。