欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用Python寫一個(gè)簡(jiǎn)易版彈球游戲

 更新時(shí)間:2021年04月13日 17:34:39   作者:wyh15895833492  
這篇文章主要介紹了用Python寫一個(gè)簡(jiǎn)易版彈球游戲,文中有很多實(shí)用代碼,對(duì)正在學(xué)習(xí)python的小伙伴們有很大的幫助.需要的朋友可以參考下

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

先看一下我們的最終效果圖

我們分9步來講解如何寫這個(gè)小游戲

1.創(chuàng)建游戲的主界面

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

(1).創(chuàng)建一個(gè)tk的實(shí)例

(2).然后給這個(gè)窗口取一個(gè)名字叫g(shù)ame

(3).通知窗口管理器調(diào)整布局大小,0,0表示不能被拉升

(4).創(chuàng)建一個(gè)長(zhǎng)為400*500的界面,背景色為默認(rèn),邊框?yàn)楹穸葹?

(5).通知窗口管理器注冊(cè)組件

(6).刷新一下界面

2.創(chuàng)建一個(gè)Ball球的類

好主界面有了,我們就開始創(chuàng)建球

(1)首先我們創(chuàng)建一個(gè)Ball的類,這個(gè)類的初始化參數(shù)有兩個(gè):

一個(gè)canvas也就是畫圖用來畫一個(gè)球,一個(gè)是color,表示球的顏色

(2)在類的初始化的函數(shù)里面

初始化canvas,

畫一個(gè)實(shí)心的球并記錄下它的id

創(chuàng)建球的默認(rèn)在主界面上的位置,我們把它放屏幕中間

然后讓球出現(xiàn)在主界面上:

3.我們讓球向上動(dòng)起來

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

4.讓球能回彈

(1).第三步我們球能向上運(yùn)動(dòng),現(xiàn)在我們要讓它能碰到墻壁反彈

我們剛才是把self.canvas.move(self.id,0,-1)寫死0,-1,表示x坐標(biāo)不動(dòng),y坐標(biāo)不斷的-1也就是球在向上運(yùn)動(dòng)

現(xiàn)在我們把這兩個(gè)值設(shè)成兩個(gè)變量self.x,self.y,當(dāng)我們的球運(yùn)動(dòng)到上邊界的時(shí)候,就把self.y加1,也就向下運(yùn)行,

當(dāng)運(yùn)動(dòng)到下邊界的時(shí)候,就把self.y減1,表示向上運(yùn)行

(2).那么如何判斷球已經(jīng)碰壁了,很簡(jiǎn)單,我們動(dòng)態(tài)的去球的坐標(biāo)[x1,y1,x2,y2],

x1,y1 表示top-left 左上角的坐標(biāo)

x2,y2 表示bottom-right右下角的坐標(biāo)

獲取了球的坐標(biāo)之后(它是一個(gè)list),判斷一下pos[1]和pos[3]就可以了

5.增加球的運(yùn)行方向

現(xiàn)在我們的球的運(yùn)動(dòng)方向是固定的,我們希望每次球的運(yùn)動(dòng)方向要隨機(jī),不然太low了,怎么做呢,很簡(jiǎn)單增加一個(gè)隨機(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ī)取一個(gè)

self.y=-3#-3表示y軸運(yùn)動(dòng)的速度

6.增加小木板

現(xiàn)在我們的球已經(jīng)可以在界面上到處亂竄了,我們現(xiàn)在增加一個(gè)木板來打彈球

7.讓木板可以移動(dòng)

我們通過綁定一些鍵盤事件,讓木板可以移動(dòng)

增加2個(gè)函數(shù),左移和右移,有同學(xué)會(huì)問evt是啥,不急下面會(huì)說.

def turn_left(self, evt):

self.x = -2

def turn_right(self, evt):

self.x = 2

在Paddle的初始化函數(shù)里面綁定兩個(gè)鍵盤事件:

就是按鍵盤左鍵就是響應(yīng)self.turn_left

就是按鍵盤右鍵就是響應(yīng)self.turn_right

evt是向系統(tǒng)注冊(cè)的事件

8.增加球和木板的碰撞

現(xiàn)在球也有了,木板也有了,而且可以左右挪動(dòng),現(xiàn)在最精彩的部分要上演了,就是增加球碰到木板之后反彈,那么如何判斷球碰到木板了,簡(jiǎn)單我們只要在球的類里面增加一個(gè)函數(shù)來判斷是否碰撞了

def draw(self):

--snip--

if self.hit_paddle(pos) == True:

self.y = -3

--snip--

9.判斷當(dāng)球運(yùn)動(dòng)到底部游戲結(jié)束

經(jīng)過上面8步,游戲大體功能已經(jīng)有了,那么如何判斷游戲結(jié)束呢,我們?cè)O(shè)定只要球運(yùn)動(dòng)底部的時(shí)候(可以認(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)了簡(jiǎn)單的功能,其實(shí)這個(gè)游戲還可以增加很多功能,比如記錄分?jǐn)?shù),增加游戲開始和結(jié)束的提示,增加木板和球的種類,增加管卡和難度等等大家可以自己發(fā)揮一下, 寫完很有成就感~~

到此這篇關(guān)于用Python寫一個(gè)簡(jiǎn)易版彈球游戲的文章就介紹到這了,更多相關(guān)python寫彈球游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)flappy bird游戲

    python實(shí)現(xiàn)flappy bird游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)flappy bird游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python調(diào)用.NET庫的方法步驟

    Python調(diào)用.NET庫的方法步驟

    這篇文章主要介紹了Python調(diào)用.NET庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Django ImageFiled上傳照片并顯示的方法

    Django ImageFiled上傳照片并顯示的方法

    今天小編就為大家分享一篇Django ImageFiled上傳照片并顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • PyTorch中g(shù)rid_sample的使用及說明

    PyTorch中g(shù)rid_sample的使用及說明

    這篇文章主要介紹了PyTorch中g(shù)rid_sample的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • BeautifulSoup中find和find_all的使用詳解

    BeautifulSoup中find和find_all的使用詳解

    這篇文章主要介紹了BeautifulSoup中find和find_all的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python批量修改文件名的三種方法實(shí)例

    python批量修改文件名的三種方法實(shí)例

    同事最近有個(gè)需求,需要批量修改文件的名稱,這篇文章主要給大家介紹了關(guān)于python批量修改文件名的三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 如何基于Python和Flask編寫Prometheus監(jiān)控

    如何基于Python和Flask編寫Prometheus監(jiān)控

    這篇文章主要介紹了如何基于Python和Flask編寫Prometheus監(jiān)控,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python調(diào)用實(shí)現(xiàn)最小二乘法的方法詳解

    Python調(diào)用實(shí)現(xiàn)最小二乘法的方法詳解

    所謂線性最小二乘法,可以理解為是解方程的延續(xù),區(qū)別在于,當(dāng)未知量遠(yuǎn)小于方程數(shù)的時(shí)候,將得到一個(gè)無解的問題。本文主要和大家分享Python調(diào)用實(shí)現(xiàn)最小二乘法的方法,需要的可以參考一下
    2023-04-04
  • 詳解Python如何實(shí)現(xiàn)輸出顏色字體到終端界面

    詳解Python如何實(shí)現(xiàn)輸出顏色字體到終端界面

    在終端中,輸出的字體總是單一顏色的,黑底白字。但是在一些場(chǎng)景并不能很好的滿足輸出的需求。本文為大家介紹了Python如何實(shí)現(xiàn)輸出顏色字體到終端界面中,需要的可以參考一下
    2022-12-12
  • Python循環(huán)中else,break和continue的用法實(shí)例詳解

    Python循環(huán)中else,break和continue的用法實(shí)例詳解

    這篇文章主要介紹了Python循環(huán)中else,break和continue的用法,結(jié)合實(shí)例形式詳細(xì)分析了Python for循環(huán)、while循環(huán)中else,break和continue的功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07

最新評(píng)論