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 相关文章推荐
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python解析nginx日志文件
May 11 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
python django 实现验证码的功能实例代码
May 18 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Python实现Event回调机制的方法
Feb 13 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Python socket非阻塞模块应用示例
Sep 12 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 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
php 应用程序安全防范技术研究
2009/09/25 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
详解react-redux插件入门
2018/04/19 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
荷兰超市:DEEN
2018/03/14 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
应聘编辑职位自荐信范文
2014/01/05 职场文书
护士自我评价
2014/02/01 职场文书
通信工程专业求职信
2014/06/04 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
初三英语教学反思
2016/02/15 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis