上传者: beifangdetian
|
上传时间: 2021-12-15 12:06:15
|
文件大小: 173.72MB
|
文件类型: RAR
unity贪吃蛇游戏源码+AI-游戏源码:
1.利用ngui插件对界面进行了仿写
在仿写界面途中发现,贪吃蛇这个游戏在界面适应屏幕分辨率,所以在开发中需要注意界面对屏幕的适应性。通过每个图片的宽高 和uiroot的比值,在start方法中对他进行了缩放。
2.利用 ngui 自带的uidragdropItem实现摇杆
界面完成之后,首先对贪吃蛇的摇杆进行了编程。
在unity中的NGUI上,给sprite创建添加一个uidragdropitem 实现了sprite的拖动。
AI的开始,移动逻辑:
整体只考虑三个前景:
1.首先先判断蛇首的简介范围是否有其他蛇死亡了留下的食物,如果有的话设置当前朝向为星星方向,便设置移动倍率为2,否则判断第三种情况;
3.随机朝某个位置移动。如果每帧AI都在更新的话,蛇的反映速度依然会更快,需要设置一下AI的更新间隔,通过调整这个间隔和蛇首的简介方位来调整AI的反映速度,目的是能够让玩家有机会撞死AI。
AI 移动的方向分析:
AI在一个平面上运动,坐标就只有两个 把他用0和1表示为:
----- 4个方向 上下左右
(0,0) (0,1) (0,-1) (-1,0) (1,0)
四个角度 象限。
(-1,1) (1,1) (-1,-1) (1,-1)
设计思路就是把AI蛇也当作是用摇杆来控制的。那么AI就方便写多了,只是 在还没开始写之前,要考虑的就是AI蛇多了之后程序会不会卡死了。在使用线程控制的过程中发现了一个问题,cup利用率太高。所以想先尝试一下在update上操作。如果不行的在想其他的办法。
设计:
把每个AI蛇都相当于人在控制他。那么想象一下虚拟摇杆,用一个数组来存这些虚拟摇杆的位移坐标
把每条AI蛇的长度也记录下来,默认长度就20
错误:
NullReferenceException: Object reference not set to an instance of an object
AI6control.flootAIOneBody6 (Vector3 V) (at Assets/AI6control.cs:57)
AI6control.AIsix () (at Assets/AI6control.cs:40)
AI6control.Update () (at Assets/AI6control.cs:13)
该错误在百度上说:没有实例化的问题
最后一个下午的代码调试 发现由于自己的粗心 导致了把<符号写成了<=符号
就因为这个问题,让贪吃蛇变成了 卡神,害我看了好几天,现在解决了,贪吃蛇也变流畅了好多.
Ai蛇也需要吃食物。长大,在游戏刚启动的时候就让Ai蛇在地图中吃食物,成长,当用户进入游戏的时候AI蛇已经吃到了一定的食物。测试了AI蛇确实发现他能吃食物。死后的处理也处理了。
在AI蛇吃食物的时候 ,地图中食物太多,控件太多。没法知道他是什么时候,查了资料说是要遍历地图中的对象,测试了一下,发现对象太多,程序卡得不要不要的,只能用触发器,避免遍历食物让程序运行不流畅或者变得死机等情况。
这样的话 在游戏中运行10-20条蛇是没有问题的。
地图中有10个点,这10个点是用来AI蛇死后复活的地方。
增加了限定时间模式.
经过很多的测试,也发现了很多的bug 不过都基本改完了,现在暂时没有发现bug