14天学习训练营之 初识Pygame

news2024/10/6 22:23:39

目录

学习知识点

PyGame 之第一个 PyGame 程序

导入模块

初始化

​​1.screen

2. 游戏业务

学习笔记

当 init () 的时候,它在干什么?

 init () 实际上检查了哪些东西呢?

它到底 init 了哪些子模块?

总结


14天学习训练营导师课程:
李宁《Python Pygame游戏开发入门与实战》
李宁《计算机视觉OpenCV Python项目实战》1
李宁《计算机视觉OpenCV Python项目实战》2
李宁《计算机视觉OpenCV Python项目实战》3

努力是为了在平庸生活中变得更好~
学习有时候是枯燥的,但收获的快乐是加倍的

学习知识点

PyGame 之第一个 PyGame 程序

导入模块

在使用 PyGame 之前,需要先通过 import pygame 导入 PyGame 模块。

#导入PyGame模块
import pygame
#导入sys模块
import sys

初始化

导入完成后要做的就是初始化 PyGame,它完成 PyGame 中所有模块的初始化操作。​​​​​​​​​​​​​​

#初始化PyGame
pygame.init()

​​​​​​​​​​​​​​​​1.screen

screen 从字面意识理解即为屏幕,在 PyGame 中,screen 本质上是一个 Surface 对象。Surface 对象是 PyGame 中重要的部分,可以把它想像成我们要绘制图形、图像的一张白纸,在这张白纸上,我们可以绘制任意的形状、图像、文字等。

screen=pygame.display.set_mode((800,600))

以上代码,是通过 PyGame 中的 display 模块设置主窗口的大小,也就是说 screen 是我们整个程序的主窗口,可以理解为我们最大的画布,我们后面创建的画布(Surface 对象)都将绘制到这个最大的画布上。

pygame.display.set_caption("第一个PyGame程序")

以上代码,是通过 PyGame 中的 display 模块设置主窗口的标题,即标题栏中的内容。


2. 游戏业务

在游戏中我们需要不断的进行某些操作,例如当游戏中的角色位置或状态发生变化时,需要重新绘制屏幕,用户对鼠标和键盘的操作等,因此,在游戏中,我们需要不断的循环对屏幕进行更新,监听用户的操作。只有当用户点击关闭按钮时,游戏退出,应用程序结束。所以在程序中设置了一个死循环,即循环条件为 True 的 while 循环,该循环内即为游戏的业务逻辑。

#PyGame业务逻辑
while True:
    # 循环获取事件,监听事件状态
    for event in pygame.event.get():
        # 判断用户是否点了"X"关闭按钮,并执行if代码段
        if event.type == pygame.QUIT:
            # 卸载所有模块
            pygame.quit()
            # 终止程序,确保退出程序
            sys.exit()

在循环内部执行游戏的业务逻辑,例如不断绘制屏幕、监听用户操作。以上代码中 while 循环内部的 for 循环,用来循环获取用户的事件,如果用户的事件类型是点击关闭按钮,则卸载 PyGame 的所有模块,并且退出游戏。

通常在 while 循环内部,我们需要做三件事,分别是获取事件、更新游戏状态、重新绘制屏幕。

通过以上的代码,我们即可以创建一个 PyGame 的应用了。


学习笔记

当 init () 的时候,它在干什么?

init 这个单词在我们用 python 进行面向对象开发的时候是跑不了的。理解 python 的__init__其实就是和这里的 init 作用差不多——做的工作都是初始化。

在解释这个概念时,首先还是以专有名词入手—— 初始化(initialize vt.)。至于其作用,我的解释是这样的:

我们已经知道 python 有一个特殊的 “工具包(模块)” 叫 pygame 了。在我们要动手用它完成我们的想法之前,电脑这个“强迫症”需要我们检查一遍,这个工具包是否完整,能否正常给我们提供帮助。而这个检查的动作,就是 pygame.init()。


 init () 实际上检查了哪些东西呢?

这个其实也不难得到答案。我直接在 shell 执行了这个函数:

>>> import pygame
>>> pygame.init()
(6, 0)

不明所以的,他给了我一个元组 (6,0),我也很不理解,这个 6 和 0 分别代表什么意思。所以查阅了 pygame 的官方文档:

initialize all imported pygame modules

init() -> (numpass, numfail)

Initialize all imported pygame modules. No exceptions will be raised if a module fails, but the total number if successful and failed inits will be returned as a tuple. You can always initialize individual modules manually, but pygame.init() is a convenient way to get everything started. The init() functions for individual modules will raise exceptions when they fail.

You may want to initialize the different modules separately to speed up your program or to not use things your game does not.

It is safe to call this init() more than once: repeated calls will have no effect. This is true even if you have pygame.quit() all the modules.

翻译如下:

初始化所有导入的 pygame 模块。如果模块失败,则不会引发异常,但如果成功且失败的总数将作为元组返回。您可以随时手动初始化单个模块,但 pygame.init () 初始化所有导入的 pygame 模块是一种方便的方法来启动所有内容。各个模块的 init () 函数会在失败时引发异常。

您可能希望单独初始化不同的模块以加速您的程序或不使用您的游戏没有的东西。

不止一次调用此 init () 是安全的:重复调用将不起作用。即使你有 pygame.quit () 所有模块也是如此。


它到底 init 了哪些子模块?

>>> import pygame
>>> pygame.init()
(6, 0)
>>> pygame.display.init()
>>> pygame.font.init()
>>> pygame.joystick.init()
>>> pygame.mixer.init()
>>> pygame.freetype.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pygame' has no attribute 'freetype'
>>> pygame.midi.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pygame' has no attribute 'midi'
>>> pygame.cdrom.init()
>>> pygame.scrap.init()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pygame.error: No display mode is set

我把 pygame 官网上面的 doc 里介绍的所有带有 init 的子模块都运行了一遍。其中 midi 和 freetype 这两个模块已经没有了(吐槽一下官方的文档吧,都没了还放着嘛)。最后一个 scrap 初始化是因为没有窗口。这样的话,其实已经有 5 个模块是被初始化了。但是 scrap 在没有窗口的情况下会报错,到底算不算一个 init。还需要之后再仔细看看文档和源码吧。


总结

Pygame 是被设计用来写游戏的 python 模块集合,Pygame 是在优秀的 SDL 库之上开发的功能性包。使用 python 可以导入 pygame 来开发具有全部特性的游戏和多媒体软件,Pygame 是极度轻便的并且可以运行在几乎所有的平台和操作系统上。

之后还需要逐步深入才能有更多的认识,一起加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年计算机毕设选题推荐

同学们好&#xff0c;这里是海浪学长的毕设系列文章&#xff01; 对毕设有任何疑问都可以问学长哦! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越…

·工业 4.0 和第四次工业革命详细介绍

工业 4.0 是制造/生产及相关行业和价值创造过程的数字化转型。 目录 工业 4.0 指南 工业 4.0 与第四次工业革命互换使用&#xff0c;代表了工业价值链组织和控制的新阶段。 网络实体系统构成了工业 4.0 的基础&#xff08;例如&#xff0c;「智慧机器」&#xff09;。他们使用…

基于SpringBoot+Vue的疫苗接种管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7 数据库管理工具&#xff1a;Navicat 12 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / MyEclipse 是否Maven项…

实验二 帧中继协议配置

计算机网络实验实验二 帧中继协议配置一、实验目的二、实验内容三、实验条件四、实验步骤4.1 连接帧中继交换网4.2 创建DLCI4.3 创建串行接口间的虚电路映射关系4.4 配置路由器的串行接口七、思考题实验二 帧中继协议配置 一、实验目的 掌握路由器上配置帧中继协议的方法 掌握…

SSM整合(一)

SSM整合之简单使用通用mapper 1.准备工作 1.1 在java文件夹下面创建所需要的目录 1.2 导入SSM整合时所需要的所有依赖 <properties><!--这个是统一一些spring插件的包名,避免因为版本不一样而报错--><spring.version>5.3.22</spring.version></p…

SAP S4 FI 后台详细配置教程文档 PART2 (财务会计的基本设置篇)

本篇是系列文章的第二部分&#xff0c;目标是家在配置“字段状态变式”和“年度与期间的配置” 目录 1、 字段状态变式 1.1定义字段状态变式 1.2 向字段状态变式分配公司代码 2、会计年度与记账期间 2.1维护会计年度变式 2.2 向一个会计年度变式分配公司代码 2.3定义未结…

服务器虚拟化有什么好处

服务器虚拟化是一种逻辑角度出发的资源配置技术&#xff0c;是物理实际的逻辑抽象。对于用户&#xff0c;虚拟化技术实现了软件跟硬件分离&#xff0c;用户不需要考虑后台的具体硬件实现&#xff0c;而只需在虚拟层环境上运行自己的系统和软件。 说起服务器虚拟化这个技术&…

你的新进程是如何被内核调度执行到的?(下)

接上文你的新进程是如何被内核调度执行到的&#xff1f;&#xff08;上&#xff09; 四、新进程加入调度 进程在 copy_process 创建完毕后&#xff0c;通过调用 wake_up_new_task 将新进程加入到就绪队列中&#xff0c;等待调度器调度。 //file:kernel/fork.c long do_fork(.…

表白墙服务器版【交互接口、服务器端代码、前端代码、数据存入文件/数据库】

文章目录 一、准备工作二、约定前后端交互接口三、实现服务器端代码 四、调整前端页面代码五、数据存入文件六、数据存入数据库一、准备工作 1) 创建 maven 项目2) 创建必要的目录 webapp, WEB-INF, web.xml&#xff1b;web.xml如下&#xff1a;<!DOCTYPE web-app PUBLIC&qu…

家居行业如何实现智能化?快解析来助力

什么是智能家居&#xff1f;主要是指利用先进的电子通信技术&#xff0c;将居家生活有关的各个子系统有机结合在一起&#xff0c;通过网络化便可以对这些系统进行智能控制与管理。智能家居概念之所以逐渐普及&#xff0c;得益于物联网、大数据、人工智能等新兴技术的进步。智能…

科学计算模型 Numpy 详解

本文主要介绍Numpy&#xff0c;并试图对其进行一个详尽的介绍。 通过阅读本文&#xff0c;你可以&#xff1a; 了解什么是 Numpy掌握如何使 Numpy 操作数组&#xff0c;如创建数组、改变数组的维度、拼接和分隔数组等掌握 Numpy 的常用函数&#xff0c;如数组存取函数、加权平均…

表关联查询

表关联查询 1.表别名 当表的名字很长或者执行一些特殊查询时&#xff0c;为了方便操作或者需要多次使用相同的表时&#xff0c;可以为表指定别名&#xff0c;以替代表原来的名称。 在为表取别名时&#xff0c;要保证不能与数据库中的其他表的名称冲突。 对单表做简单的别名查询…

能否通过手机号查询他人位置及技术实现(省流:不能)

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1fad2;每日emo&#xff1a;纪念我死去的爱情 &#x1f342;灵感来源&#xff1a;艺术源于生活&#xff0c…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.2 Spring 缓存使用方式

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.2 Spring 缓存使用方式5.2.1 Spring 缓存使用5.2.…

数字集成电路设计(五、仿真验证与 Testbench 编写)(二)

文章目录4. 信号时间赋值语句4.1 时间延迟的语法说明4.2 时间延迟的描述形式4.3 边沿触发事件4.3.1 事件表达式4.3.2 边沿触发语法格式4.4 电平敏感事件4. 信号时间赋值语句 &#xff01;&#xff01;信号赋值语句是硬件描述语言非常重要的一条语句&#xff0c;是对于任意信号…

Zookeeper:Zookeeper的主从选举机制

ZAB 协议&#xff0c;全称 Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子广播协议&#xff09;&#xff0c;是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的一致性协议。基于该协议&#xff0c;ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副…

业务定制型异地多活架构设计

1个原理 大道至简-异地多活核心原理 异地多活本质上是 CAP 中的AP 大道至深-CAP 粒度 CAP 关注的粒度是数据&#xff0c;而不是系统&#xff0c;需要根据不同业务的数据特点来设计异地多活 延迟 CAP 是忽略网络延迟的 &#xff0c;但工程落地不可能做到零延迟 分区容忍…

【Linux】linux中你不得不爱的命令集(上)

Linux命令集 我们将要介绍的命令并不是linux中所有的命令&#xff0c;是我们常见的和经常要使用的命令。 我们所用的linux版本是centos7&#xff0c;我们的linux搭建是在腾讯云服务器上搭建的&#xff0c;借助Xshell登录服务器&#xff0c;在root下进行命令行的操作。 目录 L…

[附源码]java毕业设计社区生鲜仓库管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

异地多活架构的3种模式

业务定制型异地多活 按照业务的优先级进行排序&#xff0c;优先保证核心业务异地多活 基于核心业务的流程和数据&#xff0c;设计定制化的异地多活架构 优点 对基础设施无强要求&#xff0c;例如机房部署、存储系统、时延等&#xff0c;一般部署在远距离的两个城市&#xff…