python3.6使用tkinter实现弹跳小球游戏


Posted in Python onMay 09, 2019

本文实例为大家分享了python3.6实现弹跳小球游戏的具体代码,供大家参考,具体内容如下

import random
import time
from tkinter import *
 
 
#下面定义一个球的类,有canvas和color两个对象
class Ball: #定义一个Ball类的函数
 def __init__(self,canvas,paddle,color):#这是Ball类的属性函数,Ball类下的函数都有这些性质
 self.canvas=canvas
 self.paddle=paddle
 self.id=canvas.create_oval(10,10,25,25,fill=color)#返回所绘小球的调用值放入对象self.id
 self.canvas.move(self.id,245,100) #移动小球到(245,100)坐标处,
 starts=[-3,-2,-1,1,2,3] 
 random.shuffle(starts)
 self.x=starts[0] #使得小球左右方向运动随机
 self.y=-3  #默认开始的小球向上方运动
 self.canvas_height=self.canvas.winfo_height()#画布高度函数winfo_height()返回值放入canvas_height对象中
 self.canvas_width=self.canvas.winfo_width() #winfo_width()返回画布宽度放入canvas_width对象中
 self.hit_bottom=False #设定hit_bottom初始值为false
 
 
 def hit_paddle(self,pos): #声明函数,以供调用
 paddle_pos=self.canvas.coords(self.paddle.id) #将球拍的(x1,y1)(x2,y2)的坐标放到paddle_pos中
 if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]: #
  if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]: #比较小球y轴是否在球拍y轴内
  return True #表示小球碰到了球拍
 return False #表示小球没有碰到球拍
 
 
 def draw(self): #声明draw函数,
 self.canvas.move(self.id,self.x,self.y) #移动小球,移动速度为(self.x,self.y),在init中的属性可以直接用
 pos=self.canvas.coords(self.id)#把小球的左上角和右下角的坐标以列表形式(可能元组)放入pos对象中
 if pos[1]<=0: #如果小球碰到画布上方
  self.y=3 #则改变移动方向向下方
 if pos[3]>=self.canvas_height: #如果小球碰到画布底端 则返回hit_bottom为True
  self.hit_bottom=True
 if self.hit_paddle(pos)==True: #小球碰到了球拍,则改变Y轴方向向上运动
  self.y=-3
 if pos[0]<=0: #如果小球碰到了画布左边,则把X轴速度改成每次向右3个像素
  self.x=3
 if pos[2]>=self.canvas_width: #如果小球碰到了画布右边,则把速度改成每次向左3个像素
  self.x=-3
 
class Paddle: #定义一个paddle类
 def __init__(self,canvas,color): #paddle类的属性函数,默认有两个变量画布和颜色
 self.canvas=canvas #将canvas对象赋给self.canvas
 self.id=canvas.create_rectangle(0,0,100,10,fill=color) #创建球拍,将球拍的调用编号存入self.id
 self.canvas.move(self.id,200,300) #将球拍移动到(200,300)处
 self.x=0 #
 self.canvas_width=self.canvas.winfo_width() #将画布的宽度放入canvas_width对象
 self.canvas.bind_all('<KeyPress-Left>',self.turn_left) #用bind_all()函数绑定键盘左键与tun_left函数
 self.canvas.bind_all('<KeyPress-Right>',self.turn_right) #绑定键盘右键与turn_right函数
 
 
 def draw(self): #声明一个draw函数
 self.canvas.move(self.id,self.x,0) #左右移动球拍的速度为self.x,默认不动
 pos=self.canvas.coords(self.id) #将球拍的左上角和右下角的坐标存入pos对象中
 if pos[0]<=0: #如果球拍x轴小于0,则不再向右移动
  self.x=0
 elif pos[2]>=self.canvas_width: #如果球拍要超过画布右侧了,则球拍的移动速度变为0
  self.x=0
 
 def turn_left(self,evt):#这里的evt是调用方传过来的参数,改变球拍的移动速度向左,
 self.x=-5
 
 def turn_right(self,evt): #改变球拍的移动速度向右每次5个像素
 self.x=5
 
 
 
#创建框架并且命名和固定,然后创建该框架的画布
tk=Tk() #创建框架对象tk
tk.title('Game') #框架对象tk显示的名字为'game'
tk.resizable(0,0) #固定框架
tk.wm_attributes('-topmost',1) #显示在最外层
canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) #创建画布canvas,属于tk框架对象,
canvas.pack() #显示画布的变化
tk.update() #显示框架的变化
 
 
#把类赋值给对象ball,如果调用了ball就可以实现该类的作用
paddle=Paddle(canvas,"blue") #调用拍的类给对象paddle用
ball=Ball(canvas,paddle,'green') #调用球的类给对象ball用
 
while True: #要注意while语句以防止死循环,先设置为真
 if ball.hit_bottom==False: #没有碰到底部的话执行下面的语句
 ball.draw() #调用ball对象的函数draw()
 paddle.draw()#调用paddle对象的函数draw()
 tk.update_idletasks() 
 tk.update() #更新框架
 time.sleep(0.01) #睡眠0.01秒
 elif ball.hit_bottom==True: #要是小球接触了底部
 canvas.create_text(200,100,text='Aha,you lose it,\nHow about try again?',font=('Times',22)) #在(200,100)坐标处创建文本‘...',字号22号
 tk.update() #更新内容

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
python BeautifulSoup使用方法详解
Nov 21 Python
python pdb调试方法分享
Jan 21 Python
浅析Python中的多进程与多线程的使用
Apr 07 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
python截取两个单词之间的内容方法
Dec 25 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
使用GitHub和Python实现持续部署的方法
May 09 #Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 #Python
Python Excel处理库openpyxl使用详解
May 09 #Python
python3实现小球转动抽奖小游戏
Apr 15 #Python
Django保护敏感信息的方法示例
May 09 #Python
Python基于scipy实现信号滤波功能
May 08 #Python
python实现抽奖小程序
Apr 15 #Python
You might like
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php获取随机数组列表的方法
2014/11/13 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Python中关键字is与==的区别简述
2014/07/31 Python
bpython 功能强大的Python shell
2016/02/16 Python
python图像处理入门(一)
2019/04/04 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
中学生学习生活的自我评价
2013/10/26 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
城管大队整治方案
2014/05/06 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js