一、tkinter模块的GUI

  基本上使用tkinter来开发GUI应用需要以下5个步骤:

  1. 导入tkinter模块中我们需要的东西。
  2. 创建一个顶层窗口对象并用它来承载整个GUI应用。
  3. 在顶层窗口对象上添加GUI组件。
  4. 通过代码将这些GUI组件的功能组织起来。
  5. 进入主事件循环(main loop)。

代码:

 import tkinter
import tkinter.messagebox def main():
flag = True
#修改标签上的文字
def change_label_text():
nonlocal flag
flag = not flag
color,msg = ('red','hello,world')\
if flag else ('blue','Goodbye,world!')
label.config(text=msg, fg=color)
#确认退出
def confirm_to_quit():
if tkinter.messagebox.askokcancel('温馨提示','确认要退出吗?'):
top.quit() #创建顶层窗口
top = tkinter.Tk()
#设置窗口大小
top.geometry('240x160')
#设置窗口标题
top.title('小游戏')
#创建标签对象并添加到顶层窗口
label = tkinter.Label(top,text='hello,world!',font = 'Arial -32',fg = 'red')
label.pack(expand = 1)
#创建一个装按钮的容器
panel = tkinter.Frame(top)
#创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数
button1 = tkinter.Button(panel,text = '修改',command = change_label_text)
button1.pack(side = 'left')
button2 = tkinter.Button(panel,text = '退出',command = change_label_text)
button2.pack(side = 'right')
panel.pack(side = 'bottom')
#开启主事件循环
tkinter.mainloop()
#主函数
if __name__ == '__main__':
main()

二、pygame的游戏窗口

制作游戏窗口

 import pygame
def main():
# 初始化导入pygame中的模块
pygame.init()
#初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running = True
# 开启一个事件 循环处理发生的事件
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()

运行效果:

三、往游戏窗口里画一个圆

通过pygame中draw模块的函数在窗口上绘图,可以绘制的图形包括:线条、矩形、多边形、圆、椭圆、圆弧等。需要说明的是,屏幕坐标系是将屏幕左上角设置为坐标原点(0, 0),向右是x轴的正向,向下是y轴的正向,在表示位置或者设置尺寸的时候,我们默认的单位都是像素。所谓像素就是屏幕上的一个点,你可以用浏览图片的软件试着将一张图片放大若干倍,就可以看到这些点。pygame中表示颜色用的是色光三原色表示法,即通过一个元组或列表来指定颜色的RGB值,每个值都在0~255之间,因为是每种原色都用一个8位(bit)的值来表示,三种颜色相当于一共由24位构成,这也就是常说的“24位颜色表示法”。

 import pygame
def main():
# 初始化导入pygame中的模块
pygame.init()
#初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球') # 设置窗口的背景色
screen.fill((242,242,242))
# 绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)
pygame.draw.circle(screen,(255,0,0),(100,100),30,0)
# 刷新当前窗口
pygame.display.flip()
running = True
# 开启一个事件 循环处理发生的事件
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()

画了一个圆:

四、加载图像

使用pygame中image模块的函数来加载图像,再通过之前获得的窗口对象的blit方法渲染图像。

    ball_image = pygame.image.load("ball.png")

  # 刷新当前窗口
pygame.display.flip()

效果图

五、实现动画效果

要让上面代码中的小球动起来,可以将小球的位置用变量来表示,并在循环中修改小球的位置再刷新整个窗口即可。

import pygame
def main():
# 初始化导入pygame中的模块
pygame.init()
#初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 定义变量来表示小球在屏幕上的位置
x,y = 50,50
running = True
# 开启一个事件 循环处理发生的事件
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False # 设置窗口的背景色
screen.fill((255, 255, 255))
# 绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)
pygame.draw.circle(screen,(255,0,0),(x,y),30,0)
# 刷新当前窗口
pygame.display.flip()
# 每隔50毫秒改变小球的位置
pygame.time.delay(50)
x,y = x+5,y+5 running = True if __name__ == '__main__':
main()

效果图

http://ww1.sinaimg.cn/large/0069IOlEly1gepsrb3ndwg30rs0kumxp.gif

六、加入碰撞检测,做成一个大球吃小球小游戏

代码

from enum import Enum,unique
from math import sqrt
from random import randint
import pygame # unique
class Color(Enum):
"""颜色配置"""
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
BLACK = (0,0,0)
WHITE = (255,255,255)
GRAY = (242,242,242) #随机获取颜色
def random_color():
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
return (r,g,b)
class Ball(object):
"""球类"""
def __init__(self,x,y,radius,sx,sy,color = Color.RED):
#初始化方法
self.x = x
self.y = y
self.radius = radius
self.sx = sx
self.sy = sy
self.color = color
self.alive = True
def move(self,screen):
"""移动"""
self.x += self.sx
self.y += self.sy
if self.x - self.radius <= 0 or self.x + self.radius >= screen.get_width():
self.sx = -self.sx
if self.y - self.radius <= 0 or self.y + self.radius >= screen.get_width():
self.sy = -self.sy
def eat(self,other):
"""吃其他球"""
if self.alive and other.alive and self != other:
dx,dy = self.x - other.x,self.y-other.y
distance = sqrt(dx**2 + dy ** 2)
if distance <self.radius+other.radius and self.radius > other.radius:
other.alive = False
self.radius = self.radius + int(other.radius*0.146)
def draw(self,screen):
"""在窗口上绘制球"""
pygame.draw.circle(screen,self.color,(self.x,self.y),self.radius,0) def main():
balls = [] # 装球的容器
# 初始化导入pygame中的模块
pygame.init() #初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球') running = True
# 开启一个事件 循环处理发生的事件
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#处理鼠标事件的代码
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
x,y = event.pos# 获取鼠标点击的事件
radius = randint(10,100)
sx,sy = randint(-10,10),randint(-10,10)
color = Color.random_color()
# 在鼠标点下的位置创建一个球(大小/速度和颜色随机)
ball = Ball(x,y,radius,sx,sy,color)
# 将球添加到列表容器中
balls.append(ball) # 设置窗口的背景色
screen.fill((255, 255, 255))
# 取出容器中被吃掉的球,如果没吃掉就绘制,吃掉了就移除
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball) # 刷新当前窗口
pygame.display.flip()
# 每隔50毫秒改变小球的位置
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
#检查有没有吃到其它的球
for other in balls:
ball.eat(other) if __name__ == '__main__':
main()

最终效果图:

点击查看

python小游戏-pygame模块的更多相关文章

  1. Python小游戏、小程序

    python 小游戏之摇骰子猜大小 python 实现一个双色球生成程序 python-循环与判断练习题

  2. Python小游戏——外星人入侵(保姆级教程)第一章 05重构模块game_functions

    系列文章目录 第一章:武装飞船 05:重构:模块game_functions 一.重构 在大型项目中,经常需要在添加新代码前重构既有代码.重构旨在简化既有代码的结构,使其更容易扩展.在本节中,我们将创 ...

  3. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

  4. Python 小游戏 Bunny

    最近在学习Python,所以上网找了一个小程序练练手. 关于这款名为[Bunny]的小游戏,详细请看下面的链接: http://www.oschina.net/translate/beginning- ...

  5. Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围

    系列文章目录 第一章:武装飞船 07调整飞船速度 08限制飞船活动范围 一.代码及演示 1.修改settings 修改文件:settings.py 点击查看代码 #渗透小红帽python的学习之路 # ...

  6. Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动

    系列文章目录 第一章:武装飞船 06:让飞船移动 一.驾驶飞船 下面来让玩家能够左右移动飞船.我们将编写代码,在用户按左或右箭头键时做出响应.我们将首先专注于向右移动,再使用同样的原理来控制向左移动. ...

  7. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类

    系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...

  8. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  9. windows下 python 如何安装pygame模块

    本机系统:win7,Pyhon版本: 3.6.0 1. 安装下载python官网 https://www.python.org/ 下载地址 https://www.python.org/downloa ...

随机推荐

  1. Linux学习笔记(五)搜索命令

    搜索命令 whereis which locate find whereis 英文原意:locate the binary,source,and manual page files for a com ...

  2. 可以用 Python 编程语言做哪些神奇好玩的事情?除了生孩子不能,其他全都行!

    坦克大战 源自于一个用Python写各种小游戏的github合集,star数1k.除了坦克大战外,还包含滑雪者.皮卡丘GOGO.贪吃蛇.推箱子.拼图等游戏. 图片转铅笔画 帮助你快速生成属于自己的铅笔 ...

  3. webug3.0靶场渗透基础Day_2(完)

    第八关: 管理员每天晚上十点上线 这题我没看懂什么意思,网上搜索到就是用bp生成一个poc让管理员点击,最简单的CSRF,这里就不多讲了,网上的教程很多. 第九关: 能不能从我到百度那边去? 构造下面 ...

  4. Playbook中标签的使用(五)

    一个playbook文件中,执行时如果想执行某一个任务,那么可以给每个任务集进行打标签,这样在执行的时候可以通过-t选择指定标签执行, 还可以通过--skip-tags选择除了某个标签外全部执行等 [ ...

  5. centos7.4安装docker

    安装docker的前提条件 1)关闭系统的防火墙和selinux 2)  同步系统时间 3)系统必须是centos7以上 移除旧版本yum remove docker docker-client do ...

  6. office 365 激活

    将以下代码复制到记事本 @echo off title Activate Microsoft Office ALL versions &echo - Microsoft Office Prof ...

  7. java 之 jsp简介

    什么是jsp? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java ...

  8. c++ 如何开N次方?速解

    c++ 如何开N次方?速解   直接上代码 #include <iostream> #include <cmath> using namespace std; typedef ...

  9. CloudCC CRM探讨:精细流程管理与员工悟性培养

    很多企业主招聘时更喜欢专业的销售,来给他们创造价值.老板不愿意花时间在"磨刀上",而喜欢员工一来就"砍柴".即使是建立培训机制,仍然很大程度依赖于员工自己的悟性 ...

  10. 2016年全球IC设计大厂营收排名:高通稳居龙头

    TrendForce旗下拓墣产业研究所最新研究统计,2016年全球前十大无晶圆IC设计业者营收中,高通(QCT)仍然稳居龙头宝座.而前三大业者高通.新博通(Broadcom)与联发科合计营收占前十名营 ...