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获取文件所在目录和文件名的方法
Jan 12 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Django Rest framework认证组件详细用法
Jul 25 Python
python将字母转化为数字实例方法
Oct 04 Python
Python: 传递列表副本方式
Dec 19 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
Pytorch模型转onnx模型实例
Jan 15 Python
Python基于numpy模块实现回归预测
May 14 Python
Python实现石头剪刀布游戏
Jan 20 Python
PyQt5通过信号实现MVC的示例
Feb 06 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python open读写文件实现脚本
2008/09/06 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
时尚休闲吧创业计划书
2014/01/25 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
班主任寄语大全
2014/04/04 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
作文评语怎么写
2014/12/25 职场文书
置业顾问岗位职责
2015/02/09 职场文书
年终工作总结范文
2019/06/20 职场文书
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python