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线程锁(thread)学习示例
Dec 04 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
机器学习10大经典算法详解
Dec 07 Python
python如何读写json数据
Mar 21 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
Python基于locals返回作用域字典
Oct 17 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
Python中Qslider控件实操详解
Feb 20 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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创建Cookie数组的详解
2013/07/03 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
Python实现的RSS阅读器实例
2015/07/25 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
优纳科技软件测试面试题
2012/05/15 面试题
护理学毕业生求职信
2013/11/14 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
《法国号》教学反思
2016/02/22 职场文书