水一帖

好像已经很久没有写过东西了,当然也没什么好写的(毕竟小白一个),所以为了首页的日期更新一下,于是水上一帖。

作为一个本身很无聊的人,为了让自己不无聊总要找些事情来消磨时间,虽然想法很多,但是人却很懒加上小白一个,所以诸多想法里面能消磨时间的就没有多少了。下面这个想法产生在春节前不久,因为年终该做的都做了,就等着放假了,所以很是无聊啊。。。

一个贪食蛇游戏。

好的,做一个贪食蛇游戏。刚开始当然是先在网上找找咯,结果在百度盘里找到了openSUSE吧的吧主@竹葉青絲给羊头@10086_z写的一个贪食蛇的终端版,于是下载来编译玩了玩,不怎么样啊,CPU吃了50%,打开代码一看开了两个线程每个一个死循环。。。于是改了改,改成单线程事件驱动,编译过了却不能正常工作(果然对伪终端不熟啊)。。

接下来,为什么不自己写一个呢,写一个图形界面的,用Qt啊,好歹我还是写过音乐播放器的啊。于是下载安装Qt。既然都Qt5了那干脆就用QML搞界面了,据说QML搞界面最简单了。边看文档边写代码,不久一个可用的版本就诞生了,长下面这样

qml implementation

用方向键控制,撞蛇身或四周就挂掉。然后想到,贪食蛇不是自己会走的吗?我觉得我应该在里面加上一个定时器让它自己走,然后我失败了。

果然QML和C++交互完全没有经验真是搞不定啊,于是目光转投到Qt Widget上来,嘿嘿,这下全是C++来搞不就没问题咯。

… 大概花了一下午,一个功能和之前QML版本一样的Qt Widget版就完工了,依旧没有自动走,因为中午逛贴吧在C++吧看到了一个帖子《智能贪食蛇》(当时把帖子中的代码保存到百度盘了,但是后来再也找不到这个帖子了),由于我没有Windows环境,所以连编译好的程序都不能执行来看看效果,只能先看看源码,不得不说,这源码艳到我了。。。

bad

我看源码的时候心中好似有万头神兽在狂奔,最终,我放弃了阅读这华丽的代码。不过,还是要感谢这位楼主向我展示了A* 这个关键词。

于是,开始了Google,各种博客上都有介绍,也看了些,这里要推荐的是油管的一个视频https://youtu.be/-L-WgKMFuhE。可视化就是好。

在掌握了A*算法后,开始改造现有的这条笨蛇。最后即使在加入自动寻路后,这条蛇也会很快就死掉。后来才发现,竟然是总是寻找最短路径引起的,那么为了让它多活一段时间显然不能总是走最短路径,甚至需要走最长的路径。具体怎么做还是要看代码才行(比较这里是水帖)。最后,这条蛇确实可以多活一些时间了

greedy snake

最后,在油管视频里面看到的那个可视化也顺便搞了一个,毕竟写不了多少代码。 visualization 好了,本次水帖就到这里。