python3.6使用tkinter實現(xiàn)彈跳小球游戲
更新時間:2019年05月09日 11:39:00 作者:K_caesura
這篇文章主要為大家詳細(xì)介紹了python3.6使用tkinter實現(xiàn)彈跳小球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了python3.6實現(xiàn)彈跳小球游戲的具體代碼,供大家參考,具體內(nèi)容如下
import random import time from tkinter import * #下面定義一個球的類,有canvas和color兩個對象 class Ball: #定義一個Ball類的函數(shù) def __init__(self,canvas,paddle,color):#這是Ball類的屬性函數(shù),Ball類下的函數(shù)都有這些性質(zhì) self.canvas=canvas self.paddle=paddle self.id=canvas.create_oval(10,10,25,25,fill=color)#返回所繪小球的調(diào)用值放入對象self.id self.canvas.move(self.id,245,100) #移動小球到(245,100)坐標(biāo)處, starts=[-3,-2,-1,1,2,3] random.shuffle(starts) self.x=starts[0] #使得小球左右方向運動隨機 self.y=-3 #默認(rèn)開始的小球向上方運動 self.canvas_height=self.canvas.winfo_height()#畫布高度函數(shù)winfo_height()返回值放入canvas_height對象中 self.canvas_width=self.canvas.winfo_width() #winfo_width()返回畫布寬度放入canvas_width對象中 self.hit_bottom=False #設(shè)定hit_bottom初始值為false def hit_paddle(self,pos): #聲明函數(shù),以供調(diào)用 paddle_pos=self.canvas.coords(self.paddle.id) #將球拍的(x1,y1)(x2,y2)的坐標(biāo)放到paddle_pos中 if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]: # if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]: #比較小球y軸是否在球拍y軸內(nèi) return True #表示小球碰到了球拍 return False #表示小球沒有碰到球拍 def draw(self): #聲明draw函數(shù), self.canvas.move(self.id,self.x,self.y) #移動小球,移動速度為(self.x,self.y),在init中的屬性可以直接用 pos=self.canvas.coords(self.id)#把小球的左上角和右下角的坐標(biāo)以列表形式(可能元組)放入pos對象中 if pos[1]<=0: #如果小球碰到畫布上方 self.y=3 #則改變移動方向向下方 if pos[3]>=self.canvas_height: #如果小球碰到畫布底端 則返回hit_bottom為True self.hit_bottom=True if self.hit_paddle(pos)==True: #小球碰到了球拍,則改變Y軸方向向上運動 self.y=-3 if pos[0]<=0: #如果小球碰到了畫布左邊,則把X軸速度改成每次向右3個像素 self.x=3 if pos[2]>=self.canvas_width: #如果小球碰到了畫布右邊,則把速度改成每次向左3個像素 self.x=-3 class Paddle: #定義一個paddle類 def __init__(self,canvas,color): #paddle類的屬性函數(shù),默認(rèn)有兩個變量畫布和顏色 self.canvas=canvas #將canvas對象賦給self.canvas self.id=canvas.create_rectangle(0,0,100,10,fill=color) #創(chuàng)建球拍,將球拍的調(diào)用編號存入self.id self.canvas.move(self.id,200,300) #將球拍移動到(200,300)處 self.x=0 # self.canvas_width=self.canvas.winfo_width() #將畫布的寬度放入canvas_width對象 self.canvas.bind_all('<KeyPress-Left>',self.turn_left) #用bind_all()函數(shù)綁定鍵盤左鍵與tun_left函數(shù) self.canvas.bind_all('<KeyPress-Right>',self.turn_right) #綁定鍵盤右鍵與turn_right函數(shù) def draw(self): #聲明一個draw函數(shù) self.canvas.move(self.id,self.x,0) #左右移動球拍的速度為self.x,默認(rèn)不動 pos=self.canvas.coords(self.id) #將球拍的左上角和右下角的坐標(biāo)存入pos對象中 if pos[0]<=0: #如果球拍x軸小于0,則不再向右移動 self.x=0 elif pos[2]>=self.canvas_width: #如果球拍要超過畫布右側(cè)了,則球拍的移動速度變?yōu)? self.x=0 def turn_left(self,evt):#這里的evt是調(diào)用方傳過來的參數(shù),改變球拍的移動速度向左, self.x=-5 def turn_right(self,evt): #改變球拍的移動速度向右每次5個像素 self.x=5 #創(chuàng)建框架并且命名和固定,然后創(chuàng)建該框架的畫布 tk=Tk() #創(chuàng)建框架對象tk tk.title('Game') #框架對象tk顯示的名字為'game' tk.resizable(0,0) #固定框架 tk.wm_attributes('-topmost',1) #顯示在最外層 canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) #創(chuàng)建畫布canvas,屬于tk框架對象, canvas.pack() #顯示畫布的變化 tk.update() #顯示框架的變化 #把類賦值給對象ball,如果調(diào)用了ball就可以實現(xiàn)該類的作用 paddle=Paddle(canvas,"blue") #調(diào)用拍的類給對象paddle用 ball=Ball(canvas,paddle,'green') #調(diào)用球的類給對象ball用 while True: #要注意while語句以防止死循環(huán),先設(shè)置為真 if ball.hit_bottom==False: #沒有碰到底部的話執(zhí)行下面的語句 ball.draw() #調(diào)用ball對象的函數(shù)draw() paddle.draw()#調(diào)用paddle對象的函數(shù)draw() tk.update_idletasks() tk.update() #更新框架 time.sleep(0.01) #睡眠0.01秒 elif ball.hit_bottom==True: #要是小球接觸了底部 canvas.create_text(200,100,text='Aha,you lose it,\nHow about try again?',font=('Times',22)) #在(200,100)坐標(biāo)處創(chuàng)建文本‘...',字號22號 tk.update() #更新內(nèi)容
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python的Flask框架中集成CKeditor富文本編輯器的教程
在用Flask搭建網(wǎng)站時的后臺文章編輯器可以使用CKeditor,CKeditor所支持的文本樣式較多且開源,這里我們就來看一下Python的Flask框架中集成CKeditor富文本編輯器的教程2016-06-06在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符
這篇文章主要介紹了在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符,本文詳細(xì)解釋了如何在 Python 中使用帶有通配符的 re.sub() 來匹配字符串與正則表達(dá)式,需要的朋友可以參考下2023-06-06python列表推導(dǎo)和生成器表達(dá)式知識點總結(jié)
在本篇文章里小編給大家整理的是關(guān)于python列表推導(dǎo)和生成器表達(dá)式的相關(guān)知識點內(nèi)容,需要的朋友們可以參考下。2020-01-01詳解pytorch tensor和ndarray轉(zhuǎn)換相關(guān)總結(jié)
這篇文章主要介紹了詳解pytorch tensor和ndarray轉(zhuǎn)換相關(guān)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09