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

python實(shí)現(xiàn)彈跳小球

 更新時(shí)間:2019年05月13日 08:42:44   作者:lhm8013  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

學(xué)習(xí)Python的過(guò)程中,比較喜歡通過(guò)實(shí)際的小項(xiàng)目進(jìn)行鞏固學(xué)習(xí),決定寫(xiě)一個(gè)彈跳小球的程序。這個(gè)實(shí)戰(zhàn)例程是在公眾號(hào)上看到的,他的編寫(xiě)過(guò)程比較完整,步驟清晰,貼的代碼并不完整,但是我還是決定嘗試一下,在嘗試的過(guò)程中由于自己的基礎(chǔ)知識(shí)并沒(méi)有學(xué)到類(lèi)這里,所以是在摸索的階段,一邊學(xué)習(xí)基礎(chǔ)知識(shí),一邊編寫(xiě)這個(gè)例程,最終還是把它給完成了,雖然后面在網(wǎng)上看到了代碼,幸好沒(méi)有提前看到,這一天中我還是學(xué)習(xí)到了很多。

創(chuàng)建窗口

 from tkinter import Tk
 import tkinter
 import random
 import time
 def main():
 
 #創(chuàng)建Tk對(duì)象
 tk = tkinter.Tk()
 #窗口取名“Ball”
 tk.title ("Ball")
 #.通知窗口管理器調(diào)整布局大小,0,0表示不能被拉升
 tk.resizable (0,0)
 #創(chuàng)建一個(gè)長(zhǎng)為400*500的界面,背景色為默認(rèn)
 tk.wm_attributes("-topmost",1)
 canvas = tkinter.Canvas(tk, width=500, height=400, bd=0)
 #通知窗口管理器注冊(cè)組件
 canvas.pack()
 #刷新一下界面
 tk.update()

點(diǎn)擊運(yùn)行就會(huì)出現(xiàn)一個(gè)Ball的空白窗口

創(chuàng)建Ball的類(lèi)

在這里的話,暫時(shí)不一點(diǎn)一點(diǎn)的貼編寫(xiě)過(guò)程的代碼了,直接把代碼貼出來(lái)吧

class Ball():
 #注意:特殊方法“init”前后有兩個(gè)下劃線,第一個(gè)參數(shù)永遠(yuǎn)是self
 #由于類(lèi)可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,
 #把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。通過(guò)定義一個(gè)
 #特殊的init方法,在創(chuàng)建實(shí)例的時(shí)候,就把canvas,color等屬性綁上去
 def __init__(self,canvas,paddle,color):  
  self.canvas = canvas
  #少了這句話,一直報(bào)錯(cuò)'Ball' object has no attribute 'paddle'
  self.paddle = paddle
  self.id = canvas.create_oval(10,10,25,25,fill=color)
  self.canvas.move(self.id,245,100)

  starts=[-3,-2,-1,-1,1,1,2,3]
  random.shuffle(starts)
  self.x = starts[0]#從list里面隨機(jī)取一個(gè)
  self.y = -2#-2表示y軸運(yùn)動(dòng)的速度
  self.canvas_height = self.canvas.winfo_height()
  self.canvas_width = self.canvas.winfo_width()
  self.hit_bottom = False #設(shè)定hit_bottom初始值為false
  
  
 def hit_paddle(self,pos):
  paddle_pos = self.canvas.coords(self.paddle.id)
  if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
   if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
    return True
  return False

 def draw(self):
  #   self.canvas.move(self.id,0,-1) #表示向上運(yùn)動(dòng)
  self.canvas.move(self.id,self.x,self.y)#,self.r,self.l
  pos = self.canvas.coords(self.id)
  if pos[0]<=0:
   self.x = 2
  if pos[1]<=0:
   self.y = 2
  #如果小球碰到了畫(huà)布右邊,則把速度改成每次向左2個(gè)像素
  if pos[2]>=self.canvas_width:
   self.x = -2
  #如果小球碰到畫(huà)布底端 則返回hit_bottom為T(mén)rue
  if pos[3]>=self.canvas_height: 
   self.hit_bottom = True
   
  #判斷球是否撞到了木板
  if self.hit_paddle(pos) == True:
   self.y = -3

木板

#如何增加按一下鍵盤(pán)木板動(dòng)一下的功能?
class Paddle:
 def turn_left(self, evt):
  self.x = -2
 def turn_right(self, evt):
  self.x = 2
  
 def __init__(self,canvas,color):
  self.canvas = canvas
  self.id = canvas.create_rectangle(0,0,150,10,fill=color)
  self.canvas.move(self.id,200,300)
  self.x = 0
  self.canvas_width = self.canvas.winfo_width()
  self.canvas.bind_all('<KeyPress-Left>',self.turn_left)
  self.canvas.bind_all('<KeyPress-Right>',self.turn_right)
  
 def draw(self):
  self.canvas.move(self.id,self.x,0)
  pos = self.canvas.coords(self.id)
  if pos[0] <= 0:
   self.x = 0
  if pos[2] >= self.canvas_width:
    self.x = 0
   


paddle = Paddle(canvas,"blue")
ball = Ball(canvas,paddle,"red")
while 1:
 if ball.hit_bottom==False: #沒(méi)有碰到底部的話執(zhí)行下面的語(yǔ)句
  ball.draw() #調(diào)用ball對(duì)象的函數(shù)draw()
  paddle.draw()#調(diào)用paddle對(duì)象的函數(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)建文本‘...',字號(hào)22號(hào)
  tk.update() #更新內(nèi)容
 
tk.mainloop()
main()

最終完成就是這樣的了,用鍵盤(pán)的左右控制藍(lán)色的木板接球就可以了

要是不小心沒(méi)接到,游戲就game over 啦!

最后說(shuō)一下,感覺(jué)很多功能不完善,比如沒(méi)有點(diǎn)擊再來(lái)一次的按鈕什么的,后期會(huì)一步步完善,增加游戲開(kāi)始、分?jǐn)?shù)、關(guān)卡、難度等等,到時(shí)候?qū)懸黄瓿傻木帉?xiě)過(guò)程記錄!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用python計(jì)算時(shí)間差(返回天數(shù))

    利用python計(jì)算時(shí)間差(返回天數(shù))

    這篇文章主要給大家介紹了關(guān)于如何利用python計(jì)算時(shí)間差(返回天數(shù))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python淺析匿名函數(shù)lambda的用法

    Python淺析匿名函數(shù)lambda的用法

    lambda所表示的匿名函數(shù)的內(nèi)容應(yīng)該是很簡(jiǎn)單的,如果復(fù)雜的話,干脆就重新定義一個(gè)函數(shù)了,使用lambda就有點(diǎn)過(guò)于執(zhí)拗了。lambda就是用來(lái)定義一個(gè)匿名函數(shù)的,如果還要給他綁定一個(gè)名字的話,就會(huì)顯得有點(diǎn)畫(huà)蛇添足,通常是直接使用lambda函數(shù)
    2022-07-07
  • 詳解Python模塊化編程與裝飾器

    詳解Python模塊化編程與裝飾器

    這篇文章主要介紹了Python模塊化編程與裝飾器的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python數(shù)據(jù)分析之聚類(lèi)分析(cluster analysis)

    python數(shù)據(jù)分析之聚類(lèi)分析(cluster analysis)

    聚類(lèi)分析本身不是一個(gè)特定的算法,而是要解決的一般任務(wù)。它可以通過(guò)各種算法來(lái)實(shí)現(xiàn),這些算法在理解群集的構(gòu)成以及如何有效地找到它們方面存在顯著差異。這篇文章主要介紹了python數(shù)據(jù)分析之聚類(lèi)分析(cluster analysis),需要的朋友可以參考下
    2021-11-11
  • python有幾個(gè)版本

    python有幾個(gè)版本

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python版本的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python利用fitz庫(kù)提取pdf中的圖片

    Python利用fitz庫(kù)提取pdf中的圖片

    Fitz庫(kù)是一個(gè)Python圖像處理庫(kù),主要用于打開(kāi)、編輯和保存PDF、TIFF和JPEG格式的圖像,它可以幫助用戶讀取和寫(xiě)入PDF文件,提取PDF頁(yè)面以及在頁(yè)面上進(jìn)行標(biāo)記和注釋?zhuān)疚闹饕榻B了如何通過(guò)Python的fitz庫(kù)提取pdf中的圖片,需要的朋友可以參考下
    2023-05-05
  • python中mechanize庫(kù)的簡(jiǎn)單使用示例

    python中mechanize庫(kù)的簡(jiǎn)單使用示例

    最近的項(xiàng)目中使用到了mechanize庫(kù),下面寫(xiě)個(gè)簡(jiǎn)單使用的小例子給大家參考
    2014-01-01
  • Python實(shí)現(xiàn)解析與生成JSON數(shù)據(jù)

    Python實(shí)現(xiàn)解析與生成JSON數(shù)據(jù)

    JSON文件是一種輕量級(jí)的數(shù)據(jù)交換格式,它采用了一種類(lèi)似于JavaScript語(yǔ)法的結(jié)構(gòu),可以方便地在不同平臺(tái)和編程語(yǔ)言之間進(jìn)行數(shù)據(jù)交換,下面我們就來(lái)學(xué)習(xí)一下Python如何使用內(nèi)置的json模塊來(lái)讀取和寫(xiě)入JSON文件吧
    2023-12-12
  • Python 中使用正則表達(dá)式轉(zhuǎn)義

    Python 中使用正則表達(dá)式轉(zhuǎn)義

    這篇文章主要介紹了Python 正則表達(dá)式轉(zhuǎn)義,在 Python 中,正則表達(dá)式轉(zhuǎn)義sub()方法用于替換字符串,替換后的字符串由 re 模塊中的 Python 內(nèi)置方法返回,需要的朋友可以參考下
    2023-06-06
  • AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型

    AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型

    這篇文章主要介紹了是如何進(jìn)行機(jī)器學(xué)習(xí)的模型的訓(xùn)練,全文邏輯清晰,簡(jiǎn)單易懂,如果您正在學(xué)習(xí)機(jī)器學(xué)習(xí)那么可以參考下,說(shuō)不定會(huì)有不一樣的收貨
    2021-04-04

最新評(píng)論