之前已经写了贪吃蛇,今天的作业是智能蛇。
认真说起来其实两者差不多,只不过智能蛇更聪明一点,可以自己找到路线罢了。
两者的主要不同,也是智能蛇的主要难点在于以下两点
1 每秒钟清屏并且 printf
2 蛇自动寻找路线,能吃到食物并且不会与蛇身相撞
第一点其实也不难
system ( “cls” ); 就能做到清屏;
而unistd.h 头文件下有一个叫做sleep的函数sleep();可以使系统按照你想要的定时地打印
值得注意的地方是括号里面的单位是毫秒。
比如说
sleep(1000);
prinitf(“hello , c”);
每秒钟系统就会打印一次 hello , c。
而蛇怎么自动找食物并且避免与蛇身相撞呢?
第二点就有些复杂了
关于怎样使得智能蛇自己寻找合适的路线这一点其实有很多种算法,也有在不同情况选择不同走法的精妙方案,本人比较小白,所以在网上查了些资料,大致的想法其实就是
1 根据食物位置确定总体方向。
2 依据算法决定最短路线
而路线的决定其实是最复杂的地方
我们可以先分析贪吃蛇游戏进行过程中会遇到一些怎么的情况:
蛇头能直接无障碍地找到食物
蛇头不能直接无障碍地找到食物,但能无障碍地找到蛇尾
蛇头不能找到蛇尾也不能找到食物
伪代码大概就是这样子
// Hx,Hy: 头的位置
// Fx,Fy:食物的位置
function whereGoNext(Hx,Hy,Fx,Fy) {
// 用数组movable[3]={“a”,”d”,”w”,”s”} 记录可走的方向
// 用数组distance[3]={0,0,0,0} 记录离食物的距离
// 分别计算蛇头周边四个位置到食物的距离。H头的位置,F食物位置
// 例如:假设输入”a” 则distance[0] = |Fx – (Hx-1)| + |Fy – Hy|
// 如果 Hx-1,Hy 位置不是Blank,则 distance[0] = 9999
// 选择distance中存最小距离的下标p,注意最小距离不能是9999
// 返回 movable[p]
根据大佬的代码终于弄懂了。。。还蛮有成就感的