pythontkinter详解(python3.6使用tkinter实现弹跳小球游戏)
类别:脚本大全 浏览量:2035
时间:2021-10-09 00:03:42 pythontkinter详解
python3.6使用tkinter实现弹跳小球游戏本文实例为大家分享了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() #更新内容 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/K_caesura/article/details/80022807
您可能感兴趣
- python自动化邮件管理(Python实现E-Mail收集插件实例教程)
- pythonmatplotlib画图流程(python3使用matplotlib绘制条形图)
- python转图片为字符图(Python实现图片转字符画的代码实例)
- python开启多线程(python 多线程重启方法)
- python2.7连接sqlserver数据库(Python使用sqlalchemy模块连接数据库操作示例)
- python利用空列表进行数字排序(python实现计数排序与桶排序实例代码)
- python的turtle库怎么进入(python的turtle库使用详解)
- 如何查看python是否安装selenium(selenium+python截图不成功的解决方法)
- python开发网站github(使用 Python 玩转 GitHub 的贡献板推荐)
- python怎么去掉字符串的空格(Python切片操作去除字符串首尾的空格)
- python中统计一个字符出现的次数(Python统计一个字符串中每个字符出现了多少次的方法字符串转换为列表再统计)
- python开启线程池(对python:threading.Thread类的使用方法详解)
- Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】(Python HTML解析器BeautifulSoup用法实例详解爬虫解析器)
- python模块化打包(python使用Paramiko模块实现远程文件拷贝)
- pythonselenium自动选框(python selenium 弹出框处理的实现)
- pythondocx安装教程(Python docx库用法示例分析)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
热门推荐
- dedecms织梦阁模板(dedecms英文模板 英文网站程序的选择)
- sql怎么把表移到另一个数据库中(sql存储过程实例--动态根据表数据复制一个表的数据到另一个表)
- linux系统登录mysql数据库(Linux手动部署远程的mysql数据库的方法详解)
- python爬虫面试经历(搞定这套Python爬虫面试题面试会so easy)
- SQL SERVER中@@TRANCOUNT
- C#enum枚举
- python 3.10 循环语法(Python3.4学习笔记之常用操作符,条件分支和循环用法示例)
- h5打开小程序点允许(html5跳转小程序wx-open-launch-weapp踩坑)
- 云服务器的五大特征(云服务器可以分为哪些类别?)
- 阿里云linux服务器怎么进(阿里云Linux主机安装WDCP管理面板包含lamp+lnmp+lanmp环境)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9