Python 實(shí)現(xiàn) 貪吃蛇大作戰(zhàn) 代碼分享
感覺游戲?qū)徍诵抡?shí)施后,國內(nèi)手游市場略冷清,是不是各家的新游戲都在排隊(duì)等審核。媒體們除了之前競相追捧《Pokemon Go》熱鬧了一把,似乎也聽不到什么聲音了。直到最近幾天,突然聽見好幾人都提到同一個(gè)游戲,網(wǎng)上還有人表示朋友圈被它刷屏了。(不過現(xiàn)在微信已經(jīng)悍然屏蔽了它的分享)
這個(gè)游戲就是現(xiàn)在iOS免費(fèi)榜排名第一的《貪吃蛇大作戰(zhàn)》。一個(gè)簡單到不行的游戲,也不知道怎么就火了。反正一款游戲火了,各路媒體、專家總能說出種種套路來,所以我就不發(fā)表意見了。不過這實(shí)在是一個(gè)挺好實(shí)現(xiàn)的游戲,于是一時(shí)技癢,拿 Python 做了一個(gè)實(shí)現(xiàn)。
【動(dòng)圖】
demo 花了大約一整天時(shí)間,實(shí)現(xiàn)了基本效果(沒做加速)。代碼已上傳 GitHub:
GitHub - crossin/gluttonous: game of gluttonous python(仿制《貪吃蛇大作戰(zhàn)》)
使用了 cocos2d-python 作為游戲引擎。如果要運(yùn)行代碼,需要安裝 Python 2.7 和 cocos2d 庫。
pip install cocos2d
代碼實(shí)現(xiàn)上的幾個(gè)難點(diǎn):
運(yùn)動(dòng)方向的控制。鍵盤上只有上下左右四個(gè)鍵,要轉(zhuǎn)換到 360 度的運(yùn)動(dòng)方向,需要用到不少三角函數(shù)運(yùn)算。
蛇身子的處理。這里我用了一個(gè)路徑列表,記錄蛇頭經(jīng)過的位置,身子則根據(jù)路徑中的對(duì)應(yīng)數(shù)據(jù)更新位置。
電腦的運(yùn)動(dòng)策略。這里我用的方法是,對(duì)于在頭部范圍內(nèi)的其他蛇身,計(jì)算蛇身與蛇頭連線的角度,和自身的運(yùn)動(dòng)方向進(jìn)行比較,如果角度相差很小,就意味著會(huì)撞上,于是調(diào)整當(dāng)前運(yùn)動(dòng)方向。
運(yùn)行效率。最大的效率瓶頸在于屏幕上的圖片繪制。最開始完成的版本,場上蛇身總量達(dá)到 300 左右就卡頓嚴(yán)重了。后來用 cocos 的 BatchNode 替代直接添加,大大減少了圖片繪制次數(shù),可保證游戲順暢運(yùn)行。但如果玩到分鐘很高,依然會(huì)出現(xiàn)效率問題,暫時(shí)沒有解決。
平心而論,Python 并不適合做商業(yè)游戲,而用來學(xué)習(xí)或者開發(fā)原型倒也是個(gè)不錯(cuò)的選擇。現(xiàn)在很流行的手機(jī)游戲開發(fā)引擎 cocos2d-x,最初就是源于 Python 的版本,也就我這次使用的 cocos2d 庫。雖然在功能上有一定差距,但引擎結(jié)構(gòu)是非常接近的,包括其中場景和層的概念、動(dòng)作、事件、刷新等。
只是心血來潮,隨手寫寫,代碼沒怎么優(yōu)化,注釋也基本沒有。大家湊合看看。如果點(diǎn)贊、轉(zhuǎn)發(fā)的人多,之后會(huì)考慮繼續(xù)優(yōu)化,并專門做一個(gè)系列教程。
相關(guān)文章
python GUI庫圖形界面開發(fā)之PyQt5單行文本框控件QLineEdit詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5單行文本框控件QLineEdit詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)序負(fù)荷預(yù)測
這篇文章主要為大家介紹了PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)間序列預(yù)測及負(fù)荷預(yù)測,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05keras模型可視化,層可視化及kernel可視化實(shí)例
今天小編就為大家分享一篇keras模型可視化,層可視化及kernel可視化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python實(shí)現(xiàn)多線程網(wǎng)頁下載器
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)一個(gè)多線程網(wǎng)頁下載器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04python實(shí)現(xiàn)發(fā)送和獲取手機(jī)短信驗(yàn)證碼
這篇文章主要介紹了python實(shí)現(xiàn)發(fā)送和獲取手機(jī)短信驗(yàn)證碼的相關(guān)資料,講解了python如何解決接口測試獲取手機(jī)驗(yàn)證碼問題,感興趣的小伙伴們可以參考一下2016-01-01關(guān)于命令行執(zhí)行Python腳本的傳參方式
這篇文章主要介紹了關(guān)于命令行執(zhí)行Python腳本的傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09使用python編寫腳本獲取手機(jī)當(dāng)前應(yīng)用apk的信息
使用aapt工具獲取apk的信息,保存至腳本所在目錄下的PackageInfo.txt文件中,需要的朋友可以參考下2014-07-07pandas創(chuàng)建series的三種方法小結(jié)
這篇文章主要介紹了pandas創(chuàng)建series的三種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05