爆款遊戲《貪吃蛇大做戰》的 Python 實現

感受遊戲審覈新政實施後,國內手遊市場略冷清,是否是各家的新遊戲都在排隊等審覈。媒體們除了以前競相追捧《Pokemon Go》熱鬧了一把,彷佛也聽不到什麼聲音了。直到最近幾天,忽然聽見好幾人都提到同一個遊戲,網上還有人表示朋友圈被它刷屏了。(不過如今微信已經悍然屏蔽了它的分享)python

這個遊戲就是如今iOS免費榜排名第一的《貪吃蛇大做戰》。一個簡單到不行的遊戲,也不知道怎麼就火了。反正一款遊戲火了,各路媒體、專家總能說出種種套路來,因此我就不發表意見了。不過這實在是一個挺好實現的遊戲,因而一時技癢,拿 Python 作了一個實現。微信

[](http://crossin-forum.b0.upaiy...函數

demo 花了大約一成天時間,實現了基本效果(沒作加速)。公衆號(crossincode)裏回覆『 貪吃蛇 』可獲取源代碼。學習

使用了 cocos2d-python 做爲遊戲引擎。若是要運行代碼,須要安裝 Python 2.7 和 cocos2d 庫。優化

pip install cocos2d

代碼實現上的幾個難點:spa

  • 運動方向的控制。鍵盤上只有上下左右四個鍵,要轉換到 360 度的運動方向,須要用到很多三角函數運算。
  • 蛇身子的處理。這裏我用了一個路徑列表,記錄蛇頭通過的位置,身子則根據路徑中的對應數據更新位置。
  • 電腦的運動策略。這裏我用的方法是,對於在頭部範圍內的其餘蛇身,計算蛇身與蛇頭連線的角度,和自身的運動方向進行比較,若是角度相差很小,就意味着會撞上,因而調整當前運動方向。
  • 運行效率。最大的效率瓶頸在於屏幕上的圖片繪製。最開始完成的版本,場上蛇身總量達到 300 左右就卡頓嚴重了。後來用 cocos 的 BatchNode 替代直接添加,大大減小了圖片繪製次數,可保證遊戲順暢運行。但若是玩到分鐘很高,依然會出現效率問題,暫時沒有解決。

平心而論,Python 並不適合作商業遊戲,而用來學習或者開發原型倒也是個不錯的選擇。如今很流行的手機遊戲開發引擎 cocos2d-x,最初就是源於 Python 的版本,也就我此次使用的 cocos2d 庫。雖然在功能上有必定差距,但引擎結構是很是接近的,包括其中場景和層的概念、動做、事件、刷新等。.net

只是心血來潮,隨手寫寫,代碼沒怎麼優化,註釋也基本沒有。你們湊合看看。若是點贊、轉發的人多,以後會考慮繼續優化,並專門作一個系列教程。code

公衆號(crossincode)裏回覆『 貪吃蛇 』可獲取 demo 源代碼。教程

其餘文章及回答:遊戲

[](http://crossin-forum.b0.upaiy...

相關文章
相關標籤/搜索