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中的__future__模块
Apr 27 Python
Python类定义和类继承详解
May 08 Python
Python中datetime常用时间处理方法
Jun 15 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
Python实现查看系统启动项功能示例
May 10 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
教你怎么用Python实现多路径迷宫
Apr 29 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
做个自己站内搜索引擎
2006/10/09 PHP
聊天室php&amp;mysql(四)
2006/10/09 PHP
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
一端时间轮换的广告
2006/06/26 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
js图片预加载示例
2014/04/30 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
关于Vue组件库开发详析
2018/07/01 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
基于Python os模块常用命令介绍
2017/11/03 Python
python实现汉诺塔算法
2021/03/01 Python
python3安装speech语音模块的方法
2018/12/24 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python中dict使用方法详解
2019/07/17 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
什么是唯一索引
2015/07/05 面试题
Linux文件系统类型
2012/09/16 面试题
党员个人剖析材料(四风问题)
2014/10/07 职场文书
个人贷款收入证明
2014/10/26 职场文书
2015年党小组工作总结
2015/05/26 职场文书
七一活动主持词
2015/06/29 职场文书
Python 绘制多因子柱状图
2022/05/11 Python