`
未来程序员
  • 浏览: 25161 次
社区版块
存档分类
最新评论

Unity-关于一个3D贪吃蛇的走路算法

 
阅读更多

近日在做一个类似于ios手游《贪吃三国》的3D贪吃蛇游戏。

 

一、移动

 

    在之前的项目中,移动运用的是Unity的AStarPathFinding插件。使每一个贪吃蛇元素的移动目标点为前一个元素,蛇头控制移动方向,发现效果不是很好。

    后来查到了一个小游戏贪吃蛇算法原理,如下。

 

二、2D游戏、像素游戏贪吃蛇算法原理

红色是蛇,蓝色是食物
先来看看蛇的构造

 

 

可以看到,蛇其实是由1个1个正方体拼成的。每个正方体的左上角是他们的坐标。在程序中,我们可以用一个数组表示一条蛇。数组的每一个位置存放一个正方形的坐标
如:
snakeArr = [(10,0),(20,0),(30,0),(40,0)];
在画蛇的时候,我们只需要遍历数组,根据数组里面的坐标在画布上画出一个一个的正方体就变成一条蛇啦。
至于蛇的行走怎么办?如下一步,蛇往上走了。

 

 

若下一步往上走,则下一个点为数组首点的横坐标不标,纵坐标+10
nextPoint = new Point(snakeArr[0].x,snakeArr[0].y+10);
接着,我们在数组的头部插入nextPoint,然后把数组尾部的数据去除。数组变成这个样子:
snakeArr = [(10,10),((10,0),(20,0),(30,0)];
是不是和数据结构里面的“队”很类似?。头位置作插入,队尾作删除。

只要知道蛇头的移动方向,计算下一个蛇头点,插入蛇头,删掉蛇尾,就可以实现像素蛇的移动。

 

三、基于贪吃蛇算法原理的3D贪吃蛇移动

 

//Vector3 nextDirection 当前蛇头方向 上、下、左、右
//snakePosList 蛇的数组 snakePosList[0]蛇头
Vector3 nextpos = snakePosList[0]+nextDirection*1f;

//插入下一个蛇头位置,删除蛇尾设置			
snakePosList.Insert(0,nextpos);
snakePosList.RemoveAt(snakePosList.Count -1);
//利用TweenPosition,使角色向下一个目标点缓动			
for(int i = 0 ; i < RoleList.Count ; i++)
{
     RoleList[i].tp = TweenPosition.Begin(RoleList[i].gameObject,1f,snakePosList[i]);
}

 
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics