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使用random和tertools模块解一些经典概率问题
Jan 28 Python
python如何实现远程控制电脑(结合微信)
Dec 21 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
名片管理系统python版
Jan 11 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
pandas的object对象转时间对象的方法
Apr 11 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
python 为什么说eval要慎用
Mar 26 Python
10个Python面试常问的问题(小结)
Nov 20 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
python实现简单井字棋小游戏
Mar 05 Python
Python判断变量是否是None写法代码实例
Oct 09 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
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
php简单截取字符串代码示例
2016/10/19 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
Python 中@property的用法详解
2020/01/15 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
外贸英语专业求职信范文
2013/12/25 职场文书
小学二年级学生评语
2014/04/21 职场文书
超市创意活动方案
2014/08/15 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
信用卡催款律师函
2015/05/27 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL