推箱子多关卡(C语言+easyX实现,详细)

——个人笔记

注:没有开始界面还有一些复杂的功能,这里只介绍最核心的功能。

逻辑

首先推箱子,我们最最最核心的就是怎么去推。也就是去实现移动功能,改变地图。那么,逻辑中只要考虑人怎么移动就行了。首先,人移动最简单的就是前面是空地或者目的地那么就直接把人移动过去就行了,还有一个就是前面是墙,那么不改变。复杂的就是,人移动前面是箱子(包括已经到达目的地的),那么我们还有判断箱子的前面(这个前面是指人要移动的方向)是否为空地或者目的地,如果是空地或者目的地,那么箱子和人同时向前移动并且做相应的改变(如果是目的地箱子推进去有变化,箱子推出目的地也有变化),如果箱子前面是墙同样不动。


懂了逻辑了,就继续往下走。我们先规定一下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);
	}*/
}

那么开始贴图&

  • 13
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值