Pygame库的使用-1 初识Pygame

2023-05-16

本文参考链接如下:

  • 1.https://zhuanlan.zhihu.com/p/136664950
  • 2.https://www.bilibili.com/video/BV1bE411p7Ue?from=search&seid=1875084054523930161

以下内容摘自知乎

Python游戏和动画——Pygame模块

Python游戏和动画——Pygame模块

学习编程,如果只是简单的敲代码,虽然也能看到程序运行的一些效果,但也会觉得枯燥乏味。

我们前面介绍了海龟绘图,这样学起来也是很有趣的,通过简单的代码,可以在屏幕上绘制想要的图形。

这里开始介绍使用Python库Pygame来编写游戏和动画,用代码来编写属于自己的游戏,想想就是特别有成就感,学习编程也会变得非常有趣。

Pygame是一个开源的Python模块,可以用于2D游戏制作,包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。

Pygame让游戏开发者不再被底层语言束缚,可以更多的关注游戏的功能和逻辑。

安装Pygame

Windows使用pip命令进行安装

pip3 install pygame

安装成功

>>> import pygame
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
导入Pygame模块
import pygame

我们在使用Pygame设计一款游戏或动画的时候,需要包括三个部分:

一、初始设置

首先需要导入模块,创建游戏屏幕,然后初始化一些重要的变量

二、游戏循环

游戏循环使用while循环,使游戏持续更新屏幕和处理事件,除非用户退出程序,否则就会一直执行

三、退出程序

当用户想要停止程序的时候,使用一种方式来结束程序

Pygame窗口坐标系统

我们在学习turtle绘图的时候,认识了一个笛卡尔坐标系,原点(0,0)位于屏幕的中心并且越向屏幕上方,y坐标的值就越大。

这里我们有一个新的坐标系统,Pygame窗口的左上角是原点(0,0),越往右x的值越来越大,x为正值,负值在屏幕的左边;同样越往下,y坐标的值也越来越大,y坐标的负值在窗口的上方,也是位于屏幕的外面。

绘制一个圆
import pygame

# 初始设置
pygame.init() # 初始化pygame
screen = pygame.display.set_mode((800,600)) # Pygame窗口
pygame.display.set_caption("Pygame绘制图形") # 标题
keep_going = True
RED = (255,0,0)  # 红色,使用RGB颜色
radius = 20 # 半径

# 游戏循环
while keep_going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            keep_going = False
    pygame.draw.circle(screen,RED,(200,300),radius)
    pygame.display.update()  # 刷新屏幕

# 退出程序
pygame.quit()

第一步:初始设置

import pygame

# 初始设置
pygame.init() # 初始化pygame
screen = pygame.display.set_mode((800,600)) # Pygame窗口
pygame.display.set_caption("Pygame绘制图形") # 标题
keep_going = True # 循环变量标值
RED = (255,0,0)  # 红色,使用RGB颜色
radius = 20 # 半径

这里我们首先导入了pygame模块,然后在使用pygame.init()对其进行初始化。pygame.display.set_mode((800,600))创建了一个800*600像素的显示窗口,保存到变量screen中,以后的程序中就可以直接调用变量screen即可。

pygame.display.set_caption("Pygame绘制图形")给屏幕窗口添加一个标题。

在Pygame中创建的游戏窗口,或者加载到窗口的图形都称为Surface。Surface screen即显示窗口,是绘制其他所有图形的主要窗口。

我们定义了一个布尔类型的标志,来控制程序的持续运行,想要暂停,只需要改变keep_going的值为False。

定义了一个颜色常量RED,用于设置RGB三色值(255,0,0),第一个值代表红色R,第二个值代表绿色G,第三个值代表蓝色B,每一个值的范围都是从0~255。

还在程序开始设置了圆的半径,变量radius = 20

第二步:游戏循环

# 游戏循环
while keep_going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            keep_going = False
    pygame.draw.circle(screen,RED,(200,300),radius)
    pygame.display.update()  # 刷新屏幕

while keep_going:如果keep_going为True游戏一直持续进行,持续运行Pygame窗口,直到用户选择退出。

for event in pygame.event.get():这里使用for循环遍历Pygame中的所有事件,if event.type == pygame.QUIT:如果用户按下关闭按钮,退出程序,这样变量keep_going变为False,游戏结束。

游戏持续进行的时候,即用户没有触发关闭窗口的事件。我们开始在Pygame窗口绘制其他Surface图像,pygame.draw.circle(screen,RED,(200,300),radius)在屏幕窗口(200,300)位置上绘制半径为20的,填充颜色为RED的圆。

第一个参数screen,指定要在那个Surface上绘制图形。pygame.draw除了可以绘制圆(circle),还可以绘制矩形、线段等形状。

最后:游戏结束

# 退出程序
pygame.quit()

当用户退出游戏的时候,调用这段代码,清楚所有的设置,关闭屏幕窗口。

加载图片
import pygame

# 初始化设置
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("加载图片")
keep_going = True
pic = pygame.image.load("logo_lofi.png") # 图片加载

# 游戏循环
while keep_going:
    for event in pygame.event.get(): # 循环遍历事件
        if event.type == pygame.QUIT:
            keep_going = False

    screen.blit(pic,(100,100)) # 在Surface上绘制图片
    pygame.display.update()
# 游戏退出
pygame.quit()

这一次并不是绘制一个圆,而是将我们保存的图片加载到Surface屏幕上。注意图片保存的位置和我们.py文件在同一个目录下。

pic = pygame.image.load("logo_lofi.png")从一个文件载入图像,保存到变量pic中,在以后的程序中通过pic来引用这个图片。

将图片绘制到Surface屏幕上并且更新绘制窗口,确保所有内容出现在屏幕上。

    screen.blit(pic,(100,100)) # 在Surface上绘制图片
    pygame.display.update()

blit()方法将我们从文件中加载的图片pic绘制到screen屏幕的(100,100)位置上。

这里简单介绍如何使用Pygame绘制图形和加载图片到Surface屏幕上。创建一个Pygame游戏或动画的三个步骤。后面的内容会详细介绍如何使用此模块来创建一款属于自己的游戏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pygame库的使用-1 初识Pygame 的相关文章

随机推荐

  • Docker学习系列(三):Ubuntu下使用Docker的基本指令记录及一些注意事项

    最近发现极客学院docker教程 xff0c 还不错 xff0c 可以参考 1 Dockerhub下载镜像 注 xff1a Dockerhub地址 有两种方式可以获得新的镜像 直接从dockerhub下载编译好的image xff08 该编
  • 安装visual studio 2012,并配置opencv

    在同学的帮助下 xff0c 终于成功配置了vs 43 opencv xff0c 将详细过程记录在此 xff0c 方便以后查阅 参考1 本文目录 安装vs2012安装opencv在vs2012中配置opencv测试opencv是否配置成功关于
  • Ubuntu下如何安装TensorFlow

    本文目录 引言基于Anaconda的tensorflow安装 1 下载linux版本的Anaconda安装包2 安装Anaconda 利用anaconda安装tensorflow 1 建立一个 conda 计算环境2 激活环境使用 cond
  • Visualizing and Understanding Convolutional Networks

    Matthew D Zeiler xff0c Rob Fergus Visualizing and Understanding Convolutional Networks CVPR2014 论文下载 推荐一篇比较好的blog xff1a
  • 对极几何基本概念

    对极几何 xff08 Epipolar Geometry xff09 描述的是两幅视图之间的内在射影关系 xff0c 与外部场景无关 xff0c 只依赖于摄像机内参数和这两幅试图之间的的相对姿态 什么是对极几何粗略概念对极几何相关的一个重要
  • Python·Win10通过Anaconda安装python和Jupyter(python2.7为例)

    Python Win10通过Anaconda安装python和Jupyter xff08 python2 7为例 xff09 标签 xff08 空格分隔 xff09 xff1a 软件安装 管理 使用 Python 本文主要讨论如何利用Ana
  • Ubuntu14.04安装build-essential失败,包依赖问题如何解决?

    正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有一些软件包无法被安装 如果您用的是 unstable 发行版 xff0c 这也许是 因为系统无法达到您要求的状态造成的 该版本中可能会有一些您需要的软件 包尚未
  • 最优化理论·非线性最小二乘

    最优化理论 非线性最小二乘 标签 xff08 空格分隔 xff09 xff1a 数学 非线性最小二乘问题是椭圆拟合中最易遇到的优化问题 xff0c 本文主要对非线性二乘的基本分析做简单介绍 1 什么是最小二乘问题 目标函数能够写为m个函数平
  • 所有线段的交点-初级篇

    所有线段的交点 初级篇 标签 xff08 空格分隔 xff09 xff1a 计算机视觉 图形学 所有线段的交点 初级篇 参考 xff1a 计算几何 算法与应用 邓俊辉 译 清华大学出版社 本文以一个小例子介绍如何计算所有线段交点 xff0c
  • 服务器docker使用

    这篇文章是我给自己的一个记录 xff0c 有些名词可能写的不专业 xff0c 请见谅 docker里面有两个概念 xff0c 一个是镜像 xff0c 一个是容器 镜像可以看做是类 xff0c 容器就是类的实例 在学院的服务器上 xff0c
  • MPC模型预测控制

    这篇主要讲一下模型预测控制 xff0c 如果对PID控制了解的同学 xff0c 那效果更好 如果不了解PID控制 xff0c 还是熟悉下比较好 模型预测控制 xff0c 顾名思义 xff0c 基于模型 xff0c 预测未来 xff0c 进行
  • MPC自学资料总结

    1 书籍 xff1a 无人驾驶车辆模型预测控制 2 视频 xff1a https ww2 mathworks cn videos understanding model predictive control part 1 why use m
  • [授权发表]基于 VNCServer + noVNC 构建 Docker 桌面系统

    by Falcon of TinyLab org 2015 05 02 最初发表 xff1a 泰晓科技 聚焦嵌入式 Linux xff0c 追本溯源 xff0c 见微知著 xff01 原文链接 xff1a 基于 VNCServer 43 n
  • 【c语言】字符串输出方式 | API仿真

    创作不易 xff0c 本篇文章如果帮助到了你 xff0c 还请点赞 关注支持一下 gt x16966 lt 主页专栏有更多知识 xff0c 如有疑问欢迎大家指正讨论 xff0c 共同进步 xff01 给大家跳段街舞感谢支持 xff01 c语
  • 【c语言】结构体详解 | 结构体数组/指针

    创作不易 xff0c 本篇文章如果帮助到了你 xff0c 还请点赞 关注支持一下 gt x16966 lt 主页专栏有更多知识 xff0c 如有疑问欢迎大家指正讨论 xff0c 共同进步 xff01 x1f525 c语言系列专栏 xff1a
  • stm32F4系列学习笔记1: keil使用

    一 在keil的find功能中有几个find options xff0c 查了一下 xff0c 这几个find options的意思是 1 Match case 区分大小写 2 Regular expression 正则表达式 3 Matc
  • STM32F4系列学习笔记2:IO相关

    一 寄存器说明 xff1a STM32F4 GPIO最多有9组 xff0c 从GPIOA GPIOI xff0c 每组IO有16个Pin xff0c STM32F407有7组 xff0c 所以一共有7 16 61 112个引脚 xff0c
  • 树莓派Ubuntu20.04创建虚拟内存文件并设置开机自动启用

    目录 一 检查有没有虚拟内存 二 创建虚拟内存文件并设置权限 三 设置并激活虚拟内存文件 四 设置开机自动启用虚拟内存 五 重启后检测虚拟内存是否正常启用 一 检查有没有虚拟内存 树莓派Ubuntu20 04默认没有虚拟内存 xff0c 可
  • 如何配置 QEMU 虚拟机网络

    关于 QEMU 的网络策略 QEMU 提供 4 种网络通信方法 xff0c 它们分别是 xff1a User mode stack xff1a 用户协议栈方式 xff0c 这种方式的大概原理是在 QEMU 进程中实现一个协议栈 xff0c
  • Pygame库的使用-1 初识Pygame

    本文参考链接如下 xff1a 1 https zhuanlan zhihu com p 1366649502 https www bilibili com video BV1bE411p7Ue from 61 search amp seid