今天玩點別的吧
都說 Python 除了生孩子
什么都能干
咱們今天
就用 Python 寫個小游戲
貪吃蛇
**
**
**
**
想必大家都玩過這玩意
有沒有想過
你自己來實現一個這樣的游戲呢
那么接下來就是
學習 python 的正確姿勢
想要用 Python 寫一個小游戲
就不得不知道 pygame 這個庫了
這個庫是在 sdl 之上構建的
可以使用到很多 GUI、渲染畫布等
廢話不多說
我們開始
首先我們得有個窗口
通過 pygame 的初始化就
可以使用它提供給我們的工具了
既然有東西可用了
來設置一下游戲名稱吧
想了想
就叫做
《帥氣的python》
恩,很符合小帥b的氣質
通過 set_model 方法
可以設置窗口的大小
比如:
那么這時候得到的窗口就是這樣
把這張圖點開,居然發現了一張帥臉
窗口有了
咱們把蛇搞上去
背景我們就默認黑色吧
所以蛇的顏色應該是白色
這樣才顯得比較凸突出
通過 pygame 的 rect 方法
可以在畫布上畫矩形
那么一開始
我們的蛇應該是處於中間的
蛇的長度就給 4 個格子吧
這里我們一個格子的寬高設置為 10
現在應該是這個樣子
蛇有了
就差食物了
一樣的道理
現在就成這樣了
還整的有模有樣的
不過這食物吧
是隨機的才對
而且我們剛寫的代碼有點糙
搗騰搗騰
這里把食物的位置隨機了一下
這樣每次一運行就會隨機顯示了
好了
現在蛇也有了
食物也有了
接下來就讓蛇的身體
扭!起!來!
需要監聽一下
方向鍵的事件
通過 pygame 的這個方法
pygame.event.get()
可以監聽事件
比如監聽關閉
又比如這樣來監聽我們的方向鍵
運行起來
只要你按了方向鍵
就會被監聽到
接着定義一個蛇頭的位置
蛇頭居中
指引方向
每次觸發一個方向鍵
就讓蛇頭的位置發生相應的變化
然后更新蛇身的位置
所謂更新蛇身位置
主要將是將列表中的元素更新一下
添加蛇頭的位置
pop掉蛇尾的位置
每次更新
需要渲染一下畫布
運行一下就是這樣的
看
我把它扭起來了
哎
我這該死的手速
差點暴露了什么
剛剛的代碼是不是很多重復
抽成一個方法吧
蛇也有了
也會扭了
食物也有了
接下來就讓它去吃啊
怎么吃呢
吃一塹長一智
判斷下唄
只要頭碰到了食物
就算吃到了
給蛇的身體加一格
這里只要發現頭的位置
和食物的位置相同
就說明吃到了
此時列表的數據就不 pop 了
並且食物的位置重新隨機生成
那么現在每次重新渲染的時候
食物的位置就是隨機的了
運行起來
nice
就是要這樣
不過現在
這條蛇好像有外掛似得
撞到南牆都不死的
撞到自己也不死的
鬧呢?
你以為你充錢了么?
怎么判斷撞到自己了呢
其實就是把列表的數據拿出來比對
第一個元素是蛇頭
拿它跟其它元素比對
相同就代表撞到了
如何判斷撞到了牆了呢
通過蛇頭的位置
只要不超過 [500, 500] 就沒事吧
也就是說
只要蛇頭都在畫布之內
就行
這里就直接退出了
效果就是這樣
撞到就直接拜拜
當然
畫布一直頻繁的更新
所以可以使用 pygame 的 clock
這樣子每秒不會超過 10 幀
這樣就不會那么浪費資源了
轉載自公眾號:學習Python的正確姿勢