用Python寫一個簡易版彈球游戲
我們前面講了幾篇關(guān)于類的知識點(diǎn),為了讓大家更好的掌握類的概念,并靈活的運(yùn)用這些知識,我寫了一個有趣又好玩的彈球的游戲,一來可以把類的知識融會一下,二來加深對Python的興趣.你會發(fā)現(xiàn)哎呀Python寫小游戲還是蠻方便的,蠻有意思的~~
先看一下我們的最終效果圖

我們分9步來講解如何寫這個小游戲
1.創(chuàng)建游戲的主界面
我們用Python的內(nèi)置模塊Tkinter來完成了,它是Python的標(biāo)準(zhǔn)GUI工具包,可以非常方便在制作GUI小工具,因?yàn)槭强缙脚_的,可以方便的在win和linux下運(yùn)行,我們用Tk里的canvas繪圖功能來制作一個小游戲.先來把主界面畫出來

(1).創(chuàng)建一個tk的實(shí)例
(2).然后給這個窗口取一個名字叫g(shù)ame
(3).通知窗口管理器調(diào)整布局大小,0,0表示不能被拉升
(4).創(chuàng)建一個長為400*500的界面,背景色為默認(rèn),邊框?yàn)楹穸葹?
(5).通知窗口管理器注冊組件
(6).刷新一下界面
2.創(chuàng)建一個Ball球的類
好主界面有了,我們就開始創(chuàng)建球
(1)首先我們創(chuàng)建一個Ball的類,這個類的初始化參數(shù)有兩個:
一個canvas也就是畫圖用來畫一個球,一個是color,表示球的顏色
(2)在類的初始化的函數(shù)里面
初始化canvas,
畫一個實(shí)心的球并記錄下它的id
創(chuàng)建球的默認(rèn)在主界面上的位置,我們把它放屏幕中間
然后讓球出現(xiàn)在主界面上:


3.我們讓球向上動起來
剛才在Ball類里面有一個draw函數(shù),我們現(xiàn)在在draw里面加點(diǎn)東西,讓球向上運(yùn)動

4.讓球能回彈
(1).第三步我們球能向上運(yùn)動,現(xiàn)在我們要讓它能碰到墻壁反彈
我們剛才是把self.canvas.move(self.id,0,-1)寫死0,-1,表示x坐標(biāo)不動,y坐標(biāo)不斷的-1也就是球在向上運(yùn)動
現(xiàn)在我們把這兩個值設(shè)成兩個變量self.x,self.y,當(dāng)我們的球運(yùn)動到上邊界的時候,就把self.y加1,也就向下運(yùn)行,
當(dāng)運(yùn)動到下邊界的時候,就把self.y減1,表示向上運(yùn)行

(2).那么如何判斷球已經(jīng)碰壁了,很簡單,我們動態(tài)的去球的坐標(biāo)[x1,y1,x2,y2],
x1,y1 表示top-left 左上角的坐標(biāo)
x2,y2 表示bottom-right右下角的坐標(biāo)
獲取了球的坐標(biāo)之后(它是一個list),判斷一下pos[1]和pos[3]就可以了

5.增加球的運(yùn)行方向
現(xiàn)在我們的球的運(yùn)動方向是固定的,我們希望每次球的運(yùn)動方向要隨機(jī),不然太low了,怎么做呢,很簡單增加一個隨機(jī)函數(shù)就可以了
在__init__()函數(shù)里面,我們改一下
self.x = 0
self.y = -1
變成:
starts=[-3,-2,-1,1,1,2,3]
random.shuffle(starts)
self.x=starts[0]#從list里面隨機(jī)取一個
self.y=-3#-3表示y軸運(yùn)動的速度
6.增加小木板
現(xiàn)在我們的球已經(jīng)可以在界面上到處亂竄了,我們現(xiàn)在增加一個木板來打彈球


7.讓木板可以移動
我們通過綁定一些鍵盤事件,讓木板可以移動
增加2個函數(shù),左移和右移,有同學(xué)會問evt是啥,不急下面會說.
def turn_left(self, evt): self.x = -2 def turn_right(self, evt): self.x = 2
在Paddle的初始化函數(shù)里面綁定兩個鍵盤事件:
就是按鍵盤左鍵就是響應(yīng)self.turn_left
就是按鍵盤右鍵就是響應(yīng)self.turn_right
evt是向系統(tǒng)注冊的事件

8.增加球和木板的碰撞
現(xiàn)在球也有了,木板也有了,而且可以左右挪動,現(xiàn)在最精彩的部分要上演了,就是增加球碰到木板之后反彈,那么如何判斷球碰到木板了,簡單我們只要在球的類里面增加一個函數(shù)來判斷是否碰撞了
def draw(self): --snip-- if self.hit_paddle(pos) == True: self.y = -3 --snip--

9.判斷當(dāng)球運(yùn)動到底部游戲結(jié)束
經(jīng)過上面8步,游戲大體功能已經(jīng)有了,那么如何判斷游戲結(jié)束呢,我們設(shè)定只要球運(yùn)動底部的時候(可以認(rèn)為是球碰到了地面),游戲就失敗了,加幾行代碼就搞定了.
class Ball(): def __init__(self,canvas,paddle,color): --snip-- self.hit_bottom=False def draw(self): --snip-- if pos[3]>=self.canvas_height:#判斷當(dāng)球的下沿大于等于主界面的高度 self.hit_bottom=True --snip-- paddle=Paddle(canvas,"blue") ball=Ball(canvas,paddle,"red") while 1: if ball.hit_bottom==False and ball.paddle.started : ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01)

源碼大概100行實(shí)現(xiàn)了簡單的功能,其實(shí)這個游戲還可以增加很多功能,比如記錄分?jǐn)?shù),增加游戲開始和結(jié)束的提示,增加木板和球的種類,增加管卡和難度等等大家可以自己發(fā)揮一下, 寫完很有成就感~~
到此這篇關(guān)于用Python寫一個簡易版彈球游戲的文章就介紹到這了,更多相關(guān)python寫彈球游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python使用opencv進(jìn)行人臉識別
- python實(shí)現(xiàn)讀取并顯示圖片的兩種方法
- Python實(shí)現(xiàn)彈球小游戲的示例代碼
- 用python實(shí)現(xiàn)彈球小游戲
- python實(shí)現(xiàn)簡單反彈球游戲
- python 實(shí)現(xiàn)彈球游戲的示例代碼
- Python實(shí)現(xiàn)彈球小游戲
- 使用python和pygame制作擋板彈球游戲
- python pygame實(shí)現(xiàn)擋板彈球游戲
- python運(yùn)用pygame庫實(shí)現(xiàn)雙人彈球小游戲
- python3實(shí)現(xiàn)彈彈球小游戲
- Python基于Tkinter模塊實(shí)現(xiàn)的彈球小游戲
- python編寫彈球游戲的實(shí)現(xiàn)代碼
- Python實(shí)現(xiàn)的彈球小游戲示例
- Python彈球小游戲的項(xiàng)目代碼
相關(guān)文章
Python模擬瀏覽器上傳文件腳本的方法(Multipart/form-data格式)
今天小編就為大家分享一篇Python模擬瀏覽器上傳文件腳本的方法(Multipart/form-data格式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
django使用django-apscheduler 實(shí)現(xiàn)定時任務(wù)的例子
今天小編就為大家分享一篇django使用django-apscheduler 實(shí)現(xiàn)定時任務(wù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python3中常用的處理時間和實(shí)現(xiàn)定時任務(wù)的方法的介紹
這篇文章主要介紹了Python3中常用的處理時間和實(shí)現(xiàn)定時任務(wù)的方法,包括循環(huán)執(zhí)行某個任務(wù)這樣的實(shí)現(xiàn),需要的朋友可以參考下2015-04-04
Python RabbitMQ消息隊(duì)列實(shí)現(xiàn)rpc
這篇文章主要介紹了python 之rabbitmq實(shí)現(xiàn)rpc,主要實(shí)現(xiàn)客戶端通過發(fā)送命令來調(diào)用服務(wù)端的某些服務(wù),服務(wù)端把結(jié)果再返回給客戶端,感興趣的小伙伴們可以參考一下2018-05-05
手把手教你快速安裝gpu版本的pytorch(詳細(xì)圖文教程)
在Windows?10上安裝PyTorch時,通常默認(rèn)安裝的是CPU版本,且下載速度較慢,本文提供了一個詳細(xì)的安裝指南,包括如何檢查CUDA版本、選擇合適的PyTorch、torchvision和torchaudio版本,并通過pip而非conda進(jìn)行安裝,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
Python自動化辦公之圖片轉(zhuǎn)PDF的實(shí)現(xiàn)
實(shí)現(xiàn)圖片轉(zhuǎn)換成PDF文檔的操作方法有很多,綜合對比以后感覺fpdf這個模塊用起來比較方便而且代碼量相當(dāng)少。所以本文將利用Python語言實(shí)現(xiàn)圖片轉(zhuǎn)PDF,感興趣的可以了解一下2022-04-04
python中前綴運(yùn)算符 *和 **的用法示例詳解
這篇文章主要介紹了python中前綴運(yùn)算符 *和 **的用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-05-05
python txt中的文件,逐行讀取并且每行賦值給變量問題
這篇文章主要介紹了python txt中的文件,逐行讀取并且每行賦值給變量問題,具有很好的參考價值,希望對大家有所幫助。2023-02-02

