用c语言设计一个推箱子小游戏,可选择难度
时间: 2024-02-20 19:59:49 浏览: 72
好的,以下是一个简单的推箱子游戏的 C 语言代码。可以根据需要自行调整难度。
```c
#include <stdio.h>
#define ROWS 10
#define COLS 10
int map[ROWS][COLS] = {0}; // 地图
int px, py; // 人的坐标
// 初始化地图
void init_map()
{
int i, j;
for(i=0; i<ROWS; i++)
for(j=0; j<COLS; j++)
map[i][j] = 0;
}
// 打印地图
void print_map()
{
int i, j;
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLS; j++)
{
if(i==py && j==px)
printf("P "); // 人的位置
else if(map[i][j] == 0)
printf(". "); // 空位置
else if(map[i][j] == 1)
printf("B "); // 箱子
else if(map[i][j] == 2)
printf("O "); // 目标位置
}
printf("\n");
}
}
// 检查是否成功
int check_win()
{
int i, j;
for(i=0; i<ROWS; i++)
for(j=0; j<COLS; j++)
if(map[i][j] == 1) // 还有箱子没有放到目标位置
return 0;
return 1;
}
// 移动
void move(int dx, int dy)
{
int cx = px + dx;
int cy = py + dy;
if(cx>=0 && cx<COLS && cy>=0 && cy<ROWS && map[cy][cx]!=1) // 不出界且目标位置是空位置或目标位置
{
if(map[cy][cx] == 2) // 目标位置
map[cy][cx] = 3;
px = cx;
py = cy;
}
else if(cx>=0 && cx<COLS && cy>=0 && cy<ROWS && map[cy][cx]==1) // 箱子
{
int bx = cx + dx;
int by = cy + dy;
if(bx>=0 && bx<COLS && by>=0 && by<ROWS && map[by][bx] != 1) // 箱子不出界且目标位置是空位置或目标位置
{
if(map[by][bx] == 2) // 目标位置
map[by][bx] = 3;
map[cy][cx] = 0;
map[by][bx] = 1;
px = cx;
py = cy;
}
}
}
int main()
{
int level;
printf("请选择难度:1.简单 2.普通 3.困难\n");
scanf("%d", &level);
// 初始化地图
init_map();
// 设置地图
switch(level)
{
case 1:
map[1][1] = 1;
map[2][1] = 1;
map[3][1] = 2;
px = 1;
py = 2;
break;
case 2:
map[1][3] = 1;
map[2][3] = 1;
map[3][3] = 2;
map[2][2] = 1;
map[2][4] = 1;
px = 3;
py = 2;
break;
case 3:
map[1][1] = 1;
map[1][2] = 1;
map[1][3] = 2;
map[2][1] = 1;
map[3][1] = 1;
map[4][1] = 2;
map[2][3] = 1;
map[3][3] = 1;
map[4][3] = 2;
map[5][2] = 1;
map[5][3] = 1;
map[5][4] = 2;
px = 1;
py = 2;
break;
default:
printf("输入错误!\n");
return 0;
}
// 游戏循环
while(1)
{
// 打印地图
print_map();
// 检查是否成功
if(check_win())
{
printf("恭喜你,成功了!\n");
break;
}
// 等待用户输入
char ch;
printf("请输入方向(w上 s下 a左 d右 q退出):");
scanf(" %c", &ch);
// 移动
switch(ch)
{
case 'w':
move(0, -1);
break;
case 's':
move(0, 1);
break;
case 'a':
move(-1, 0);
break;
case 'd':
move(1, 0);
break;
case 'q':
printf("再见!\n");
return 0;
default:
printf("输入错误!\n");
break;
}
}
return 0;
}
```
该代码中,难度可选择 1、2、3,分别对应简单、普通、困难三个难度级别。在游戏开始前,根据选择的难度级别,初始化地图并设置好人的起始位置和箱子、目标位置的位置。在游戏过程中,根据用户输入的方向,修改人和箱子的位置,并检查是否成功。当所有箱子都被推到目标位置上时,游戏结束。
阅读全文