前言
學習python的過程中,比較喜歡通過實際的小專案進行鞏固學習,決定寫乙個彈跳小球的程式。這個實戰例程是在***上看到的,他的編寫過程比較完整,步驟清晰,貼的**並不完整,但是我還是決定嘗試一下,在嘗試的過程中由於自己的基礎知識並沒有學到類這裡,所以是在摸索的階段,一邊學習基礎知識,一邊編寫這個例程,最終還是把它給完成了,雖然後面在網上看到了**,幸好沒有提前看到,這一天中我還是學習到了很多。
建立視窗
from tkinter import tk
import tkinter
import random
import time
def main():
#建立tk物件
tk = tkinter.tk()
#視窗取名「ball」
tk.title ("ball")
#.通知視窗管理器調整布局大小,0,0表示不能被拉公升
tk.resizable (0,0)
#建立乙個長為400*500的介面,背景色為預設
tk.wm_attributes("-topmost",1)
canvas = tkinter.canvas(tk, width=500, height=400, bd=0)
#通知視窗管理器註冊元件
canvas.pack()
#重新整理一下介面
tk.update()
點選執行就會出現乙個ball的空白視窗
建立ball的類
在這裡的話,暫時不一點一點的貼編寫過程的**了,直接把**貼出來吧
cwww.cppcns.comlass ball():
#注意:特殊方法「init」前後有兩個下劃線,第乙個引數永遠是self
#由於類可以起到模板的作用,因此,可以在建立例項的時候,
#把一些我們認為必須繫結的屬性強制填寫進去。通過定義乙個
#特殊的init方法,在建立例項的時候,就把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:
s程式設計客棧elf.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('',self.turn_left)
self.canvas.bind_all('',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: #沒有碰到底部的話執行下面的語句
ball.draw() #呼叫ball物件的函式draw()
paddle.draw()#呼叫paddle物件的函式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)座標處建立文字『...',字型大小22號
tk.update() #更新內容
tk.mainloop()
main()
最終完成就是這樣的了,用鍵盤的左右控制藍色的木板接球就可以了
要是不小心沒接到,遊戲就game over 啦!
最後說一下,感覺很多功能不完善,比如沒有點選再來一次的按鈕什麼的,後期會一步步完善,增加遊戲開始、分數、關卡、難度等等,到時候寫一篇完成的編寫過程記錄!
本文標題: python實現彈跳小球
本文位址:
彈跳小球學習
主要知識點 為實現動態顯示,可用清屏函式 1.實現小球自由落體 動態軌跡 include include include 實現小球的自由落體 int main printf n return 0 2.實現小球的上下彈跳 include include include 實現小球上下彈跳 int mai...
使用pgzero實現小球彈跳效果
程式 做了如下操作 1 引入pgzero庫 2 定義幕布的長寬 3 定義小球的中心座標 半徑 移動速度 4 定義draw函式 繪製模組 對每幀畫面進行繪製 5 定義update函式 更新模組 在每幀畫面繪製之前更新物件的變數 6 執行遊戲 完整 如下 import pgzrun 引入pgzero庫 ...
C語言實現彈跳小球
這是乙個簡單的c語言源 c語言實現彈跳小球,設定了小球的分數及過關的難度。include graphics.h include math.h define left 0x4b00 define right 0x4d00 define esc 0x011b int x,y,x1,y1,key,t1,t...