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

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

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

cocos2d-x【小菜在学习】做个Towerdefend初期_第1张图片

cocos2d-x【小菜在学习】做个Towerdefend初期_第2张图片

cocos2d-x【小菜在学习】做个Towerdefend初期_第3张图片

算法参照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);
				}
			}

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


你可能感兴趣的:(cocos2dx塔防游戏体验)