python的ai写作_神奇,用Python写一个AI贪吃蛇,真的可以追着你跑的那种
語言選擇
Life is short, use python! 所以,根本就沒多想,直接上python。
最初版本
先讓你的程序跑起來
一開始我的目標僅僅是讓程序去控制貪吃蛇運動,讓它去吃食物,僅此而已。現在讓我們來陳述一下最初的問題:
在一個矩形中,每一時刻有一個食物,貪吃蛇要在不撞到自己的條件下,
找到一條路(未必要最優),然后沿著這條路運行,去享用它的美食
我們先不去想蛇會越來越長這個事實,問題基本就是,給你一個起點(蛇頭)和一個終點( 食物),要避開障礙物(蛇身),從起點找到一條可行路到達終點。我們可以用的方法有:
BFS
DFS
A*
為了盡量保持簡單,我用的是curses模塊,直接在終端進行繪圖。
S形運動也是無法讓貪吃蛇避免死亡的命運。貪吃蛇可以靠S形運動多存活一段時間,可是由于它的策略是:
while沒有按下ESC鍵:if蛇與食物間有路徑:走起,吃食物去else:Wander一段時間
為了能讓蛇活得久一些,它還要更高瞻遠矚才行。
高瞻遠矚版本
我們現在已經有了一個比較低端的版本,而且對問題的認識也稍微深入了一些。現在可以進行一些比較慎密和嚴謹的分析了。
把思路理一理 蛇在運動的過程中,消耗蛇身, 蛇尾后面總是不斷地出現新的空間,蛇一長, 就會發現,要想活下來,基本就只能追著蛇尾跑了。(下圖 0代表食物,數字代表該位置到達食物的距離,+號代表蛇頭,*號代表蛇身, -號代表蛇尾,#號代表空格,外面的一圈#號代表圍墻)
## # # # # ##0 1 2 3 4##1 2 3# 5 ##2 3 4 - 6##3 + * * 7##4 5 6 7 8### # # # # #
OK,繼續。真蛇派出虛擬蛇去探路后,發現吃完食物后的布局是安全的。那么, 真蛇就直奔食物了。
上面列的好幾個問題里都涉及到蛇的行走策略,蛇的行走策略主要分為兩種:
1. 目標是食物時,走最短路徑2. 目標是蛇尾時,走最長路徑
那第三種情況呢?與食物和蛇尾都沒路徑存在的情況下, 這個時候本來就只是挑一步可行的步子來走,最短最長關系都不大了。
上面還提到一個問題:因為食物是隨機出現的,有沒可能出現無解的局面?答案是:有。我運行了程序,然后把每一次布局都輸出到log,發現會有這樣的情況:
## # # # # ##* * * * *##* * - 0 *##* *# + * ##* * * * *##* * * * *### # # # # #
其中,+號是蛇頭,-號是蛇尾,*號是蛇身,0是食物,#號代表空格,外面一圈# 號代表墻。這個布局上,食物已經在蛇頭面前了,可是它能吃嗎?不能!因為它吃完食物后,長度加1,蛇頭就會把0的位置填上,布局就變成:
## # # # # ##* * * * *##* * - + *##* *# * * ##* * * * *##* * * * *### # # # # #
由于食物是隨機出現的,所以有可能出現上面這種無解的布局。當然了, 你也可以得到完滿的結局,貪吃蛇把整個矩形都填充滿。
矩形大小10*20,除去外面的邊框,也就是8*18。Linux下錄完屏再轉成GIF格式的圖片, 優化前40多M,真心是沒法和Windows的比。用下面的命令優化時, 有一種系統在用生命做優化的感覺:
convertoutput.gif-fuzz10%-layersOptimizeoptimised.gif
最后還是拿到Windows下用AE,三下五除二用圖片序列合成的動態圖片 (記得要在format options里選looping,不然圖片是不會循環播放的)
有什么問題歡迎大家評論區留言討論,支持小編的可以關注一下,以后還會分享更多的好玩的東西給大家,也歡迎大家一起學習哦~
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python的ai写作_神奇,用Python写一个AI贪吃蛇,真的可以追着你跑的那种的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么保存文件代码_Pytho
- 下一篇: 文献引用的标准格式_论文参考文献格式标准