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中__init__()方法的高级应用
May 11 Python
Django如何自定义分页
Sep 25 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
python列表生成器迭代器实例解析
Dec 19 Python
打包PyQt5应用时的注意事项
Feb 14 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
Python控制鼠标键盘代码实例
Dec 08 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
python中的getter与setter你了解吗
Mar 24 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jquery 问答知识整理
2010/02/11 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python uuid模块使用实例
2015/04/08 Python
Python日期时间Time模块实例详解
2019/04/15 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
大学秋游活动方案
2014/02/11 职场文书
交通安全责任书范本
2014/07/24 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
入伍通知书
2015/04/23 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电