贪吃蛇的进化——智障蛇

上次我说了一个【十分复杂】造蛇的操作
(什么你没看过?戳这里
下来我们就给它加一个人工智障的buff吧!
(戳这里自带BGM!)


简单的思路

所谓的“智障”其实就是将人手动输入方向的过程交给电脑完成,一个简单的想法就是计算蛇头周围四个方向距离食物的距离,取其最小值作为下一步的方向,当然了吃自己/怼墙这种事我们肯定不想看到了,那在取最小值的时候就要略过这些方向
这个过程用伪代码表示如下
// 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]

实现的代码则如下

int calculate_distance(int Hx, int Hy, int Fx, int Fy) {
    if (map[Hx][Hy] == ' ' || map[Hx][Hy] == '$')
        return abs(Fx - Hx) + abs(Fy - Hy);
    else
        return 10000;
}

char where_to_move(int Hx, int Hy, int Fx, int Fy) {
    char moveable[4] = { 'a','d','w','s' };
    int distance[4] = { 0 };
    distance[0] = calculate_distance(Hx, Hy - 1, Fx, Fy);
    distance[1] = calculate_distance(Hx, Hy + 1, Fx, Fy);
    distance[2] = calculate_distance(Hx - 1, Hy, Fx, Fy);
    distance[3] = calculate_distance(Hx + 1, Hy, Fx, Fy);
    int pointer = 0;
    int min = distance[0];
    for (int i = 0; i < 3; i++) {
        if (min > distance[i + 1])
            min = distance[i + 1];
    }
    for (int i = 0; i < 4; i++) {
        if (distance[i] == min)
            pointer = i;
    }
    return moveable[pointer];
}

当然,因为没有了等待输入的过程,直接运行的话就是闪Game Over了,于是我们还要让没走一步都等一下下。在Linux下的程序可以用sleep()或者usleep()函数,两者区别在于前者是秒为单位而后者是微秒为单位。


实例?

这里写图片描述
讲道理这蛇活了这么久这智障程度还是大大超出预期了呢


进一步操作

我们还可以加上在地图中加点障碍物给智障蛇加点料,对“图层”的概念来说这个操作十分简单,在“边框层”和“蛇层”中间插一个“障碍物”层即可
当然我们也可以做个计时系统、分数系统什么的,或者再做一个简单的GUI,不过我是没精力做这个了,也许会有优秀的同学做出来了呢?

完~

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值