彈球小游戲是使用Python3+內置的tkinter實現而成,代碼量非常少,特別適合練手
下載地址:https://www.itprojects.cn/web/material/details.html?id=19
一、運行效果
二、完整代碼
下面的代碼中,主要封裝了2個類,一個是Ball球類,一個是Paddle槳類,整體通過一個while無線循環控制球移動,檢查槳的移動,從而實現游戲移動的效果
完整的代碼如下
1 from tkinter import * 2 import random 3 import time 4 5 6 class Ball: 7 def __init__(self, canvas, paddle, color): 8 self.canvas = canvas 9 self.paddle = paddle 10 self.id = canvas.create_oval(10, 10, 25, 25, fill=color) 11 self.canvas.move(self.id, 245, 100) 12 startx = [-3, -2, -1, 1, 2, 3] 13 random.shuffle(startx) 14 self.x = startx[0] 15 self.y = -3 16 self.canvas_height = self.canvas.winfo_height() 17 self.canvas_width = self.canvas.winfo_width() 18 self.hit_bottom = False 19 20 def draw(self): 21 self.canvas.move(self.id, self.x, self.y) 22 pos = self.canvas.coords(self.id) # top-left bottom-right 23 if (pos[1] <= 0 or self.hit_paddle(pos) == True): 24 self.y = -self.y 25 if (pos[0] <= 0 or pos[2] >= self.canvas_width): 26 self.x = -self.x 27 if (pos[3] >= self.canvas_height): 28 self.hit_bottom = True 29 30 def hit_paddle(self, pos): 31 paddle_pos = self.canvas.coords(self.paddle.id) 32 if (pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]): 33 if (pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]): 34 return True 35 return False 36 37 38 class Paddle: 39 def __init__(self, canvas, color): 40 self.canvas = canvas 41 self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color) 42 self.x = 0 43 self.canvas.move(self.id, 200, 300) 44 self.canvas_width = self.canvas.winfo_width() 45 self.canvas.bind_all("<Key-Left>", self.turn_left) 46 self.canvas.bind_all("<Key-Right>", self.turn_right) 47 self.canvas.bind("<Button-1>", self.turn) # 鼠標單擊事件 48 self.canvas.bind("<B1-Motion>", self.turnmove) # 鼠標拖動事件 49 50 def draw(self): 51 pos = self.canvas.coords(self.id) 52 if (pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width): 53 self.canvas.move(self.id, self.x, 0) 54 # self.x = 0 55 56 def turn_left(self, event): 57 self.x = -4 58 59 def turn_right(self, event): 60 self.x = 4 61 62 def turn(self, event): # 鼠標單擊事件函數 63 print("clicked at", event.x, event.y) 64 self.mousex = event.x 65 self.mousey = event.y 66 67 def turnmove(self, event): # 鼠標拖動事件函數 68 # print ("現在為止", event.x, event.y) 69 self.x = event.x - self.mousex 70 self.mousex = event.x 71 72 73 if __name__ == '__main__': 74 tk = Tk() 75 tk.title("彈球小游戲 更多項目實例訪問www.itprojects.cn") 76 tk.resizable(0, 0) # not resizable 77 tk.wm_attributes("-topmost", 1) # at top 78 canvas = Canvas(tk, width=500, height=500, bd=0, highlightthickness=0) 79 canvas.pack() 80 tk.update() 81 paddle = Paddle(canvas, 'blue') 82 ball = Ball(canvas, paddle, 'red') 83 while 1: 84 if (ball.hit_bottom == False): # 彈球是否碰到底部 85 ball.draw() 86 paddle.draw() 87 tk.update() 88 time.sleep(0.01) 89 else: # 游戲循環結束 90 break