本文实例讲述了Python实现的弹球小游戏。分享给大家供大家参考,具体如下:
弹球
1. Ball 类
draw负责移动Ball
碰撞检测,反弹,Ball检测Paddle
2.Paddle类
draw负责移动Paddle
碰撞检测,确定能不能继续
监听键盘事件
3.主循环
绘制Ball和Paddle
update
sleep
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
from Tkinter import *
import random
import time
class Ball:
def __init__( self , canvas, paddle, color):
self .canvas = canvas
self .paddle = paddle
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
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)
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
tk = Tk()
tk.title( "Game" )
tk.resizable( 0 , 0 ) #not resizable
tk.wm_attributes( "-topmost" , 1 ) #at top
canvas = Canvas(tk, width = 500 , height = 500 , bd = 0 , highlightthickness = 0 )
canvas.pack()
tk.update() #init
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 )
|
运行效果如下图:
希望本文所述对大家Python程序设计有所帮助。