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的Django框架中的项目进行单元测试的方法
Apr 11 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
解析Python的缩进规则的使用
Jan 16 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
Python Subprocess模块原理及实例
Aug 26 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
Django通过json格式收集主机信息
May 29 Python
python 线程的五个状态
Sep 22 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 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表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
基于django传递数据到后端的例子
2019/08/16 Python
Python处理session的方法整理
2019/08/29 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
自我鉴定 电子商务专业
2014/01/30 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
活动总结报告范文
2014/05/04 职场文书
咖啡厅商业计划书
2014/09/15 职场文书