#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h> //getch的头文件
//用二维数组做一个地图
/*
用数字描述
0:空地
1:墙壁
3:箱子目的地
4:箱子
6:人
7:箱子和目的地重合
9:人站在目的地
在这里弄成一个开始地图为:
1 1 1 1 1 0 0 0 0 0 0 0
1 0 0 0 1 0 1 1 1 0 0 0
1 0 4 0 1 0 1 1 1 1 1 1
1 0 4 6 1 0 1 0 0 0 3 1
1 1 1 4 1 1 1 0 0 0 3 1
1 1 1 0 0 0 0 0 0 0 3 1
0 1 0 0 0 1 0 0 0 0 0 1
0 1 0 0 0 1 0 0 0 0 0 1
0 1 0 0 0 1 1 1 1 1 1 1
0 1 1 1 1 1 0 0 0 0 0 0
*/
int g_map[2][10][12] =
{
//想要过关升级,那么一个二维数组就是一个地图,那么弄一个三维数组,不就可以弄出多个地图了吗
//正如上面的数字排序
{
{
1,1,1,1,1,0,0,0,0,0,0,0},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
},
{
//自己弄一个地图,这里就不设计了
{
},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
{
},
}
};
int g_ncurrentLevel = 0; //当前关卡,数组下标一般从0开始
void DrapMap(); //打印地图
POINT GetGamerPosition() //获取玩家坐标
/*在VS2013版本存在,其实是个结构体
typedef struct tagPOINT
{
LONG x;
LONG y;
}POINT,*POINT,NEAR*NPPOINT,FAR*LPPOINT;
*/
void Up(); //往上走
void Down(); //往下走
void Left(); //往左走
void Right(); //往右走
int GetSpareBox(); //计算空余箱子个数
int main()
{
//设置标题
SetConsoleTitle(L"推箱子"); //弹出框架最上方,白色边最左边写着“推箱子”
//设置窗口大小
system("mode con cols=26 lines=12"); //mode 是修改的意思,con 是控制的意思,cols 是列的意思,lines 是行的意思
//让程序不停的执行
while(1)
{
//获取剩余箱子的个数
if(GetSpareBox() == 0)
{
g_nCurrentLevel++
}
//每循环一次,都要进行清屏处理,否则打印多个界面
system("cls");
//打印地图
DrapMap();
//获得一个字符
char ch = getch();
//getchar和scanf,getch都可以暂时停止while循环
//但getch只需要按需要的键,而不需要回车键即可,进行下一行程序,字面表达不清楚,可以自己尝试
switch(ch)
{
case'w':case 72: //往上
UP();
break;
case's':case 80: //往下
Down();
break;
case'a':case 75: //往右
Left();
break;
case'd':case 77: //往右
Right();
break;
}
}
}
//打印地图,遍历
void DrapMap()
{
for(int i = 0; i < 10;i++)
{
for(int j=0;j < 12;j++)
{
switch(gap_map[g_ncurrentLevel][i][j])
{
case 0://空地
printf(" ");//两个空格
break;
case 1://墙壁
printf("墙壁"); //用搜狗输入法的功能可以打印出一个箱子,由于我没有搜狗,所以这里就不这么做了
break;
case 3://箱子目的地
printf("五角星"); //同上
break;
case 4://箱子
printf("箱子");
break;
case 6://人
printf("人");
break;
case 7://箱子在目的地
printf("箱子在目的地");
break;
case 9://人站在箱子目的地
printf("人站在箱子目的地");
break;
}
}
printf("\n");
}
}
//获取玩家坐标
POINT GetGamerPosition()
{
POINT pos = {
-1,-1}; //默认值为-1,表示没有找到
//遍历
for(int i=0;i<10;i++)
{
for(int j=0;j<12;j++)
{
if(g_map[g_ncurrentLevel][i][j] == 6|| g_map[g_ncurrentLevel][i][j] == 9)
{
pos.x = i;
pos.y = j;
return pos;
}
}
}
return pos;
}
//往上
void Up()
{
POINT pos = GetGamerPosition();
//在这里,前面和上面的意思一样,前面和上面的意思一样,前面和上面的意思一样
//1.人的上面是空地
if(g_map[g_ncurrentLevel][pos
推箱子之游戏介绍及游戏地图设计,角色移动,人推箱子,过关升级
最新推荐文章于 2024-06-11 15:42:47 发布