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

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

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

前言

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

創(chuàng)建窗口

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

點擊運行就會出現(xiàn)一個Ball的空白窗口

創(chuàng)建Ball的類

在這里的話,暫時不一點一點的貼編寫過程的代碼了,直接把代碼貼出來吧

class Ball():
 #注意:特殊方法“init”前后有兩個下劃線,第一個參數(shù)永遠是self
 #由于類可以起到模板的作用,因此,可以在創(chuàng)建實例的時候,
 #把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個
 #特殊的init方法,在創(chuàng)建實例的時候,就把canvas,color等屬性綁上去
 def __init__(self,canvas,paddle,color):  
  self.canvas = canvas
  #少了這句話,一直報錯'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里面隨機取一個
  self.y = -2#-2表示y軸運動的速度
  self.canvas_height = self.canvas.winfo_height()
  self.canvas_width = self.canvas.winfo_width()
  self.hit_bottom = False #設定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) #表示向上運動
  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
  #如果小球碰到了畫布右邊,則把速度改成每次向左2個像素
  if pos[2]>=self.canvas_width:
   self.x = -2
  #如果小球碰到畫布底端 則返回hit_bottom為True
  if pos[3]>=self.canvas_height: 
   self.hit_bottom = True
   
  #判斷球是否撞到了木板
  if self.hit_paddle(pos) == True:
   self.y = -3

木板

#如何增加按一下鍵盤木板動一下的功能?
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: #沒有碰到底部的話執(zhí)行下面的語句
  ball.draw() #調用ball對象的函數(shù)draw()
  paddle.draw()#調用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)坐標處創(chuàng)建文本‘...',字號22號
  tk.update() #更新內容
 
tk.mainloop()
main()

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

要是不小心沒接到,游戲就game over 啦!

最后說一下,感覺很多功能不完善,比如沒有點擊再來一次的按鈕什么的,后期會一步步完善,增加游戲開始、分數(shù)、關卡、難度等等,到時候寫一篇完成的編寫過程記錄!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

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

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

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

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

    python有幾個版本

    在本篇內容里小編給大家分享的是關于python版本的相關知識點內容,需要的朋友們可以學習下。
    2020-06-06
  • Python利用fitz庫提取pdf中的圖片

    Python利用fitz庫提取pdf中的圖片

    Fitz庫是一個Python圖像處理庫,主要用于打開、編輯和保存PDF、TIFF和JPEG格式的圖像,它可以幫助用戶讀取和寫入PDF文件,提取PDF頁面以及在頁面上進行標記和注釋,本文主要介紹了如何通過Python的fitz庫提取pdf中的圖片,需要的朋友可以參考下
    2023-05-05
  • python中mechanize庫的簡單使用示例

    python中mechanize庫的簡單使用示例

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

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

    JSON文件是一種輕量級的數(shù)據(jù)交換格式,它采用了一種類似于JavaScript語法的結構,可以方便地在不同平臺和編程語言之間進行數(shù)據(jù)交換,下面我們就來學習一下Python如何使用內置的json模塊來讀取和寫入JSON文件吧
    2023-12-12
  • Python 中使用正則表達式轉義

    Python 中使用正則表達式轉義

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

    AI:如何訓練機器學習的模型

    這篇文章主要介紹了是如何進行機器學習的模型的訓練,全文邏輯清晰,簡單易懂,如果您正在學習機器學習那么可以參考下,說不定會有不一樣的收貨
    2021-04-04

最新評論