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ā)揮一下, 寫完很有成就感~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內(nèi)容