前言
这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏,
估计大部分人都
玩过。但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了。
问题的关键在
于,
图片中的贪吃蛇真的很贪吃
XD
,
它把矩形中出现的食物吃了个遍,
然后华丽丽地把整
个矩形填满,真心是看得赏心悦目。作为一个
CSer
,
第一个想到的是,这东西是写程序实
现的
(
因为,一般人干不出这事。
果断是要让程序来干的
)
第二个想到的是,写程序该如何
实现,
该用什么算法?
既然开始想了,
就开始做。
因为
Talk is cheap
,
要
show me the code
才行。
(
从耗子叔那学来的
)
开始之前,让我们再欣赏一下那只让人涨姿势的贪吃蛇吧:
语言选择
Life is short, use python!
所以,根本就没多想,直接上
python
。
最初版本
先让你的程序跑起来
首先,我们第一件要做的就是先不要去分析这个问题。
你好歹先写个能运行起来的贪吃蛇
游戏,然后再去想
AI
部分。这个应该很简单,
c\c++
也就百来行代码
(
如果我没记错的话。
不弄复杂界面,直接在控制台下跑
)
,
python
就更简单了,去掉注释和空行,
5
、
60
行代码
就搞定了。而且,最最关键的,
这个东西网上肯定写滥了,你没有必要重复造轮子,
去弄
一份来按照你的意愿改造一下就行了。
简单版本
我觉得直接写
perfect
版本不是什么好路子。因为
perfect
版本往往要考虑很多东西,
直接
上来就写这个一般是
bug
百出的。
所以,
一开始我的目标仅仅是让程序去控制贪吃蛇运动,
让它去吃食物,仅此而已。
现在让我们来陈述一下最初的问题:
在一个矩形中,
每一时刻有一个食物,贪吃蛇要在不撞到自己的条件下,
找到一条路
(
未必
要最优
)
,然后沿着这条路运行,去享用它的美食
我们先不去想蛇会越来越长这个事实,问题基本就是,给你一个起点
(
蛇头
)
和一个终点
(
食
物
)
,要避开障碍物
(
蛇身
)
,从起点找到一条可行路到达终点。
我们可以用的方法有:
BFS
DFS
A*
只要有选择,
就先选择最简单的方案,
我们现在的目标是要让程序先跑起来,
优化是后话。