思路:
一、地图初始化
- 使用奇数行和列相同的二维数组存储地图,初始化全部为墙
- 使用一个1-2的随机数确定挖坑方向,1向左,2向右
- 定义步进,随机数范围: 2至(列数-1)
- 利用步进和方向挖坑,先从顶部挖到中间一行,再从底部挖到中间,然后将中间的墙全部连起来,得到完整路径。
二、推箱子
- 0代表小人,X代表箱子
- 左移和右移:判断小人所在位置临近向右(左)的位置是否是箱子,以及箱子的右(左)边位置是否是墙,如果都不是,将箱子和小人向右(左)移动一格;如果小人的右边没有箱子也不是墙,则将小人向右(左)移动,箱子不变
- 上移和下移:判断小人所在位置临近向下(上)的位置是否是箱子,以及箱子的下(上)边位置是否是墙,如果都不是,将箱子和小人向下(上)移动一格;;如果小人的右边没有箱子也不是墙,则将小人向下(上)移动,箱子不变
- 箱子到终点的时候游戏结束
代码块
#include <stdio.h>
#include <stdlib.h>
void setMap (int rows,int cols,char arr[][cols]);//初始化随机地图
void printMap (int rows,int cols, char arr[][cols]);//打印地图
char dirIn (void);//返回输入的方向
int main()
{
int inNanDu = 0; //难度系数
int rows = 25,cols = 25; //行和列数默认值
int nowRow = 1; //当前行座标初始化
int set =1; //步进设置初始化
loop3:
system ("clear");
printf ("# # # # # # # # # # # # # # # # # # # # # # #\n");
printf ("\n\n\n\n\n");
printf (" 推箱子游戏\n");
printf ("\n\n\n\n\n");
printf ("# # # # # # # # # # # # # # # # # # # # # # #\n\n");
printf ("请输入游戏地图的难度值,0-简单,1-普通,2,较难\n");
scanf ("%d",&inNanDu);
switch (inNanDu)
{
case 0:
rows = 25;cols = 25;
break;
case 1:
rows = 35;cols = 35;
break;
case 2:
rows = 45;cols = 45;
break;
default:
goto loop3;
}
char arr[rows][cols];
char ch = '0';
char *pNow = arr[1]; //定义行的移动指针
setMap (rows,cols,arr); //初始化随机地图
printMap (rows,cols,arr); //打印地图
while (ch != 'q')//游戏主体程序
{
pNow = a