cocos2d-x【小菜在学习】做个Towerdefend初期

学习cocos2d-x没事想做做塔防游戏,却没有美工,也还没去找素材,就先这手头的素材做了个最初模样。

做了最初的闪躲障碍物功能,截图如下:




算法参照A星算法改编,但其中还有不少问题,如还是存在绕弯路,绕远路等缺陷:

代码如判断哪个方向可以走代码:

			//右
			if (!isObjs(ccp(p.x+1,p.y))&&!isNoRoute(ccp(p.x+1,p.y)))
			{
				route=new Route;
				route->x=p.x+1;
				route->y=p.y;
				i++;
				Route1->addObject(route);
				flag=false;

			}
			//上
			if (!isObjs(ccp(p.x,p.y+1))&&!isNoRoute(ccp(p.x,p.y+1)))
			{
				route=new Route;
				route->x=p.x;
				route->y=p.y+1;
				flag=false;
				i++;
				Route1->addObject(route);
			}
			//下
			if (!isObjs(ccp(p.x,p.y-1))&&!isNoRoute(ccp(p.x,p.y-1)))
			{
				route=new Route;
				route->x=p.x;
				route->y=p.y-1;
				flag=false;
				i++;
				Route1->addObject(route);
			}
			//左
			if (!isObjs(ccp(p.x-1,p.y))&&!isNoRoute(ccp(p.x-1,p.y)))
			{
				route=new Route;
				route->x=p.x-1;
				route->y=p.y;
				i++;
				Route1->addObject(route);
				flag=false;
			}

如判断是否要走哪个方向的路,a星算法的理解得来的:

			if (Route1->count()!=0&&Route1->count()!=-1)
			{
				for (int i=0;i<Route1->count();i++)
				{
					Route *route=(Route *)Route1->objectAtIndex(i);
					if (min>(fabs((float)(320-route->x))+fabs((float)(32*6-route->y))))
					{
						min=(fabs((float)(320-route->x))+fabs((float)(32*6-route->y)));
						no=i;
					}
				}

				_AllRoute->addObject(Route1->objectAtIndex(no));
				//设置走过的点不可以走
				_nogo->addObject(Route1->objectAtIndex(no));
				Route* route=(Route *)_AllRoute->lastObject();
				if (route->x-p.x>0)
				{
					direct=kRight;
				}else if (route->y-p.y>0)
				{
					direct=kUp;
				}else if (route->y-p.y<0)
				{
					direct=kDown;
				}else if (route->x-p.x<0)
				{
					direct=kLeft;
				}
			    p=ccp(route->x,route->y);
			}else{
				if (_AllRoute->count()!=0&&_AllRoute->count()!=-1)
				{
					Route*route =(Route *)_AllRoute->lastObject();
					p=ccp(route->x,route->y);
				}
			}

现在还写不完全,源码就不贴出来了,大家加油吧


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值