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实现方法
Nov 18 Python
Python中操作MySQL入门实例
Feb 08 Python
深入解析Python中的线程同步方法
Jun 14 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
公认8个效率最高的爬虫框架
Jul 28 Python
Python如何使用ElementTree解析xml
Oct 12 Python
Python通过len函数返回对象长度
Oct 22 Python
Django实现聊天机器人
May 31 Python
彻底弄懂Python中的回调函数(callback)
Jun 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 变量的定义方法
2010/01/26 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php实现字符串翻转的方法
2015/03/27 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python查询mysql,返回json的实例
2018/03/26 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python格式化输出%s和%d
2018/05/07 Python
python sys.argv[]用法实例详解
2018/05/25 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
linux面试题参考答案(10)
2016/10/26 面试题
医学生职业生涯规划书范文
2014/03/13 职场文书
绿色出行口号
2014/06/18 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
毕业酒会致辞
2015/07/29 职场文书
高中信息技术教学反思
2016/02/16 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers