贪吃蛇系列开篇----设计智能贪吃蛇小游戏

本文介绍了如何设计一个基础的贪吃蛇游戏,包括定义坐标点、方向、蛇和食物的结构。通过面向过程的C语言实现,逐步构建出能响应用户输入并吃到食物的贪吃蛇。后续文章将深入探讨如何让贪吃蛇变得更智能,并提供专栏链接以供进一步学习。
摘要由CSDN通过智能技术生成

问题描述:

贪吃蛇这个游戏已经是大家都非常熟悉的经典游戏了,我用简短的话概述一下,就是用户使用上、下、左、右四个方向键控制贪吃蛇的运动方向,保证蛇在既不撞墙,又不撞到自己身体的前提下,安全的吃到美味的食物。

起因:

当时无意中我看到了有人做了一个具有一定智能的贪吃蛇,虽然那个贪吃蛇还不够聪明,我当时的想法就是设计完成一个贪吃蛇游戏,让我做出来的这条蛇比我看到的那条更加的聪明。

首先必须要做的:

为了最终让我的蛇具有超高智力,我首先至少先要设计出一条蛇,这条蛇能够在用户输入上、下、左、右四个按键的指导下,吃到食物。

设计思路:

我们先来设计出一条蛇(因为这里我用的是C语言,面向过程,不是C++,面向对象的),所以接下来,我会把蛇的身体看成一个一个的结果,而不是对象。

第1步: 蛇是运动在地图范围内的,而地图是有一个一个坐标点构成的,我们先定义出坐标点的结构:(其中点的x表示行号,y表示列号,均从0开始)

struct Point
{
    int x;
    int y;
};

PS:坐标系的建立,如图

Snake-AI,这是一个用 C/C 语言编写的贪吃蛇游戏的人工智能。AI 的目的是让蛇尽可能的吃更多的食物,直到吃满整个地图。想参与这个项目,请查看todos。Demo使用方法编译与运行:$ make $ make run为了解详细使用方法, 请查看主函数main()算法介绍函数Snake.decideNext(): 计算蛇S1的下一个移动方向D计算从蛇S1的头部到达食物的最短路径P1。派一条与蛇S1完全一样的虚拟蛇S2沿路径P1吃掉食物。计算从蛇S2的头部到其尾部的最长路径P2。如果路径P2存在,将移动方向D设置为路径P1的第一个方向,否则进行步骤4。计算从蛇S1的头部到达其尾部的最长路径P3。如果P3存在,将移动方向D设置为路径P3的第一个方向,否则进行步骤5。将移动方向D设置为离食物最远的方向。函数Map.findMinPath(): 计算两个位置间的最短路径算法建立在BFS的基础上。为了使路径尽可能直,每次遍历邻接点时,在当前移动方向上的位置会被优先遍历。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最短路径,每个位置上的数字表示了从起始位置开始到该位置的最短距离)函数Map.findMaxPath(): 计算两个位置间的最长路径算法建立在DFS与贪心算法的基础上。每次遍历邻接点时,离目标位置最远(使用曼哈顿距离估计)的位置将会被优先遍历到。另外,为了使路径尽可能直,如果两个位置到目标位置的距离相等,在当前移动方向上的位置将被优先遍历到。这个问题是一个NP完全问题,此算法得出的结果路径只是一个近似最长路径。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最长路径,每个位置上的数字表示了从该位置开始到目标位置的估计距离) 标签:Snake
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值