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 06 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
讲解Python中的递归函数
Apr 27 Python
浅谈python数据类型及类型转换
Dec 18 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Python3实现的判断环形链表算法示例
Mar 07 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
浅谈pytorch中的BN层的注意事项
Jun 23 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 文件类型判断代码
2009/03/13 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
python多线程http下载实现示例
2013/12/30 Python
python解析文件示例
2014/01/23 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
zookeeper python接口实例详解
2018/01/18 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python中调试或排错的五种方法示例
2019/09/12 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
JavaScript 定时器详情
2021/11/11 Javascript