python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
Free Python Games非常適合學生,它不僅具有高度的組織性和靈活性,而且能夠激發人們探索和理解能力。--Terri Furton
Free Python Games在輕松的環境中把游戲和學習結合在一起,從而減輕了編程過程中的壓力。--Brett Bymaster
...
貪吃蛇、迷宮、吃豆人、掃雷、Flappy Bird...這些游戲可以是非常經典,甚至伴隨著很多人的童年回憶。那么,你是否想過自己開發一款專屬游戲?是否思考過開發這樣一款游戲需要多少工作量?
游戲開發在互聯網行業算是一個門檻較高的方向,因此,對于非專業的游戲開發者來說,開發一款游戲一直是一件讓人望而卻步的事情,遙不可及。
那么,今天要介紹的這款Python項目就可以輕松實現你成為游戲開發者的想法,實現前面提到的這些經典游戲只需要50-100代碼即可完成。
free-python-games
兩年前,我姐就曾表達了希望我能夠抽空教外甥學習編程的想法。對于這份囑托,我一直放在心上,但是卻遲遲找不到合適的方向。
- 該從哪個方向著手教一個孩子學習編程?
- 怎么提升一個小孩子對編程的興趣?
即便是從事幾年互聯網行業的我來說都對編程都覺得枯燥乏味,何況一個一無所知的孩子呢?
但是,free-python-games這個項目讓我眼前一亮,終于找到了一個合適的Python學習項目。當年,它對于成年人同樣適用、有價值。
我之所以介紹這款項目,不單單是它實現了讓人回到童年的經典游戲。更重要的原因是它能夠作為一個Python學習、鍛煉探索和理解能力的一款好工具。
free-python-games和我們接觸的大多數Python庫那樣讓人如同壘積木一樣去實現一項功能不同,你需要去靜下心來死鎖一款游戲的主題,同時需要去實現游戲中的每一個策略。
我覺得這樣比拿來即用的搬運工作要有趣很多,且更加具有挑戰。
以我們熟知的貪吃蛇為例,當然我們目前對于這款游戲的主題和玩法已經非常清楚了,通過方向鍵控制蛇的移動,每當吃到一顆食物蛇就會變長,如果撞到墻則游戲結束...
那么,對這款游戲進行拆解,就需要思考幾個問題:
- 如何使蛇加速和減速?
- 如何使蛇繞過邊緣?
- 如何分配新產生食物的位置?
- 游戲中的蛇如何根據鍵盤操作做出相應的反應?
看到這里你就會發現,它并不像我們大多數情況下使用Python那樣,np.linespace、plt.plot、tf.Session,它更像是LeetCode上面的算法題,需要你從零開始去實現一款游戲,用心去思考游戲實現過程中的每個細節。而在這個過程中對人的提升會非常迅速。
下面就以貪吃蛇這個游戲為例,介紹它的源碼和實現過程,來回答上述4個問題。
首先,導入需要的模塊,
from?turtle?import?*from?random?import?randrange
from?freegames?import?square,?vector
其中turtle是一款繪圖工具,主要為了實現游戲的前端和用戶交互功能,freegames包含了一些開發游戲會用到的基本元素,random是Python中用于生成隨機數的庫,在生產新食物的過程中會遇到(回憶一下,當蛇吃了一顆食物后,會在窗口內隨機產生一顆食物)。
然后,就初始化一些變量,分別用于存儲食物、蛇的狀態,
food?=?vector(0,?0)snake?=?[vector(10,?0)]
aim?=?vector(0,?-10)
下面就是初始化蛇的位置,已經定義蛇對于鍵盤方向鍵的響應,朝著指定的方向移動,
def?change(x,?y):????"Change?snake?direction."
????aim.x?=?x
????aim.y?=?y
setup(420,?420,?370,?0)
hideturtle()
tracer(False)
listen()
onkey(lambda:?change(10,?0),?'Right')
onkey(lambda:?change(-10,?0),?'Left')
onkey(lambda:?change(0,?10),?'Up')
onkey(lambda:?change(0,?-10),?'Down')
接下來,我們需要判斷蛇是否在邊界框以內,如果在,則繼續移動,否則終止,
def?inside(head):????"Return?True?if?head?inside?boundaries."
????return?-200?190?and?-200?190
最后,就是整個游戲的串聯邏輯,不斷移動蛇、不斷判斷當前狀態,然后選擇是否繼續移動,
def?move():????"Move?snake?forward?one?segment."
????head?=?snake[-1].copy()
????head.move(aim)
????if?not?inside(head)?or?head?in?snake:
????????square(head.x,?head.y,?9,?'red')
????????update()
????????return
????snake.append(head)
????if?head?==?food:
????????print('Snake:',?len(snake))
????????food.x?=?randrange(-15,?15)?*?10
????????food.y?=?randrange(-15,?15)?*?10
????else:
????????snake.pop(0)
????clear()
????for?body?in?snake:
????????square(body.x,?body.y,?9,?'black')
????square(food.x,?food.y,?9,?'green')
????update()
????ontimer(move,?100)
到此為了,經典的貪吃蛇游戲就完成了。整款游戲的純代碼行數不足50行。但是,卻內藏錦繡,有很多需要開發者去思考和琢磨的點,對Python學習者也是一個很大的提升。
除了貪吃蛇,這個項目中還有迷宮、吃豆人、掃雷、Flappy Bird等20+款經典游戲。
當然,如果你覺得這些游戲還不夠,或者對游戲開發充滿興趣,或者有很好的游戲設計idea但開發能力受限,那么,不妨學習一下free-python-games這個項目,能夠把精力專注于游戲本身,而不需要在編程語言方面耗費太多時間。
另外,如果你僅僅希望用來劃水,這個項目同樣可以滿足你,只需要簡單的安裝之后就可以在電腦上玩這些經典游戲。
安裝
$?python3?-m?pip?install?freegames游戲列表
$?python3?-m?freegames?list打開游戲
$?python3?-m?freegames.snake另外,你還可以拷貝一份游戲源碼到本地路徑,用于編輯,
$?python3?-m?freegames?copy?snake$?python3?snake.py
推薦閱讀
- 干貨 | 2019年共享免費資源整理(上):學習資源篇
- 干貨 | 2019年共享免費資源整理(下):實用工具篇
- 10款VS Code插件神器,第7款超級實用!
個人微信
歡迎各位同學添加我的個人微信,互相交流、互相學習,第一時間獲得更多冷門好用的小工具!
我整理了10T+資源進行共享,其中包括實用工具、Python電子書、Spring視頻教程、機器學習資源,掃碼關注我的公眾號“平凡而詩意”,后臺回復相應關鍵字即可獲得。除此之外,原創技術文章會第一時間推送,如果喜歡,麻煩點一下“在看”~
總結
以上是生活随笔為你收集整理的python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python二十四点_Python秒算2
- 下一篇: simulink和psim仿真结果不同_