Python实现的弹球小游戏示例


Posted in Python onAugust 01, 2017

本文实例讲述了Python实现的弹球小游戏。分享给大家供大家参考,具体如下:

弹球

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)

运行效果如下图:

Python实现的弹球小游戏示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现端口转发器的方法
Mar 13 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
用python编写第一个IDA插件的实例
May 29 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
Python实现中英文全文搜索的示例
Dec 04 Python
用Python 执行cmd命令
Dec 18 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
Python的mysql数据库的更新如何实现
Jul 31 #Python
Python操作csv文件实例详解
Jul 31 #Python
Python实现字典去除重复的方法示例
Jul 31 #Python
浅析使用Python操作文件
Jul 31 #Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 #Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 #Python
深入探究Django中的Session与Cookie
Jul 30 #Python
You might like
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
简单的js计算器实现
2016/10/26 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
python实现Adapter模式实例代码
2018/02/09 Python
python编写弹球游戏的实现代码
2018/03/12 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python tkinter三种布局实例详解
2020/01/06 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
教师党员思想汇报
2014/01/06 职场文书
社区服务标语
2014/07/01 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
部队2014年终工作总结
2014/11/27 职场文书
Python WSGI 规范简介
2021/04/11 Python
pandas中DataFrame检测重复值的实现
2021/05/26 Python
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers