Python弹球例子

本文介绍了如何使用Python的Tkinter库实现一个简单的弹球游戏。包括Ball类和Paddle类的详细实现,涉及碰撞检测、球的运动逻辑及 paddle 的键盘事件响应。
摘要由CSDN通过智能技术生成
弹球
1. Ball 类
draw负责移动Ball 
碰撞检测,反弹,Ball检测Paddle
2.Paddle类
draw负责移动Paddle
碰撞检测,确定能不能继续
监听键盘事件
3.主循环
绘制Ball和Paddle
update
sleep

代码

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)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值