【phanium源码】【刺客帝国引擎源码】【文件上传分享源码】curses 源码

2024-11-25 04:51:37 来源:惠州到郑州源码 分类:知识

1.如何用Python写一个贪吃蛇AI
2.Linux上如何安装使用音乐软件SoundCloud
3.ranger的介绍

curses 源码

如何用Python写一个贪吃蛇AI

       如何用Python写一个贪吃蛇AI

       前言

       最近在网上看到一张让人涨姿势的源码,中展示的源码是贪吃蛇游戏,估计大部分人都玩过。源码但如果仅仅是源码贪吃蛇游戏,那么它就没有世差含什么让人涨姿势的源码地方了。问题的源码phanium源码关键在于,中的源码贪吃蛇真的很贪吃XD,它把矩形中出现的源码食物吃了个遍,然后华丽丽地把整个矩形填满,源码真心是源码看得赏心悦目。作为一个CSer,源码第一个想到的源码是,这东西是源码写程序实现的(因为,一般人干不出这事。源码果断是源码要让程序来干的)第二个想到的是,写程序该如何实现,该用什么算法?既然开始想了,就开始做。因为Talk is cheap,要show me the code才行。 (从耗子叔那学来的)开始之前,让我们再欣赏一下那只让人涨姿势的贪吃蛇吧:(如果下面的动态浏览效果不佳的话,可以右键保存下来查看)

       语言选择

       Life is short, use python!所以,根本就没多想,直接上python。最初版本先让你的程序跑起来首先,我们第一件要做的就是先不要去分析这个问题。你好歹先写个能运行起来的贪吃蛇游戏,然后再去想AI部分。这个应该很简单,刺客帝国引擎源码cc++也就百来行代码(如果我没记错的话。不弄复杂界面,直接在控制台下跑),python就更简单了,去掉注释和空行,5、行代码就搞定了。而且,最最关键的,这个东西网上肯定写滥了,你没有必要重复造轮子,去弄一份来按照你的意愿改造一下就行了。

       简单版本

       我觉得直接写perfect版本不是什么好路子。因为perfect版本往往要考虑很多东西,直接上来就写这个一般是bug百出的。所以,一开始我的目标仅仅是让程序去控制贪吃蛇运动,让它去吃食物,仅此而已。现在让我们来陈述一下最初的问题:

       在一个矩形中,每一时刻有一个食物,贪吃蛇要在不撞到自己的条件下,找到一条路(未必要最优),然后沿着这条路运行,去享用它的美食。

       我们先不去想蛇会越来越长这个事实,问题基本就是,给你一个起点(蛇头)和一个终点(食物),要避开障碍物(蛇身),文件上传分享源码从起点找到一条可行路到达终点。

       我们可以用的方法有:BFSDFSA*只要有选择,就先选择最简单的方案,我们现在的目标是要让程序先跑起来,优化是后话。so,从BFS开始。我们最初将蛇头位置放入队列,然后只要队列非空,就将队头位置出队,然后把它四领域内的4个点放入队列,不断地循环操作,直到到达食物的位置。这个过程中,我们需要注意几点:

       1.访问过的点不再访问。

       2.保存每个点的父结点(即每个位置是从哪个位置走到它的,这样我们才能把可行路径找出来)。

       3.蛇身所在位置和四面墙不可访问。

       通过BFS找到食物后,只需要让蛇沿着可行路径运动即可。这个简单版本写完后,贪吃蛇就可以很欢快地运行一段时间了。看图吧:(不流畅的感觉来自录屏软件@_@)

       为了尽量保持简单,我用的是curses模块,直接在终端进行绘图。从上面的动态可以看出,每次都单纯地使用BFS,最终有一天,贪吃蛇会因为这种不顾后果的图像平移源码使用短视行为而陷入困境。而且,即使到了那个时候,它也只会BFS一种策略,导致因为当前看不到目标(食物),认为自己这辈子就这样了,破罐子破摔,最终停在它人生中的某一个点,不再前进。(我好爱讲哲理XD)

       BFS+Wander

       上一节的简单版本跑起来后,我们认识到,只教贪吃蛇一种策略是不行的。它这么笨一条蛇,你不多教它一点,它分分钟就会挂掉的。所以,我写了个Wander函数,顾名思义,当贪吃蛇陷入困境后,就别让它再BFS了,而是让它随便四处走走,散散心,思考一下人生什么的。这个就好比你困惑迷茫的时候还去工作,效率不佳不说,还可能阻碍你走出困境;相反,这时候你如果放下手中的工作,停下来,出去旅个游什么的。回来时,网络测速php源码说不定就豁然开朗,土地平旷,屋舍俨然了。Wander函数怎么写都行,但是肯定有优劣之分。我写了两个版本,一个是在可行的范围内,朝随机方向走随机步。也就是说,蛇每次运动的方向是随机出来的,总共运动的步数也是随机的。Wander完之后,再去BFS一下,看能否吃到食物,如果可以那就皆大欢喜了。如果不行,说明思考人生的时间还不够,再Wander一下。这样过程不断地循环搜笑进行。可是就像“随机过程随机过”一样,你“随机Wander就随机挂”。会Wander的蛇确实能多走好多步。可是有一天,它就会把自己给随机到一条死路上了。陷入困境还可以Wander,进入死胡同,那可没有回滚机制。所以,第二个版本的Wander函数,我就让贪吃蛇贪到底。在BFS无解后,告诉蛇一个步数step(随机产生step),让它在空白区域以S形运动step步。这回运动方向就不随机了,而是有组织有纪律地运动。先看图,然后再说说它的问题:

       没错,最终还是挂掉了。S形运动也是无法让贪吃蛇避免死亡的命运。贪吃蛇可以靠S形运动多存活一段时间,可是由于它的策略是:

       

       1. 目标是食物时,走最短路径

       2. 目标是蛇尾时,走最长路径

       那第三种情况呢?与食物和蛇尾都没路径存在的情况下,这个时候本来就只是挑一步可行的步子来走,最短最长关系都不大了。至于人为地让蛇走S形,我觉得这不是什么好策略,最初版本中已经分析过它的问题了。 (当然,除非你想使用最最无懈可击的那个版本,就是完全不管食物,让蛇一直走S,然后在墙边留下一条过道即可。这样一来,蛇总是可以完美地把所有食物吃完,然后占满整个空间,可是就很boring了。没有任何的意思)

       上面还提到一个问题:因为食物是随机出现的,有没可能出现无解的布局?答案是:有。我运行了程序,然后把每一次布局都输出到log,发现会有这样的情况:

       

       # # # # # # #

       * * * * * #

       * * - 0 * #

       * * # + * #

       * * * * * #

       * * * * * #

       # # # # # # #

       其中,+号是蛇头,-号是蛇尾,*号是蛇身,0是食物,#号代表空格,外面一圈#号代表墙。这个布局上,食物已经在蛇头面前了,可是它能吃吗?不能!因为它吃完食物后,长度加1,蛇头就会把0的位置填上,布局就变成:

       

       # # # # # # #

       * * * * * #

       * * - + * #

       * * # * * #

       * * * * * #

       * * * * * #

       # # # # # # #

       此时,由于蛇的长度加1,蛇尾没有动,而蛇头被自己围着,挂掉了。可是,我们却还有一个空白的格子#没有填充。按照我们之前教给蛇的策略,面对这种情况,蛇头就只会一直追着蛇尾跑,每当它和食物有路径时,它让虚拟的蛇跑一遍发现,得到的新布局是不安全的,所以不会去吃食物,而是选择继续追着蛇尾跑。然后它就这样一直跑,一直跑。死循环,直到你按ESC键为止。由于食物是随机出现的,所以有可能出现上面这种无解的布局。当然了,你也可以得到完满的结局,贪吃蛇把整个矩形都填充满。上面的最后一个问题,暴力法是否能得到最优序列。从上面的分析看来,可以得到,但不能保证一定得到。最后,看看高瞻远瞩的蛇是怎么跑的吧:

       矩形大小*,除去外面的边框,也就是8*。Linux下录完屏再转成GIF格式的,优化前多M,真心是没法和Windows的比。用下面的命令优化时,有一种系统在用生命做优化的感觉:

       Shell

       convert output.gif -fuzz % -layers Optimize optimised.gif

       最后还是拿到Windows下用AE,三下五除二用序列合成的动态 (记得要在format options里选looping,不然是不会循环播放的)

       Last but not least如果对源代码感兴趣,请戳以下的链接:

       Code goes here

       另外,本文的贪吃蛇程序使用了curses模块,类Unix系统都默认安装的,使用Windows的童鞋需要安装一下这个模块,送上地址:

       需要curses请戳我

       以上的代码仍然可以继续改进(现在加注释不到行,优化一下可以更少),

Linux上如何安装使用音乐软件SoundCloud

       对于喜欢音乐的朋友来说,SoundCloud是个不错的音乐软件,SoundCloud是德国的网站,现在也有客户端了,在Linux安装SoundCloud后,就能够在命令行中播放音乐,下面小编就给大家介绍下Linux安装SoundCloud的方法。

安装

       对于Debian或者Ubuntu用户,如下安装:

       $ sudo apt-get install portaudio-dev libmpg-dev libncurses-dev ruby1.9.1-dev

       $ sudo gem install soundcloud

       对于Archlinux用户,在AUR仓库中可以获取到包

       对于Fedora用户,如下安装:

       $ sudo yum install portaudio-devel libmpg-devel ncurses-devel ruby-devel

       $ sudo gem install soundcloud

       对于CentOS用户,安装或者升级到最新 Ruby/RubyGems (1.9或更高),启用Repoforge repo,如下安装:

       $ sudo yum install portaudio-devel mpg-devel

       $ sudo gem install curses soundcloud

       最后,到官方的github页面获取源码

使用

       Soundcloud非常容易使用。有些人甚至会说简单。我喜欢它的庄重以及三位作者和贡献者的努力。如下启动它:

       $ soundcloud

       这里,你将看到一个闪屏:

           接着是歌曲列表:

           您可以通过上下键滚动列表,回车播放一首歌曲,空格键是暂停/恢复,左右箭头键是快进/快退。正如你所看到的,没有什么突破性的但绝对符合人体工程学。

       如果随机列表太长无法滚动完,你有一个选项来查看所有曲目,用户通过点击‘u’键接着输入自己的名字。

           这可能是Soundcloud的主要缺陷之一。虽然导航没有优化过,但是我对这个很年轻的软件的改善和支持还是寄予厚望的。

       奖励

       另外一个额外的奖励:如果你喜欢在终端上使用SoundCloud的想法,但不想安装任何额外的软件(也许你不能),我劝你去cmd.fm。该网站是一个伪装的SoundCloud,它隐藏在一个shell界面后。

           输入“help”可以得到命令列表,这比Soundcloud长很多。比如,我看到:

       _genres 列出所有流派

       _play random 随机播放

       _pause 暂停播放

       _playlist new 建立新的播放节目单

       _loop 循环播放

       _cinema 如同星球大战一样的字幕

       它甚至支持通过tab键自动补完流派名称

       最后,Soundcloud的确是一个整洁的程序。我们可以原谅其目前的缺陷,因为它还年轻。我真的希望它会成长,并包含更多的功能(并从潜在的cmd.fm得到的灵感)。

       上面就是Linux安装SoundCloud的方法介绍了,SoundCloud是广大网友分享音乐的平台,你能够在上面分享自己录制的歌曲,也能收听别人的歌曲,是个不错的软件。

ranger的介绍

       ranger是一个以GPL许可证发放源码,默认使用VIM风格键盘绑定、curses图形库,基于字符终端的文件管理器,是自由免费软件。

本文地址:http://5o.net.cn/html/4f253297463.html 欢迎转发