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新手经常遇到的17个错误分析
Jul 30 Python
python生成器generator用法实例分析
Jun 04 Python
python如何重载模块实例解析
Jan 25 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
python文件写入write()的操作
May 14 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
Python线程条件变量Condition原理解析
Jan 20 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Python中else的三种使用场景
Jun 16 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/04/06 PHP
php 使用array函数实现分页
2015/02/13 PHP
PHP文件操作详解
2016/12/30 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
Python自动连接ssh的方法
2015/03/07 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
animation和transition的区别
2020/10/12 HTML / CSS
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
简述数组与指针的区别
2014/01/02 面试题
水电站项目建议书
2014/05/12 职场文书
护林员个人总结
2015/03/04 职场文书
外出考察学习心得体会
2016/01/18 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸