python實現彈跳小球

2022-10-03 15:51:13 字數 3769 閱讀 6676

前言

學習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...