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 open()文件处理使用介绍
Nov 30 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
对Django 转发和重定向的实例详解
Aug 06 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Python调用Windows命令打印文件
Feb 07 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
python爬虫用mongodb的理由
Jul 28 Python
Python代码风格与编程习惯重要吗?
Jun 03 Python
python turtle绘图命令及案例
Nov 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中大括号作用介绍
2012/03/22 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
JSON Web Tokens的实现原理
2017/04/02 Python
python实现redis三种cas事务操作
2017/12/19 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python 变量类型详解
2018/10/10 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
kafka-python批量发送数据的实例
2018/12/27 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python 字典访问的三种方法小结
2019/12/05 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
创业计划书之家政服务
2019/09/18 职场文书