贪吃蛇的进阶(??)之智能蛇

上周尝试做了贪吃蛇之后,这周又收到了新的任务,是制作可以“自己动”的智能蛇。
这里写图片描述
智能蛇的大体框架和上篇博客提到的贪吃蛇没有太大的区别,在此就不复制粘贴那些代码了。
要让贪吃蛇自己动起来的关键在于让蛇自己以一定的速度“走”起来。在这里我用了包含在#include < stdio.h >头文件下的sleep函数来控制这个过程。例如:

sleep(1000)

表示每执行到这一步时暂停1000毫秒。当然,我们也可以设定变化的速度,让智能蛇变成一条“变速蛇”。
用如下的算法可以实现智能蛇的”自己动“

void AIMove() {
    int CanMove[4] = {1,1,1,1};
    if(map[AIsnake.y[0]][AIsnake.x[0]+1] != blank_char && map[AIsnake.y[0]][AIsnake.x[0]+1] != snake_food) CanMove[3] = 0;//right
    if(map[AIsnake.y[0]][AIsnake.x[0]-1] != blank_char && map[AIsnake.y[0]][AIsnake.x[0]-1] != snake_food) CanMove[1] = 0;//left
    if(map[AIsnake.y[0]-1][AIsnake.x[0]] != blank_char && map[AIsnake.y[0]-1][AIsnake.x[0]] != snake_food) CanMove[0] = 0;//up
    if(map[AIsnake.y[0]+1][AIsnake.x[0]] != blank_char && map[AIsnake.y[0]+1][AIsnake.x[0]] != snake_food) CanMove[2] = 0;//down

    if(food.x<=AIsnake.x[0] && food.y<AIsnake.y[0]) AIconstruct=0;
    if(food.x<AIsnake.x[0] && food.y>=AIsnake.y[0]) AIconstruct=1;
    if(food.x>=AIsnake.x[0] && food.y>AIsnake.y[0]) AIconstruct=2;
    if(food.x>AIsnake.x[0] && food.y<=AIsnake.y[0]) AIconstruct=3;

    while(!CanMove[AIconstruct]) AIconstruct = AIconstruct % 4 + 1;

    map[AIsnake.y[AIsnake.lenth-1]][AIsnake.x[AIsnake.lenth-1]] = blank_char;
    map[AIsnake.y[0]][AIsnake.x[0]] = AIsnake_body;
    int i = 0;
    for( i=AIsnake.lenth-1; i; i-- ) {
        AIsnake.x[i] = AIsnake.x[i-1];
        AIsnake.y[i] = AIsnake.y[i-1];
    } 
    switch(AIconstruct) {
        case 0: {AIsnake.y[0]--;
            break;
        }
        case 1: {AIsnake.x[0]--;
            break;
        }
        case 2: {AIsnake.y[0]++;
            break;
        }
        case 3: {AIsnake.x[0]++;
            break;
        }
    }
    if(map[AIsnake.y[0]][AIsnake.x[0]] != blank_char && map[AIsnake.y[0]][AIsnake.x[0]] != snake_food ) {
        GameWin();
    }
    if(map[AIsnake.y[0]][AIsnake.x[0]] == snake_food ) {
        map[AIsnake.y[0]][AIsnake.x[0]] = AIsnake_head;
        HaveFood = 0;
        AIsnake.lenth++;

    else map[AIsnake.y[0]][AIsnake.x[0]] = AIsnake_head;
} 

以上就是进行优化后的”智能蛇“(尽管还存在各种未知的bug=_=)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值