這篇文章主要介紹了python實(shí)現(xiàn)的彈球小游戲撮弧,由鍵盤控制底部擋板移動珍昨,碰撞小球的游戲功能旨别。
需求描述:
ball 彈球 顏色:紅 女责,大行丁:10宪祥,10裹芝,25刻坊,25, 初始位置:245醋虏,100
paddle:擋板 顏色:藍(lán) 大醒爸洹:寬:100 高:10 初始位置:200,300
規(guī)則:當(dāng)彈球碰到擋板上方颈嚼,彈球反彈毛秘;當(dāng)彈球越過擋板到游戲畫板底部的時候,游戲結(jié)束
基礎(chǔ)知識:
基于python面向?qū)ο罄斫?/p>
tkinter知識掌握
Canvas如何繪制
代碼示例
彈球ball class:
class Ball:
# 初始化操作
def __init__(self,canvas, paddle,color):
self.canvas = canvas
self.paddle = paddle
# 創(chuàng)建一個圓
self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
self.canvas.move(self.id, 245, 100)
startx = [-3, -2, -1, 1, 2, 3]
random.shuffle(startx)
self.x = startx[0]
self.y = -3
self.canvas_height = self.canvas.winfo_height()
self.canvas_width = self.canvas.winfo_width()
self.hit_bottom = False
#繪制
def draw(self):
self.canvas.move(self.id, self.x, self.y)
pos = self.canvas.coords(self.id) #top-left bottom-right
if (pos[1] <= 0 or self.hit_paddle(pos) == True):
self.y = -self.y
if (pos[0] <= 0 or pos[2] >= self.canvas_width):
self.x = -self.x
if (pos[3] >= self.canvas_height):
self.hit_bottom = True
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
擋板paddle class:
class Paddle:
# 初始化
def __init__(self, canvas, color):
self.canvas = canvas
# 畫一個矩形
self.id = canvas.create_rectangle(0, 0, 100, 10, fill = color)
self.x = 0
self.canvas.move(self.id, 200, 300)
self.canvas_width = self.canvas.winfo_width()
self.canvas.bind_all("<Key-Left>", self.turn_left) # 左按鍵移動turn_left距離
self.canvas.bind_all("<Key-Right>", self.turn_right)
def draw(self):
pos = self.canvas.coords(self.id)
if (pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width):
self.canvas.move(self.id, self.x, 0)
#self.x = 0
def turn_left(self, event):
self.x = -4
def turn_right(self, event):
self.x = 4
實(shí)現(xiàn)及控制邏輯:
import tkinter
import random
import time
?
...
?
tk = tkinter.Tk()
tk.title("Game Ball")
tk.resizable(0,0)
tk.wm_attributes("-topmost", 1)
canvas = tkinter.Canvas(tk,width= 500,height= 500, bd = 0, highlightthickness = 0)
canvas.pack()
tk.update()
paddle = Paddle(canvas,"blue")
ball = Ball(canvas,paddle,"red")
while 1:
if(ball.hit_bottom == False):
ball.draw()
paddle.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.01)
總結(jié):本章需要掌握的知識點(diǎn)有python面向?qū)ο笞杩巍kinter知識叫挟、Canvas如何繪制和CanvasAPI函數(shù)。
每天多努力那么一點(diǎn)點(diǎn)限煞,積少成多