Python基于Tkinter模块实现的弹球小游戏

本文实例讲述了Python基于Tkinter模块实现的弹球小游戏。分享给大家供大家参考,具体如下:

#!usr/bin/python
#-*- coding:utf-8 -*-
from Tkinter import *
import Tkinter
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) #参数:左上角坐标(x1,y1),右下角坐标(x2,y2),填充色
    self.canvas.move(self.id,245,100) #把椭圆形移到画布的中心(245,100)
    starts = [-3,-2,-1,1,2,3] #用一个列表随机一个小球的初始横向 X 坐标
    random.shuffle(starts) #利用shuffle函数使starts列表混排一下,这样starts[0]就是列表中的随机值
    self.x = starts[0] #所以X可能是以列表中的任意一个值开始的
    self.y = -2 #初始的竖直方向运动的速度
    self.canvas_height = self.canvas.winfo_height() #调用画布上的winfo_height函数来获取画布当前的高度
    self.canvas_width = self.canvas.winfo_width() #保证小球不会从屏幕的两边消失,把画布的宽度保存到一个新的对象变量canvas_width中
    self.hit_bottom =False
  def hit_paddle(self,pos): #包含小球的当前坐标
    paddle_pos = self.canvas.coords(self.paddle.id) #得到拍子的坐标,并把它们放到变量paddle_pos中
    #pos[2]包含了小球的右侧X坐标,pos[0]包含了小球左侧的X坐标
    if pos[2] >= paddle_pos[0] and pos[0] <=paddle_pos[2]: #如果小球的右侧大于球拍的左侧,并且小球的左侧小于球拍的右侧
    #pos[3]表示小球的底部(此处判断小球的底部是否在球拍的顶部和底部之间,注:坐标从上到下是逐渐变大的,零点在上面)
      if pos[3] >=paddle_pos[1] and pos[3] <= paddle_pos[3]:#可以理解为,第一个if判断和球拍的长那个面是否碰撞,第二个是侧面
        return True
    return False
  def draw(self):
    self.canvas.move(self.id,self.x,self.y)
    pos = self.canvas.coords(self.id) #coords函数通过ID来返回当前画布上任何画好的东西的当前X和Y坐标
    if pos[1] <=0: #coords函数返回一个由四个数字组成的列表来表示坐标(椭圆的左上角坐标和右下角的)
      self.y=2#判断是否撞击到顶面
    if pos[3] >=self.canvas_height:#判断小球是否撞到了屏幕的底部,如果小球一旦碰到了画布的底端,游戏就结束了i
      self.hit_bottom = True
      print"你输了!"
    if self.hit_paddle(pos) == True: #hit_paddle()函数是用来判断小球是否撞击到球拍(如果撞到了就改变方向运动"-"代表反向,2代表速度)
      self.y = -2
    if pos[0] <=0:#最后两个if判断小球是否撞到了画布的左侧和右侧
      self.x = 2
    if pos[2] >= self.canvas_width:
      self.x = -2
#球拍类
class Paddle:
  def __init__(self,canvas,color):
    self.canvas = canvas
    self.id = canvas.create_rectangle(0,0,100,10,fill = color) #创建一个长方形球拍
    self.canvas.move(self.id,200,300)#把球拍的坐标移到(200,300)横向200像素,纵向300像素
    self.x =0
    self.canvas_width = self.canvas.winfo_width() #保存画布宽度的变量
    self.canvas.bind_all('<KeyPress-Left>',self.turn_left)#把turn_left()函数绑定到左方向键上
    self.canvas.bind_all('<KeyPress-Right>',self.turn_right)#把turn_right()函数班规定到右方向键上
  def draw(self):
    self.canvas.move(self.id,self.x,0) #在x的方向上移动球拍
    pos =self.canvas.coords(self.id)#获得球拍的坐标
    if pos[0] <=0:#如果球拍运动到左边缘的时候,就让球拍停止运动,以下的elif道理相同
      self.x = 0
    elif pos[2] >= self.canvas_width:
      self.x =0
  def turn_left(self,evt): #移动球拍向左
    self.x =-2
  def turn_right(self,evt):#向右
    self.x =2
t = Tkinter.Tk()
t.title("www.jb51.net Game") #用t对象中的title函数给窗口加一个标题,t对象是由t=Tk()创建的
t.resizable(0,0)#规定窗口不可调,两个参数0,0,表示在水平和竖直方向上都不可改变
t.wm_attributes("-topmost",1)#调用wm_attributes来告诉tkinter把包含我们画布的窗口放到所有其他窗口之前(-topmost)
canvas = Canvas(t,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()#按前一行给出的宽度和高度的参数来调整自身大小
t.update()#做好初始化
paddle = Paddle(canvas,'blue')
ball = Ball(canvas,paddle,'red')
while 1:
  if ball.hit_bottom ==False:
    ball.draw()
    paddle.draw()
  else:
    break
  t.update_idletasks()
  t.update()#快速更新画布
  time.sleep(0.01)
t.mainloop()

本机测试结果如下:

更多关于Python相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

时间: 2018-12-26

python3.5使用tkinter制作记事本

tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程.tkinter的优点是简单易用.与Python的结合度好.tkinter在Python 3.x下默认集成,不需要额外的安装操作:不足之处为缺少合适的可视化界面设计工具,需要通过代码来完成窗口设计和元素布局. 本节采用的Python版本为3.x,如果想在python 2.x下使用tkinter,请通过apt-get进行安装.需要注意的是,不同Python版本下的tkinter使用方式可能略有不同,建议

Python实现的弹球小游戏示例

本文实例讲述了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, canv

Python Tkinter简单布局实例教程

本文实例展示了Python Tkinter实现简单布局的方法,示例中备有较为详尽的注释,便于读者理解.分享给大家供大家参考之用.具体如下: # -*- coding: utf-8 -*- from Tkinter import * root = Tk() # 80x80代表了初始化时主窗口的大小,0,0代表了初始化时窗口所在的位置 root.geometry('80x80+10+10') # 填充方向 ''' Label(root, text = 'l1', bg = 'red').pack(f

Python使用pygame模块编写俄罗斯方块游戏的代码实例

文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位置.每个方块由4个盒子组成. 形状--不同类型的方块.这里形状的名字被叫做T, S, Z ,J, L, I , O.如下图所示: 模版--用一个列表存放形状被翻转后的所有可能样式.全部存放在变量里,变量名字如S_SHAPE_TEMPLATE or J_SHAPE_TEMPLATE 着陆--当一个方块

python3.3使用tkinter开发猜数字游戏示例

利用这个小游戏可以学习一下ython3.3中tkinter的使用方法 复制代码 代码如下: # -*- coding: utf-8 -*-import tkinter as tkimport sysimport randomimport re number = random.randint(0,1024)running = Truenum = 0nmaxn = 1024nminn = 0 def eBtnClose(event):    root.destroy() def eBtnGuess(

用Python编写一个简单的俄罗斯方块游戏的教程

俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. 附源码: from Tkinter import * from tkMessageBox import * import random import time #俄罗斯方块界面的高度 HEIGHT = 18 #俄罗斯方块界面的宽度 WIDTH = 10

python3使用tkinter实现ui界面简单实例

复制代码 代码如下: import timeimport tkinter as tk class Window:    def __init__(self, title='nms', width=300, height=120, staFunc=bool, stoFunc=bool):        self.w = width        self.h = height        self.stat = True        self.staFunc = staFunc       

python开发的小球完全弹性碰撞游戏代码

完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改小球的移动速度 源码部分: 复制代码 代码如下: #python tkinter#python version 3.3.2 from tkinter import * '''    判断    两个小球    {        圆心:A(x1,y1)  半径:r  X轴速度:Vax  Y轴速度:Vay        圆心:B(x2,y2)  半径:R  X轴

python的tkinter布局之简单的聊天窗口实现方法

本文实例展示了一个python的tkinter布局的简单聊天窗口.分享给大家供大家参考之用.具体方法如下: 该实例展示的是一个简单的聊天窗口,可以实现下方输入聊天内容,点击发送,可以增加到上方聊天记录列表中.现在只是"单机"版. 右侧预留了空位可以放点儿其它东西.感兴趣的读者可以进一步做成socket双方互聊. 以下是功能代码部分: from Tkinter import * import datetime import time root = Tk() root.title(unic

Python tkinter模块弹出窗口及传值回到主窗口操作详解

本文实例讲述了Python tkinter模块弹出窗口及传值回到主窗口操作.分享给大家供大家参考,具体如下: 有些时候,我们需要使用弹出窗口,对程序的运行参数进行设置.有两种选择 一.标准窗口 如果只对一个参数进行设置(或者说从弹出窗口取回一个值),那么可以使用simpledialog,导入方法: from tkinter.simpledialog import askstring, askinteger, askfloat 完整例子 import tkinter as tk from tkin

基于python的Tkinter实现一个简易计算器

本文实例介绍了基于python的Tkinter实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下 第一种:使用python 的 Tkinter实现一个简易计算器 #coding:utf-8 from Tkinter import * import time root = Tk() def cacl(input_str): if "x" in input_str: ret = input_str.split("x") return int(ret[0]) *

python用tkinter实现一个简易能进行随机点名的界面

今天学到Python 有一个名为 random 的内置模块,可用于生成随机数, 这个好玩~可以用来做为上课随机点名的程序了哈哈.. def main_cor(): import random i = random.randrange(0,29) with open('roll_call.txt', encoding='utf-8') as file_obj: contents = file_obj.read() stuff = contents.split(' ') s = stuff[i] s

js实现一个简易计算器

本文实例为大家分享了JS实现简易计算器的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <title>14th_test</title> <meta charset="gb2312"> </head> <body> <h1>这是一个标题</h1> <p>以下是一个简易计算器</p> <tab

基于python的Tkinter编写登陆注册界面

tkinter创建登陆注册界面,供大家参考,具体内容如下 import tkinter as tk from tkinter import messagebox #设置窗口居中 def window_info(): ws = window.winfo_screenwidth() hs = window.winfo_screenheight() x = (ws / 2) - 200 y = (hs / 2) - 200 print("%d,%d" % (ws, hs)) return x

Python正则表达式实现简易计算器功能示例

本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+1)*5.1-3+2**2 import re class SimpleCalc(object): # 表达式检测 def check(self,exp): # 合法字符检测 res = re.findall(r"[^\d\+\-\*/\(\)\.]", exp) print(res) i

JS制作简易计算器的实例代码

做一个简易计算器,效果图片 c表示清空,为一个空字符串 +/-表示该值为正还是负 %表示当前值/100 ←表示退格,往前删除一个值 eval 函数是能够计算出字符串表达式或者语句的结果,把结果求出来. 代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"

基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算

方法一: 结合lambda表达式.函数调用运算符.标准库函数对象.C++11标准新增的标准库function类型,编写一个简单的计算器,可实现简单的加.减.乘.除.取余二元运算.代码如下: #include "pch.h" #include <iostream> #include <functional> #include <map> #include <string> using namespace std; int add(int i

Python Tkinter实现简易计算器功能

闲暇时间用tkinter写了个简易计算器,可实现简单的加减乘除运算,用了Button和Entry2个控件,下面是代码,只是简单的用了偏函数partial,因为那么多button的大部分参数都是一样的,使用偏函数可以简化参数传递,避免同样的参数传递写N次. # -*- coding: utf-8 -*- #author: Cullen #import the module from Tkinter import * import tkFont import os from functools im

Python简易计算器制作方法代码详解

主要用到的工具是Python中的Tkinter库 比较简单 直接上图形界面和代码 引用Tkinter库 from tkinter import * 建立主窗口对象 window=Tk() #设置窗口对象 window.title('counting machine') window.geometry("350x280") window['bg']='red' 建立标签框以及标签(将运算字符串显示在上面) frame=LabelFrame(window,bg='yellow',width

利用Tkinter(python3.6)实现一个简单计算器

前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起来感觉写小工具还挺方便的,当时搜到的第一个库便是Tkinter就直接开始写了 后来发现QT很不错的样子,下个实验就用QT吧.然后关于Tkinter(python3.6) 计算器源码 ennn.....有的命名不规范....... 首先对于python中栈的实现是通过list的方式模拟 pop()出栈