App下載

Python實(shí)現(xiàn)AI版貪吃蛇

猿友 2018-08-09 18:14:00 瀏覽數(shù) (7098)
反饋

本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個(gè)人專(zhuān)欄

下載W3Cschool手機(jī)App,0基礎(chǔ)隨時(shí)隨地學(xué)編程>>戳此了解

導(dǎo)語(yǔ)

利用Python簡(jiǎn)單地實(shí)現(xiàn)AI版的貪吃蛇。。。

just for fun...

沒(méi)有用深度學(xué)習(xí)。。。

算法是由一個(gè)叫Hawstein的人在好多好多年以前提出,感覺(jué)很有趣,就花了點(diǎn)時(shí)間復(fù)現(xiàn)了一下他的想法。。。

至于效果。。。

看臉。。。

真的只是覺(jué)得他的想法很有趣,僅此而已,因?yàn)槿绻阆胱屔邫C(jī)械地充滿(mǎn)整個(gè)空間,只需要讓蛇一直走S就好了,但是這就變得很無(wú)趣了。。。


相關(guān)文件

百度網(wǎng)盤(pán)下載鏈接: https://pan.baidu.com/s/1KPAV6FKLUFj11myoVjzQ2Q

密碼: gb7k


主要思路

(1)蛇每走一步,就使用BFS計(jì)算游戲界面中每個(gè)位置(蛇身除外)到達(dá)食物的最短路徑長(zhǎng);

(2)將蛇的安全定義為蛇是否可以跟著蛇尾運(yùn)動(dòng),即蛇頭和蛇尾間是否存在路徑;

(3)蛇每次行動(dòng)前先利用虛擬的蛇進(jìn)行探路,若虛擬的蛇吃完食物后是安全的,真蛇才行動(dòng);

(4)若蛇和食物之間不存在路徑或者吃完食物后并不安全,就跟著蛇尾走;

(5)若蛇和食物之間、蛇和蛇尾之間均不存在路徑,就隨便挑一步可行的來(lái)走;

(6)保證目標(biāo)是食物時(shí)蛇走最短路徑,目標(biāo)是蛇尾時(shí)蛇走最長(zhǎng)路徑。

不足之處

由于食物是隨機(jī)出現(xiàn)的,若虛擬的蛇跑一遍發(fā)現(xiàn)去吃食物是不安全的,真蛇就不會(huì)去吃食物,而是選擇追著蛇尾跑,若一直如此,就陷入了死循環(huán),蛇一直追著蛇尾跑跑跑。。。

直到你終止游戲?yàn)橹埂??!?/p>


開(kāi)發(fā)工具

Python版本:3.5.4

相關(guān)模塊:

pygame模塊以及一些Python自帶的模塊。


環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。


運(yùn)行方式

在cmd窗口運(yùn)行AI_snake.py文件即可。


結(jié)果展示

動(dòng)圖一直上傳失敗。。。

所以隨便截幾個(gè)圖吧~~~


更多

(1)為了保證代碼簡(jiǎn)單易懂,所提供的代碼冗余度較高(比如進(jìn)行了不必要的重復(fù)計(jì)算),有興趣者可對(duì)代碼進(jìn)行優(yōu)化;

(2)相關(guān)文件中也提供了普通版本的貪吃蛇游戲(Normal_snake.py)。

3 人點(diǎn)贊