——个人笔记
注:没有开始界面还有一些复杂的功能,这里只介绍最核心的功能。
逻辑
首先推箱子,我们最最最核心的就是怎么去推。也就是去实现移动功能,改变地图。那么,逻辑中只要考虑人怎么移动就行了。首先,人移动最简单的就是前面是空地或者目的地那么就直接把人移动过去就行了,还有一个就是前面是墙,那么不改变。复杂的就是,人移动前面是箱子(包括已经到达目的地的),那么我们还有判断箱子的前面(这个前面是指人要移动的方向)是否为空地或者目的地,如果是空地或者目的地,那么箱子和人同时向前移动并且做相应的改变(如果是目的地箱子推进去有变化,箱子推出目的地也有变化),如果箱子前面是墙同样不动。
懂了逻辑了,就继续往下走。我们先规定一下0 空地,1墙,2人,3箱子,4目的地,7达到目的地
为什么7是达到目的地?因为3+4=7
我们地图的改变会使用到加法,这里有一个隐藏的6也是表示人,只不过这人站在目的地上面。(这里不懂继续往下看就知道了),下面一步一步完成
地图
这里我们做成通关的小demo,所以所有地图我们用一个三维数组存储,然后用一个二维数组来获取当前关卡的地图。
//全局变量
int allMap[3][10][10]=·····;//这里是所有关卡的地图,太长了,自己定义。
int nowMap[10][10];//当前关卡的地图
int level=0;//当前关卡
//获取当前关卡地图
void InitMap()
{
for(int i=0;i<10;i++)
for (int j = 0; j < 10; j++)
{
nowMap[i][j] = allMap[level][i][j];
}
}
绘图
这里就是根据地图来用easyX贴图,绘图要在每次移动之后都要调用。贴图,我们先要加载图片loadimage
:
void InitImg()
{
loadimage(&img[0], "photo/0.jpg", 500, 500);
//TODO 所有加载图片都可以放在这,可以利用循环也行。
//比如:
/*for(int i=1;i<6;i++)
{
char ch[12] = {'p','h','o','t','o','/',i+'0','.','j','p','g'};
loadimage(&img[i], (LPCTSTR)ch, 50, 50);
}*/
}
那么开始贴图&