Perl看完这个,再不敢说自己会玩贪吃蛇

  某天闲逛时看见一副动图:

    

  真的是非常贪吃,各种拐弯各种吃,感觉十分有趣。

  用Perl来实现自动吃满,蓄谋已久,之前的字符贪吃蛇、深度优先算法、A*算法,都是为此篇做铺垫。

  

  那么,怎样让蛇不吃到自己呢?

  1、让蛇按照我们设计好的路线行进,在一个N*M(N、M均为偶数,奇数不讨论)的游戏区域,设计好路线如下:

    

    当花儿谢了,果子熟透,春夏秋冬一个轮回后,蛇终于吃满了。。。

  2、假设蛇总是追着自己的尾巴跑,那么永远不会死;然而,这没什么鸟用,我们需要的是一条“贪吃”的蛇。

  3、在2上稍稍改进,吃完食物后再追着尾巴,嗯,已经很接近了。但是问题来了:怎么吃到食物?吃到食物后被围死怎么办?

  其实我的想法就是解决3中的问题:

  1、使用A*算法计算到食物的最短路径

  2、模拟吃到食物后的场景,能否回到蛇尾;能--吃食物,不能--继续追着尾巴,重复1、2

  3、如果无法回到尾巴,保持当前移动方向(认命吧,要挂的节奏)

  伪码如下:

#    while( 存活 && 未吃满){
#        计算蛇头到食物的路径
#        if( 有蛇头到食物的路径 ){
#            模拟吃到食物后的场景
#            计算是否有路径到达蛇尾
#            if( 有路径 ){
#                执行蛇头到食物的路径
#            }
#            else{  # 没有到蛇尾的路径
#                next
#            }
#        }
#       找出当前可行方向追逐蛇尾
#    }
#    if(吃满){
#        显示:祝贺
#    }
#    else{
#        显示:wtf ?
#    }

  模拟吃到食物后的场景:使用A*计算路径,并创建一条“影子蛇”用来模拟吃到食物后的状态

  计算是否有路径到达蛇尾:和“追逐蛇尾”方法类似,也可使用A*

  找出当前可行方向追逐蛇尾:

    由于移动时尾巴会变动,未尝试A*,使用指定方向深度优先搜索算法

    伪码如下:

sub trace_tail{
    @moves=grep{可行};
    foreach(@moves){
        next if(下一步越界 || 吃到自己)
        unshift @feasible,$_ if(远离食物)
        其他方向 push @feasible
    }
    foreach(@feasible){
        next_move=cur_move+$_
        指定方向优先探索
        next_move的反向上一步设为不可通过
        每走一步,从蛇尾开始设未经过;每原路返回一次,当前位置的蛇身设不可通过
        if(有路径)return 1
    }
    执行完毕无路径,return cur_move
}

  

  运行如下:

    

  实际上还是会被困死,虽然追逐尾巴时避开食物优先,但唯一路径可能会出现食物,不吃也得吃了。

  代码较乱,准备加好注释后贴上来。

  

时间: 2024-08-04 22:30:51

Perl看完这个,再不敢说自己会玩贪吃蛇的相关文章

如果是初学C语言请看完 一些成功人士的心得

转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了. C语言程序设计是我们的专业基础课,但是C语言本身却是

[转载]如果是初学C语言请看完一些成功人士的心得

如果是初学C语言请看完一些成功人士的心得 转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了. C语言程序

看完final的感受

今天没课,(其实是有体育课的,去打了一会球就跑路了...)就在宿舍看world final ; 我去,老毛子真是好厉害,看的我目瞪口呆,哈喇子直流; 上交的大神好厉害,本来还以为上交要夺冠的,最后罚时多了420s,好可惜啊啊啊,心疼上交420s; 总之来说看完final的感受就是,哇,大神们都好厉害,好崇拜哟...我怎么这么菜鸡,连题都读不懂; 嗯...直播的时候听说大神们训练都超刻苦,再想想自己这三天打鱼两天晒网的状态和弱鸡的智商也就...

傻瓜看完都可以简单使用Git

作为当下最流行的版本控制系统,Git是一个分布式版本控制系统,跟SVN等集中式版本控制有很多使用上的不同.万事开头难,想要最快学会使用Git,最简单的就是下了客户端就直接去用,一边用一边学.本文手把手教你从对Git一无所知,到简单使用. 转载请注明出处http://www.cnblogs.com/zrtqsk/p/3762489.html,谢谢! 一.安装 这里假设你跟楼主一样使用Windows系统,首先当然是去下载一个Git客户端,Git在Windows下的客户端叫做msysgit,下载地址为

你根本不知道的冷知识,看完我惊呆了,原来.....

有些冷知识,非常的有趣,而且说不定就是之后与人交流的谈资,所以,这些必须收藏. 历史文学 1. 朱熹一辈子不吃豆腐 3.方孝儒是中国历史上唯一一个被"株十族"的人 4.猫是<圣经>里唯一没有提到的家养动物 5.埃及金字塔四面均为等边三角形,正对东南西北四个方位 6.条条大路通罗马的原因如图: 科学百科 1. 兔子不会流汗 2.玫瑰和苹果属同科,百合和大葱属同科 3.一张纸不能对折8次 4.北极熊是左撇子 5. dreamt 是唯一以"mt"结尾的英文单词

原地打方向原来很伤车?看完还敢吗?

原地打方向原来很伤车?看完还敢吗? http://auto.sohu.com/20160818/n465238431.shtml 经常有不少朋友在车辆掉头时,为了省事也好,或者是为了减小车辆的转弯半径,习惯性的原地打方向,长此以往,就养成坏习惯,其实这种的做法是很伤车的. 原地打方向对车辆都有什么样的伤害? 一 影响轮胎寿命 原地打方向时由于车轮没有转动,尤其是前轮在承受着车身重量的同时还要移动转向,这无疑将增加对轮胎表面的磨损,减少轮胎使用寿命.轮胎磨损,受力不均匀,就造成轮胎胎面受损程度不同

一个优秀团队是怎么散伙的?看完后感受很深!

那天,靠近河边的丛林突起大火,并迅速蔓延到整个绿地.聪明的狮子和猫头鹰见势不妙,不是跑了就是飞了:无情的大火吞噬着蟑螂.蜘蛛,以及飞不远的苍蝇和蝉,而且一群蚂蚁也被大火包围. 来自四面八方的蚂蚁突然迅速聚集,抱成一团向河边滚去.外层的蚂蚁被活活烧死,但直到烧焦它们也不离开自己的岗位,一直坚守到冲向河流.河面泛起一大片被烧焦了的蚂蚁,但大部分蚂蚁却因此获救. 看着蚂蚁如此惨烈的壮举,返回的狮子有些感动.它认为,蚂蚁世界里来自群体成员中精诚合作的"快捷且难以抗拒的"力量,是蚂蚁战胜自然及众

看完那些年

想过比较煽情,但没想到这么煽情. 11年拍的,14年才看,不是认为电影不好,而是认为情节可能会落于俗套,无非就是帅哥邂逅美女然后一段佳话或遗憾云云.之所以看,是因为昨晚刚完成了本年度算那么点成就感的事情… 来到暴风,一一浏览,同桌的你,9.0.那些年,9.6.一直感觉暴风的评分还是挺公正的,毕竟评分人多,加之邻居家孩子一直在耳边吹风:同桌的你是部绝对值得看的作品.索性,看了那些年. 幕一:周期不调的英语老师 故事开头,是几个人叫柯腾因为一件和结婚有关的事,但不知主角是否新郎,也因此埋下悬念.郝邵

看完WWDC2014一个字 cool

悲催的人生啊! 我刚刚转向O-C 库克就告诉我燕子要来了,我当时只想哭,真的. 想说看了锤子的发布会再看apple的 ,恩 ,简直就是小学生跟教授的差距. 首先,扁平化,很难理解科技巨头们也像小学生校园里一样,一个孩子玩溜溜球全校都开始玩溜溜球,我有点不理解界面多样性挺好的,干嘛都往扁平化靠呢.当然我个人挺喜欢扁平化的,我信奉简单有效,越少就是越多. 对iCloudkit很感兴趣,服务端架设在云中真是美妙,不过网速是个砍啊在中国. 看到AirDrop终于在devices上面互通加上竟然能在mac