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程序设计有所帮助。

(0)

相关推荐

  • python3.5使用tkinter制作记事本

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

  • 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 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的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使用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实现的弹球小游戏.分享给大家供大家参考,具体如下: 弹球 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实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下 第一种:使用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开发的小球完全弹性碰撞游戏代码

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

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

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

随机推荐