python Pygame的具体使用讲解

article/2025/8/26 16:38:20

一、实验介绍

1.1 实验内容

在本节课中,我们将讲解Pygame的常用对象及其操作,包括图形、动画、文字、音频等,确保同学们对Pygame有一个基础的了解,同时为后续课程做好准备。

  • Pygame图形
  • Pygame动画
  • Pygame文字
  • Pygame音频
  • Pygame事件

1.2 实验环境

  • window10
  • python 3.8

二、开发准备

本次主要利用Pygame模块来进行开发,首先我们需要打开Xfce终端,并使用 pip 命令来安装Pygame

pip install pygame

安装完成之后进入Python的交互界面,输入以下命令查看是否成功安装。

import pygame

若无异常,则说明安装成功。

三、实验步骤

3.1 HelloWorld
首先开始我们第一个HelloWorld程序:

# -*- coding: UTF-8 -*-
# helloworld.py# 导入所需的模块
import pygame, sys
# 导入所有pygame.locals里的变量(比如下面大写的QUIT变量)
from pygame.locals import *# 初始化pygame
pygame.init()# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((500, 400))# 设置窗口标题
pygame.display.set_caption('Hello World')# 程序主循环
while True:# 获取事件for event in pygame.event.get():# 判断事件是否为退出事件if event.type == QUIT:# 退出pygamepygame.quit()# 退出系统sys.exit()# 绘制屏幕内容pygame.display.update()

效果图如下:
在这里插入图片描述
这里解释一下上面程序的运行方式
一个游戏循环(也可以称为主循环)就做下面这三件事:

  • 处理事件
  • 更新游戏状态
  • 绘制游戏状态到屏幕上
    在这里插入图片描述

3.2 绘制图形

Pygame的坐标原点(0,0)点位于左上角,X轴自左向右,Y轴自上向下,单位为像素。

这里介绍一下常用的方法:

pygame.draw.line(Surface, color, start_pos, end_pos, width)此方法用于绘制一条线段

pygame.draw.aaline(Surface, color, start_pos, end_pos, blend)此方法用于绘制一条抗锯齿的线
pygame.draw.lines(Surface, color, closed, pointlist, width)此方法用于绘制一条折线

pygame.draw.rect(Surface, color, Rect)此方法用于绘制一个矩形

pygame.draw.rect(Surface, color, Rect, width)此方法用于绘制一个矩形框

pygame.draw.ellipse(Surface, color, Rect)此方法用于绘制一个椭圆

pygame.draw.ellipse(Surface, color, Rect, width)此方法用于绘制一个椭圆框

pygame.draw.polygon(Surface, color, pointlist, width)此方法用于绘制一个多边形
pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width)此方法用于绘制一条弧线
pygame.draw.circle(Surface, color, Rect, radius)此方法用于绘制一个圆
以下为示例代码:

# 导入需要的模块
import pygame, sys
from pygame.locals import *
from math import pi# 初始化pygame
pygame.init()# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((400,300))# 设置窗口标题
pygame.display.set_caption('Drawing')# 定义颜色
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)# 设置背景颜色
screen.fill(WHITE)# 绘制一条线
pygame.draw.line(screen, GREEN, [0, 0], [50,30], 5)# 绘制一条抗锯齿的线
pygame.draw.aaline(screen, GREEN, [0, 50],[50, 80],True)# 绘制一条折线
pygame.draw.lines(screen, BLACK, False, [[0, 80], [50, 90], [200, 80], [220, 30]], 5)# 绘制一个空心矩形
pygame.draw.rect(screen, BLACK, [75, 10, 50, 20], 2)# 绘制一个矩形
pygame.draw.rect(screen, BLACK, [150, 10, 50, 20])# 绘制一个空心椭圆
pygame.draw.ellipse(screen, RED, [225, 10, 50, 20], 2)# 绘制一个椭圆
pygame.draw.ellipse(screen, RED, [300, 10, 50, 20])# 绘制多边形
pygame.draw.polygon(screen, BLACK, [[100, 100], [0, 200], [200, 200]], 5)# 绘制多条弧线
pygame.draw.arc(screen, BLACK,[210, 75, 150, 125], 0, pi/2, 2)
pygame.draw.arc(screen, GREEN,[210, 75, 150, 125], pi/2, pi, 2)
pygame.draw.arc(screen, BLUE, [210, 75, 150, 125], pi,3*pi/2, 2)
pygame.draw.arc(screen, RED, [210, 75, 150, 125], 3*pi/2, 2*pi, 2)# 绘制一个圆
pygame.draw.circle(screen, BLUE, [60, 250], 40)# 程序主循环
while True:# 获取事件for event in pygame.event.get():# 判断事件是否为退出事件if event.type == QUIT:# 退出pygamepygame.quit()# 退出系统sys.exit()# 绘制屏幕内容pygame.display.update()

效果图如下:
在这里插入图片描述

3.3 实现动画

由于人类眼睛的特殊生理结构,当所看画面的帧率高于24的时候,就会认为是连贯的,此现象称之为 视觉暂留 。

帧率(Frame rate)是用于测量显示帧数的量度,所谓的测量单位为每秒显示帧数(Frames per Second,简称:FPS)
一般来说30fps是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。

在我们原有坐标系的基础上添加偏移量,再重新绘制,依次一张一张的循环绘制下去,就会得到我们想要的物体移动的效果。
Pygame实现动画主要用到的方法:

pygame.image.load(filename)加载一张图片

pygame.Surface.blit(source, dest, area=None, special_flags = 0)将图片绘制到屏幕相应坐标上(后面两个参数默认,可以不传)

pygame.time.Clock()获得pygame的时钟

pygame.time.Clock.tick(FPS)设置pygame时钟的间隔时间

以下为示例代码:

# -*- coding: UTF-8 -*-
# animation.py# 导入需要的模块
import pygame, sys
from pygame.locals import *# 初始化pygame
pygame.init()# 设置帧率(屏幕每秒刷新的次数)
FPS = 30# 获得pygame的时钟
fpsClock = pygame.time.Clock()# 设置窗口大小
screen = pygame.display.set_mode((500, 400), 0, 32)# 设置标题
pygame.display.set_caption('Animation')# 定义颜色
WHITE = (255, 255, 255)# 加载一张图片(所用到的的图片请参考1.5代码获取)
img = pygame.image.load('image/242.png')# 初始化图片的位置
imgx = 10
imgy = 10# 初始化图片的移动方向
direction = 'right'# 程序主循环
while True:# 每次都要重新绘制背景白色screen.fill(WHITE)# 判断移动的方向,并对相应的坐标做加减if direction == 'right':imgx += 5if imgx == 380:direction = 'down'elif direction == 'down':imgy += 5if imgy == 300:direction = 'left'elif direction == 'left':imgx -= 5if imgx == 10:direction = 'up'elif direction == 'up':imgy -= 5if imgy == 10:direction = 'right'# 该方法将用于图片绘制到相应的坐标中screen.blit(img, (imgx, imgy))for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()# 刷新屏幕pygame.display.update()# 设置pygame时钟的间隔时间fpsClock.tick(FPS)

效果图如下:
在这里插入图片描述

3.4 绘制文字

如果你想绘制文字到屏幕上,Pygame提供了很方便的方法使用.ttf字体文件,这样我们就能很轻易的将文字绘制在屏幕上了。

主要用到的方法:

pygame.font.Font(filename, size)

filename:字体文件的文件名;

size:字体的高height,单位为像素;

pygame.font.Font.render(text, antialias, color, background=None)

text:要显示的文字;

antialias: 是否抗锯齿;

color:字体颜色;

background:背景颜色(可选参数);

.get_rect()

获得一个对象的rect,以便于设置其坐标位置

以下为示例代码:

# 导入需要的模块
import pygame, sys
from pygame.locals import *# 初始化pygame
pygame.init()# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((500,400))# 设置窗口的标题
pygame.display.set_caption('Font')# 定义颜色
WHITE = (255, 255, 255)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 128)# 通过字体文件获得字体对象(可以自己下载一个字体包实验看看)
fontObj = pygame.font.Font('resources/ARBERKLEY.ttf', 50)# 配置要显示的文字
textSurfaceObj = fontObj.render('Pygame', True, BLUE, GREEN)# 获得要显示的对象的rect
textRectObj = textSurfaceObj.get_rect()# 设置显示对象的坐标
textRectObj.center = (250, 200)# 设置背景
screen.fill(WHITE)# 绘制字体
screen.blit(textSurfaceObj, textRectObj)# 程序主循环
while True:# 获取事件for event in pygame.event.get():# 判断事件是否为退出事件if event.type == QUIT:# 退出pygamepygame.quit()# 退出系统sys.exit()# 绘制屏幕内容pygame.display.update()

效果图如下:
在这里插入图片描述

3.5 播放音频

在Pygame里播放音频有两个方法,一个用来播放特效声音,一个用来播放背景音乐:

pygame.mixer.Sound(filename)

该方法返回一个Sound对象,调用它的.play( )方法,即可播放较短的音频文件(比如玩家受到伤害、收集到金币等);

pygame.mixer.music.load(filename)

该方法用来加载背景音乐,之后调用pygame.mixer.music.play( )方法就可以播放背景音乐(Pygame只允许加载一个背景音乐在同一个时刻)

以下为示例代码:

# -*- coding: UTF-8 -*-
# audio.py# 导入需要的模块
import pygame, sys
from pygame.locals import *# 初始化pygame
pygame.init()# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((500,400))# 设置窗口的标题
pygame.display.set_caption('Audio')# 定义颜色
WHITE = (255, 255, 255)# 设置背景
screen.fill(WHITE)# 加载并播放一个特效音频文件
sound = pygame.mixer.Sound('resources/bounce.ogg')
sound.play()# 加载背景音乐文件
pygame.mixer.music.load('resources/bgmusic.mp3')# 播放背景音乐,第一个参数为播放的次数(-1表示无限循环),第二个参数是设置播放的起点(单位为秒)
pygame.mixer.music.play(-1, 0.0)# 程序主循环
while True:# 获取事件for event in pygame.event.get():# 判断事件是否为退出事件if event.type == QUIT:# 停止播放背景音乐pygame.mixer.music.stop()# 退出pygamepygame.quit()# 退出系统sys.exit()# 绘制屏幕内容pygame.display.update()

3.6 事件

Pygame里常用的事件如下表:

事件产生途径参数
QUIT用户按下关闭按钮none
ACTIVEEVENTPygame被激活或者隐藏gain, state
KEYDOWN键盘被按下unicode, key, mod
KEYUP键盘被放开key, mod
MOUSEMOTION鼠标移动pos, rel, buttons
MOUSEBUTTONDOWN鼠标按下pos, button
MOUSEBUTTONUP鼠标放开pos, button
VIDEORESIZEPygame窗口缩放size, w, h
以下为示例代码:
# -*- coding: UTF-8 -*-
# event.py# 导入需要的模块
import pygame, sys
from pygame.locals import *# 定义颜色
WHITE = (255, 255, 255)# 初始化pygame
pygame.init()# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((500,400), 0, 32)# 设置窗口的标题
pygame.display.set_caption('Event')# 设置背景
screen.fill(WHITE)# 程序主循环
while True:# 获取事件for event in pygame.event.get():# 判断事件是否为退出事件if event.type == QUIT:# 退出pygamepygame.quit()# 退出系统sys.exit()# 获得鼠标当前的位置  if event.type ==MOUSEMOTION:print(event.pos)# 获得鼠标按下的位置if event.type ==MOUSEBUTTONDOWN:print("鼠标按下:",event.pos)# 获得鼠标抬起的位置if event.type ==MOUSEBUTTONUP:print("鼠标抬起:",event.pos) # 获得键盘按下的事件  if event.type == KEYDOWN:if(event.key==K_UP or event.key==K_w):print("上")if(event.key==K_DOWN or event.key==K_s):print("下")if(event.key==K_LEFT or event.key==K_a):print("左")if(event.key==K_RIGHT or event.key==K_d):print("右")# 按下键盘的Esc键退出if(event.key==K_ESCAPE):# 退出pygamepygame.quit()# 退出系统sys.exit()# 绘制屏幕内容pygame.display.update()

效果图如下:
在这里插入图片描述
四、实验总结

本节课程我们主要讲解了Pygame的一些常用对象及操作,这些都是我们后续课程需要用到的知识点,希望同学们能熟练掌握这些内容。若想要深入了解,可参考下方Pygame官方文档的链接。


http://chatgpt.dhexx.cn/article/H8494Oqf.shtml

相关文章

Pygame 官方文档 - 中译版

pygame 文档 Pygame之家【Pygame Home】 帮助内容【Help Contents】 指导索引【Reference Index】最有用的东西 【Most useful stuff】Color | display | draw | event | font | image | key | locals mixer | mouse | Rect | Surface | time | music | pygame 高级的东西【…

pygame入门

pygame入门 文章目录 pygame入门说明一、pygame的安装二、pygame模块概览三、pygame的“hello world”四、事件理解事件事件检索处理鼠标事件处理键盘事件事件过滤产生事件 五、显示全屏显示改变窗口尺寸复合模式其他 六、字体创建font对象使用字体中文字体 七、颜色八、图像使…

pygame下载(非常详细)

pygame安装 第一次安装pygame,从网上查了很多资料,各种方式都有,我发现了一种很简单的方法,不用去官网找,直接输入命令就能下载,希望能给大家提供一些参考! 打开终端 1、winR 打开终端&#…

Pygame是什么

Python 是当下最为火热,且功能最为全面的一门编程语言。Python 之所以深受大家喜爱, 除了可以被应用到“人工智能”领域之外,还可以延伸到数据分析、Web 开发、自动化测试、自然语言处理、游戏开发等各个领域。这一切的实现得益于 Python 有一个强大的第三方库,这个第三方库…

【pygame游戏开发】这几个经典游戏,勾起了少年的快乐

给大家分享几个好玩有趣的小游戏,既提升了学习的兴趣,又提升了学习效率,告别枯燥的学习。 一、飞机大战 1、源码部分 模块导入 import sys import cfg import pygame from modules import *游戏界面 def GamingInterface(num_player, scr…

python-颜色识别

使用Python来做颜色识别,使用了openCV import cv2 import numpy as np import time class ColorTac(object):def colorTacing(self):print(-*-COLOR TACKING MODE-*-)print(you can input:blue,red,yellow,green,purple.and must input one)color input("Col…

android颜色识别

写的一个关于颜色识别的小功能。识别主要颜色。 思路:遍历像素点,找出出现次数最多的像素值作为主要颜色。 采用的方法有: 1.调用摄像头,拍照,裁剪,压缩。 2.找出色值。 3.转换成hsv空间,进行颜…

颜色及图片识别原理,颜色识别传感器介绍

光及颜色 1.光:是人类眼睛可以看见的一种电磁波,也称可见光谱。在科学上的定义,光是指所有的电磁波谱。光是由光子为基本粒子组成,具有粒子性与波动性,称为波粒二象性,一般人的眼睛所能接受的光的波长在380…

颜色识别总结

颜色检测 1、目标检测detr 【End-to-End Object Detection with Transformers】 论文解读 源码复现 2、目标检测deformable detr 【DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION】 论文解读 源码复现 3、目标检测mmdet中的deformable detr …

Python-OpenCV实现简单的颜色识别(对红色和蓝色识别并输出)

摄像头识别红色和蓝色并框选,当该颜色为摄像头屏幕上大多数颜色时打印出该颜色的名称 新手学习笔记,第一次写博客,若有错误还请指出( ~_ )~ 1.调包 import cv2 import numpy as np from matplotlib import pyplot as…

Python3识别判断图片主要颜色并和颜色库进行对比的方法

【更新】主要提供两种方案: 方案一:(参考网上代码,感觉实用性不是很强)使用PIL截取图像,然后将RGB转为HSV进行判断,统计判断颜色,最后输出RGB值 方案二:使用opencv库函…

【Python 之HSV颜色识别】

Python 之HSV颜色识别 前言一、HSV颜色模型二、黄色识别三、使用步骤1.引入库2.处理图片3.识别结果 总结 前言 汽车自动驾驶,需要颜色识别,如黄色/红色车道线,蓝色车牌。 本文从HSV颜色模型出发,提供一种识别黄色车道线的方法供参…

OpenCV识别图像中的颜色

OpenCV识别图像中的颜色 利用OpenCV识别图像中区域的颜色 效果如图所示: 代码中需要读取的图像RGB对照表: 代码中所需读取的BGR对照表在此下载:图像RBG对照表 import cv2 import pandas as pdimg_path "./rgb_pic/color.jpg" i…

openCV python 颜色识别

图像识别 这个代码的功能是根据摄像头输入的图像,识别红色块,绿色块的坐标,并返回红绿色块的中心点的图像坐标(单位为像素) 当然,识别色可以自己更改,如蓝色,白色,黑色…

K210视觉体验—颜色识别

K210视觉体验—颜色识别 使用设备ZTFR开发板 颜色识别Lab 颜色空间构造函数示例代码1:识别RGB(红,绿,蓝)示例代码2:识别指定颜色 使用设备 ZTFR开发板 颜色识别 MaixPy 集成了 RGB565 颜色块识别 find_blo…

Halcon 学习笔记八:颜色识别

Halcon 学习笔记八:颜色识别 一、图像处理需要的知识二、图像处理的预处理和分割过程二、颜色识别的方法三、例子一四、例子二五、例子三 一、图像处理需要的知识 1.图像处理基础(rgb(hsv),gray) 2.图像灰度变换(scale_img) 3.图像基础(emph…

基于Python的颜色识别器

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 在这篇文章中,我们将展示如何使用Python构建颜色识别器。此过程也称为“颜色检测”。我们将创建一个基本应用程序,该应用程序将帮助我们检测图像…

python颜色识别demo

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。 H: 0 — 180 S: 0 — 255 V: 0 — 255 此处把部分…

openCV-python实现颜色识别

本文将介绍使用OpenCV实现颜色识别的详细步骤 代码。 背景介绍 在截取出模板匹配到的logo区域之后,需要判断logo是什么颜色。本案例中要识别的对象是纯色的所以适用下面的颜色识别方法,有不同需求的请斟酌借鉴。 原理介绍 数字图像处理中常用的采用模型…

python颜色识别,46行代码实现865种颜色识别,看过的都说顶呱呱!

1.先介绍我做的颜色识别的功能,简单的说,就是该脚本可以打开图片,在图片上点击某个区域,可以识别某个区域的颜色,颜色识别准确度很高,很多时候颜色识别是辅助物体的颜色识别,但这个代码你们可以…