環(huán)球訊息:用Python寫了一個「擁抱梅西」的小游戲
時間:2023-06-24 01:15:33
入門教程、案例源碼、學(xué)習(xí)資料、讀者群
請訪問:?python666.cn
大家好,歡迎來到 Crossin的編程教室 !
(相關(guān)資料圖)
最近有個小伙兒因?yàn)樵诒荣愔袥_進(jìn)場地?fù)肀肺鞫雒恕?/p>
這種行為當(dāng)然不可取,他也為此付出了代價。但要說我沒有一丁點(diǎn)羨慕和佩服那是不可能的。
于是,我也尬蹭一下這個熱點(diǎn),用Python寫了一個「擁抱梅西」的小游戲。
游戲效果是這樣的:
游戲規(guī)則很簡單:
不要被攔截的工作人員追上
抱到梅西(接觸一定時長)
定時會增加攔截的工作人員
可以反復(fù)擁抱
被追上后游戲結(jié)束,顯示堅持的時間和擁抱的次數(shù)
代碼已上傳,獲取請訪問:python666.cn/c/9
或在號內(nèi)回復(fù)關(guān)鍵字:梅西
運(yùn)行說明
代碼使用了游戲框架 pygame-zero?進(jìn)行開發(fā)。之前我們也有發(fā)過基于這個框架的游戲:
羊了個羊,但是Python簡(li)單(pu)版
如果你對于此框架還不熟悉,可以看下這篇介紹:
PONG - 100行代碼寫一個彈球游戲
因此運(yùn)行代碼前需先安裝模塊:
pip?install?pgzero
用此框架代碼看起來與一般代碼稍有不同,它更像一個配置腳本,其中會出現(xiàn)很多未定義的方法和變量,因此在很多編輯器里會提示有錯,但其實(shí)是可以運(yùn)行的,無需手動增加 import。這也是為什么你會看到我視頻里的代碼截圖有大量的下劃線。
pgzero有兩種方式運(yùn)行,一種是通過命令行的 pgzrun 命令;另一種是直接在編輯器中運(yùn)行。參見官方文檔:
https://pygame-zero.readthedocs.io/zh_CN/latest/ide-mode.html
本代碼用的是第二種直接運(yùn)行的方式(需新版pgzero),可直接在IDE中執(zhí)行。
有部分讀者反饋此代碼在spyder等一些編輯器中無法運(yùn)行,類似情況可以嘗試第一種傳統(tǒng)方法,即把最后一行代碼 pgzrun.go() 去掉,然后直接在命令行該目錄下運(yùn)行:?
pgzrun?iMessi.py
代碼簡介
如果你對代碼的核心邏輯其實(shí)比較容易理解。
對于「玩家」來說,就是根據(jù)上下左右按鍵,變換位置坐標(biāo);
對于「工作人員」來說,就是根據(jù)自身和玩家的相對位置算出移動的方向,不斷靠近,如果碰上了就游戲結(jié)束
對于「梅西」來說,就是判斷是否與玩家碰上,并記錄碰上的持續(xù)時間
判斷是否“碰上”很簡單,就是計算一下兩個坐標(biāo)的距離是否小于一定值。
至于角色的移動,粗略的做法是,計算出x軸方向和y軸方向上的速度,然后在update函數(shù)中,將原坐標(biāo)位置加上速度值,得到新的坐標(biāo)位置。
但在我這次的代碼中,為了讓跑動更“絲滑”,沒有選擇直接改變速度,而是根據(jù)玩家的按鍵計算出加速度,然后在update函數(shù)中,將原速度值加上加速度值,得到新的速度,再用新的速度去計算新的坐標(biāo)位置。
# 加速self.speedx += self.fx * self.accself.speedy += self.fy * self.acc# 限制最高速度d = (self.speedx**2 + self.speedy**2)**0.5 / self.speed_maxif d >1:self.speedx /= dself.speedy /= d# 更新坐標(biāo)self.x += self.speedxself.y += self.speedy
有了這樣的設(shè)定之后,還有個好處就是可以增加游戲的可玩性,比如你可以設(shè)定一種最高速度比玩家快,但是加速度比較小的「工作人員」,玩家就需要通過不停地變換方向來擺脫。
代碼中另一個比較復(fù)雜的地方是“轉(zhuǎn)向”的細(xì)節(jié)處理。同樣為了更加絲滑,我沒有選擇直接根據(jù)計算出的方向來改變角色貼圖方向,而是將計算出的方向作為“目標(biāo)方向”,然后根據(jù)角色當(dāng)前實(shí)際方向與目標(biāo)方向的偏差,決定是向順時針還是逆時針方向旋轉(zhuǎn),直到兩個方向小于一定閾值。
# 跑動方向if keyboard.left:self.fx = -1elif keyboard.right:self.fx = 1else:self.fx = 0if keyboard.up:self.fy = -1elif keyboard.down:self.fy = 1else:self.fy = 0# 計算目標(biāo)方向角度directs = ((135, 180, -135), (90, None, -90), (45, 0, -45))direct = directs[self.fx + 1][self.fy + 1]if direct is None:self.angle_dest = self.angleelse:self.angle_dest = direct # 貼圖旋轉(zhuǎn)if abs(self.angle - self.angle_dest) < 5 or abs(self.angle - self.angle_dest) >355:self.angle = self.angle_destelse:if (0 < self.angle - self.angle_dest < 180) or (self.angle - self.angle_dest < -180):self.angle -= 500 * dtelse:self.angle?+=?500?*?dt
這段會牽扯一點(diǎn)初中幾何的知識,想要理清的話建議在紙上畫一畫。
最后,是關(guān)于這個游戲的一個小視頻,給大家圖一樂:
歡迎大家關(guān)注+三連~
代碼已上傳,獲取請訪問:python666.cn/c/9
或在號內(nèi)回復(fù)關(guān)鍵字:梅西
公眾號的讀者朋友們購買后可在后臺聯(lián)系我,加入讀者交流群,Crossin會為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。
感謝轉(zhuǎn)發(fā)和點(diǎn)贊的各位~
_往期文章推薦_
英語不好能不能學(xué)編程?如需了解付費(fèi)精品課程及教學(xué)答疑服務(wù)請在Crossin的編程教室內(nèi)回復(fù): 666相關(guān)稿件
環(huán)球訊息:用Python寫了一個「擁抱梅西」的小游戲
要聞速遞:oracle創(chuàng)建用戶怎么做_Oracle如何創(chuàng)建用戶
法拉第未來股價暴跌37% 此前宣布FF91交付延期_全球微動態(tài)
北汽藍(lán)谷: 關(guān)于極狐考拉的上市安排,公司計劃于三季度末上市并接受預(yù)定 當(dāng)前要聞
世界焦點(diǎn)!結(jié)晶什么意思_結(jié)晶解釋
漫步者:6月20日公司高管肖敏減持公司股份合計150.17萬股|焦點(diǎn)短訊
李佳琦“靈魂發(fā)問”:主播這個行業(yè)還可以存在多久?
天天頭條:6月21日菏澤江源硫酸價格暫穩(wěn) 開工正常
美團(tuán)在包頭成立科技新公司#注冊資本400萬美元_天天速看料
天天亮點(diǎn)!華晨宇的女友標(biāo)準(zhǔn)_華晨宇的女友是誰
世界資訊:應(yīng)急管理部派工作組赴寧夏銀川燃?xì)獗ㄊ鹿尸F(xiàn)場指導(dǎo)救援處置
每日熱議!特殊的端午節(jié)“禮物”!廣州為多位立功現(xiàn)役軍人家庭送喜報
三大應(yīng)用場景系統(tǒng)解決方案直指安全!華為重新定義光儲產(chǎn)業(yè)
海水晶是什么味道的_海水晶是什么 焦點(diǎn)關(guān)注
soopatent專利查詢_soopat專利搜索官網(wǎng)
專家贊阿門為超級天才!美記曬火箭先發(fā)平均身高2.05米:復(fù)刻掘金|世界時訊
世界頭條:建設(shè)銀行黑龍江省分行:社銀合作“就近辦”便民服務(wù)“零距離”
焦點(diǎn)熱門:2023北京中考期間送考車輛尾號限行違法不作處罰
決戰(zhàn)“三個年”楊凌在行動 | 強(qiáng)作風(fēng) 優(yōu)服務(wù) 高質(zhì)量推進(jìn)重點(diǎn)項目建設(shè)
全國鐵路7月1日起實(shí)行新的列車運(yùn)行圖|熱推薦
教育頻道
當(dāng)前頭條:資訊推薦:不顧醫(yī)生勸阻,每天2包煙,頓頓8兩白酒的演員李琦,如今變成這樣
世茂集團(tuán):預(yù)期內(nèi)部監(jiān)控檢討將于2023年7月完成_全球時訊
23年樂透出爐:湯普森兄弟創(chuàng)6紀(jì)錄 亨德森僅探花苦笑 白魔輸麻了 天天觀速訊
哈蘭德沒希望了,法國足球總編刻意強(qiáng)調(diào),梅西金球獎已無懸念 環(huán)球聚看點(diǎn)
環(huán)球訊息:用Python寫了一個「擁抱梅西」的小游戲
【環(huán)球新要聞】印度也能進(jìn)日本4個U17亞洲杯,日本8-4印度,下半場雙方進(jìn)9球


