Pygame Zero(pgzrun)游戏库介绍

news2024/11/17 23:29:48

Pygame Zero(pgzrun)游戏库介绍

pgzero是python的一个第三方库。pgzrun 是 python game zero run 的缩写, 它对 Pygame 进行了封装, 屏蔽了繁琐枯燥的框架代码, 让学习者可以更专注于游戏的实现逻辑, 并且更快看到成果。

官网https://pygame-zero.readthedocs.io/en/stable/

中文https://pygame-zero.readthedocs.io/zh_CN/latest/introduction.html

pgzrun库的安装与导入说明

安装Pygame Zero(pgzrun)之前需要先安装Pygame,因为Pygame Zero是基于Pygame开发的一个简化框架。关于Pygame可参见 https://blog.csdn.net/cnds123/article/details/119514520

特别提醒一下,pgzrun模块(库)安装的时候,名称用pgzero,在cmd中输入

pip install pgzero

回车

【关于安装安装第三方库的更多情况,可参见:https://blog.csdn.net/cnds123/article/details/104393385】

导入的时候用pgzrun

import pgzrun

pgzrun库使用基础

坐标系

以左上角为原点 ( 0, 0 )

项目的目录一般如下图所示:

images/ 目录是Pygame Zero查找代码中图片的标准默认目录。

music/ 是 Pygame Zero 查找音乐文件的默认标准目录。

sounds/ 是 Pygame Zero 查找声音文件的默认标准目录。

Pygame Zero支持的图片格式

.png

.jpg

.gif

推荐使用 png 类型, 因为这种类型支持透明背景。

音乐文件:音乐文件通常是指较长时长的音频剪辑,如歌曲、乐曲等,用于背景音乐、配乐或其他需要长时间播放的场合。常用的格式:

MP3 (.mp3)

OGG (.ogg)

WAV (.wav)

声音文件:声音文件通常是指短时的音频片段,如音效、声效等,用于游戏、动画、影视等中的特定声音效果,如打击声、爆炸声、脚步声等各种效果音。声音文件相对较短,通常以较低的比特率进行编码,以节省存储空间和加载时间。常用的格式:

WAV (.wav)

OGG (.ogg)

特别提示,将资源文件(Resource Files,如音乐文件、声音文件、图片)与代码文件放置在同一目录下,或标准默认位置,这样可以直接使用文件名即可。但你也可以将资源文件选择在其他位置存储图片和声音文件,只需在代码中提供正确的文件路径即可。

无论是将资源文件与代码文件放置在同一目录下、默认位置还是其他位置,重要的是确保代码中使用的文件路径与实际的文件位置匹配。这样,Pygame Zero 就能正确加载和使用你想要的资源。

在Pgzero中,通过两个常量值来确定程序运行窗口的大小,WIDTH和HEGIHT是Pgzero预设的用来确定场景的宽和高的两个常量。还可用TITLE来设置窗口的标题。需要大写。

Pgzero中生成一个游戏角色十分简单,只需一行代码即可。Actor类是Pgzero库提供的角色类,调用该类的构造方法并传入角色图片和位置便可生成一个角色对象。

<变量> =Actor("str", (x, y))    #生成一个游戏角色,导入一个名为str图片

Actor类的构造方法有两个基本参数,第一个参数是角色的图片文件名,角色图片可以调用的图片格式是.jpg、.png、.gif,调用图片文件时无需扩展名,第二个参数是角色的初始位置坐标。

Pgzreo提供了很多的内置对象,以便进行各项操作。其中内置对象screen(屏幕)主要用来在程序运行窗口进行绘制图形和图像及文字信息等,在游戏编程中经常会用到screen对象提供的很多的绘制方法。screen(屏幕)对象的fill()方法:可以设定游戏程序运行窗口的背景颜色,其参数可以是RGB颜色模式的三个颜色分量值或者颜色英文字符串。

Pygame Zero定义了一些其他固定名称的函数(约定好的函数),用于处理特定的游戏事件或执行其他功能。你可以根据需要在你的代码中实现这些函数,以便响应相应的事件。以下是一些常用的固定函数名称:

draw():这个函数用于绘制游戏场景。你可以在这个函数中使用 Pygame 的绘图函数来绘制图像、文本和等,并将它们显示在屏幕上。Pgzero库自带函数,它可以显示各种图形或图像,它是Pygame、Pygame Zero库约定好的函数,程序运行以后,会被自动执行。所有绘制角色的代码,都需要写在这个函数中。用户可以在程序中将自己的代码定义在draw( )函数内。

update():这个函数用于更新游戏逻辑和状态。你可以在这个函数中实现游戏中各种元素的移动、碰撞检测、状态变化等更新操作。update()函数是Pygame zero库自带的函数,每秒自动运行60次用以不断更新游戏,程序运行以后,会被自动执行。所有更新游戏场景、游戏角色的代码,所有对角色对象操作的代码都要写在update()函数中。

on_key_down(key):这个函数在用户按下某个键时被调用。你可以根据不同的键来执行相应的操作,例如移动角色、触发事件等。key参数表示被按下的键的名称。

on_key_up(key):这个函数在用户释放某个键时被调用。你可以根据需要对键释放事件作出响应,例如停止角色移动等。key参数表示被按下的键的名称。

on_mouse_down(pos, button):这个函数在用户按下鼠标按钮时被调用。你可以检测按钮的位置,然后执行相应的操作,如捕获点击事件、进行拖动等。button参数表示释放的鼠标按钮的名称,pos参数表示释放发生的位置。

on_mouse_up(pos, button):这个函数在用户释放鼠标按钮时被调用。你可以根据需要对鼠标松开事件做出响应,如停止拖动等。button参数表示释放的鼠标按钮的名称,pos参数表示释放发生的位置。

on_mouse_move(pos, rel, buttons):当鼠标移动时调用。pos参数表示当前鼠标位置,rel参数表示相对于上次移动的位置变化,buttons参数表示当前按下的鼠标按钮的状态。

on_quit():当关闭游戏窗口时调用。

示例

pgzero设计游戏一般步骤

1.导入pgzrun。

2.定义游戏场景和角色:在游戏开始之前,你需要定义游戏的场景和角色。这包括创建屏幕、背景图像、精灵(Sprites)和其他游戏元素。

3.编写游戏逻辑:在游戏中,你需要编写处理用户输入、更新游戏状态和绘制游戏场景的逻辑代码。这可能涉及到键盘或鼠标事件的处理、碰撞检测、移动精灵等。

4.启动游戏循环:使用pgzrun.go()来启动游戏循环。这将负责处理游戏的主要逻辑,并根据每个帧更新游戏状态和绘制场景。

下面给出一个简单的例子,

项目文件结构如下:

音乐文件自己找一个吧,我这里是my_music.mp3。

源码如下:

import pgzrun

TITLE = "pgzrun示例" #设置窗口顶部的标题
WIDTH = 400
HEIGHT = 300

alien = Actor("player.png")
alien.pos = (WIDTH // 2, HEIGHT // 2)

def on_key_down(key):
    if key == keys.SPACE:
        play_sound()

def draw():
    screen.clear()
    screen.blit("background.jpg", (0, 0)) #添加背景图片
    alien.draw()

def update():
    pass  # 游戏逻辑更新

def play_sound():    
    music.play("music.mp3")  # 替换为你的音乐文件路径

pgzrun.go()

运行之,效果如下:

上面示例中,首先导入了 pgzrun 模块并设置了游戏窗口的宽度和高度。然后定义了一个名为 " player.png " 的角色,并将其初始位置设定在屏幕中央,在draw()中添加了背景图片。并实现了当用户按下空格键时,播放音效。

下面给出一个打小老鼠的游戏

游戏效果:小老鼠在从左到右循环移动,用户鼠标击中时表示小老鼠被打发出叫声。

项目文件结构如下:

声音文件自己找一个吧,我这里是howl.wav,是小老鼠被打(用户鼠标击中)时的叫声。

源码如下

import time  # 导入time模块

import pgzrun  # 导入pgzero的模块运行工具pgzrun

TITLE = "打小老鼠游戏" #设置窗口顶部的标题
WIDTH = 800  # 画布宽
HEIGHT = 400  # 画布高

cartoon = Actor('cartoon')  # 用images文件夹中的图像'cartoon'生成演员
cartoon.pos = 0, 200  # 定位

def draw():  # 绘制画面(显示钩子)
    screen.clear()  # 清屏
    screen.fill((255, 255, 255))  # 填色
    cartoon.draw()  # 绘制演员

def update():  # 更新数据(显示钩子)
    cartoon.left += 2  # 右移
    if cartoon.left > WIDTH:  # 如果超出屏幕右边界
        cartoon.right = 0  #  重新放到屏幕左侧外

def on_mouse_down(pos):  # 当鼠标按下(事件钩子)
    if cartoon.collidepoint(pos):  # 如果与鼠标位置碰撞
        time.sleep(0.1)  # 暂停
        set_cartoon_hurt()  # 调用函数
    else:
        print("You missed me!")  # 打印消息

def set_cartoon_hurt():  # 外星人被击中后的动作
    cartoon.image = 'cartoon_hurt'  # 换用images文件夹中的图像'cartoon_hurt'
    sounds.howl.play()  # 播放sounds文件夹中的声音文件'howl'
    clock.schedule_unique(set_cartoon_normal, 1.0)  # 用定时器调用一次函数

def set_cartoon_normal():  # 外星人复原
    cartoon.image = 'cartoon'  # 换用原图

pgzrun.go()  # 用pgzrun运行本脚本

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

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

相关文章

单样本微调给ChatGLM2注入知识~

前方干货预警&#xff1a;这可能也是一篇会改变你对LLM微调范式&#xff0c;以及对LLM原理理解的文章。 同时这也是一篇非常有趣好玩&#xff0c;具有强大实操性的ChatGLM2微调喂饭级教程。 我们演示了使用AdaLoRA算法&#xff0c;使用1条样本对ChatGLM2-6b实施微调。几分钟就成…

【Redis】五大数据类型(操作命令)

&#x1f3af;Redis 命令 &#x1f6a9;Redis 键(key) 这些是 Redis 数据库中的命令&#xff0c;用于对数据类型进行操作和管理。以下是每个命令的含义和用法&#xff1a; DEL&#xff1a;删除一个或多个键。DUMP&#xff1a;将一个键的值转储到一个字符串中。EXPIRE&#x…

【数据结构二叉树OJ系列】4、翻转二叉树(又称求二叉树的镜像)

目录 法一、 法二、 题述&#xff1a; 翻转一颗二叉树。 输入&#xff1a; 输出&#xff1a; 题中已给&#xff1a; struct TreeNode {int val;struct TreeNode* left;struct TreeNode* right; }; TreeNode* invertTree(struct TreeNode* root) 法一、 思路&#xff1a;…

操作指南 | 如何使用Foundry在Moonbeam上进行部署

Foundry是一种以太坊开发环境&#xff0c;可帮助构建者管理依赖项、编译项目、测试或部署合约以及通过指令与区块链进行交互。Foundry已成为流行的开发智能合约开发环境&#xff0c;仅需要使用Solidity即可进行操作。Moonbeam在官方文档网站提供了有关将Foundry与Moonbeam网络结…

vector [] 赋值出现的报错问题

下面这段代码的作用是创建了一个整数类型的vector&#xff08;std::vector<int>&#xff09;并对其进行操作。以下是代码的详细说明&#xff1a; 使用reserve(10)方法为向量分配至少10个元素的存储空间。reserve() 预留了额外的存储空间&#xff0c;以避免后续添加元素时…

C++之typeof和typeid用法(一百五十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

动态规划--Fibonacci数列 III

描述 众所周知&#xff0c;Fibonacci数列是一个著名数列。它的定义是&#xff1a; 本题要求采用第三种方法&#xff1a;简单的动态规划。 用数组把求出来的 Fibonacci 数列保存下来&#xff0c;以免后面要的时候再算一次。 输入描述 每行一个整数 i &#xff0c;表示 Fibona…

【C++修炼之路】string 模拟实现

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、默认成员函数1、全缺省构造2、析构3、拷贝构造&#xff08;深拷贝&#xff09;4、赋值重载&#xff08;深拷贝&#xff09;…

Langchain 新手完全指南

Langchain 可能是目前在 AI 领域中最热门的事物之一&#xff0c;仅次于向量数据库。 它是一个框架&#xff0c;用于在大型语言模型上开发应用程序&#xff0c;例如 GPT、LLama、Hugging Face 模型等。 它最初是一个 Python 包&#xff0c;但现在也有一个 TypeScript 版本&…

Git gui教程---第五篇 Git gui的使用 查看提交历史

查看提交历史 1.点击菜单栏的“版本库”&#xff0c;选择“图示master分支的历史” 2.出现的界面就是显示当前分支的提交历史了

Java基础---Java中创建对象方式

目录 使用new关键字 使用反射机制 使用clone方法 使用反序列化 使用方法句柄 使用Unsafe分配内存 使用new关键字 这是最常见的也是最简单的创建对象的方式通过这种方式还可以调用任意的构造函数&#xff08;无参的和有参的&#xff09; 使用反射机制 运用反射手段&#…

单个电源模块带电感的直流压降仿真(一)

单个电源模块带电感的直流压降仿真(一) 下面实例分析单个电源模块带电感的直流压降仿真分析,以下图为例 具体操作如下 创建新的workspaceLoad a New/Different layout(把PCB文件加载进来)

【滑动窗口】209. 长度最小的子数组

209. 长度最小的子数组 解题思路 滑动窗口设置前后指针滑动窗口内的元素之和总是大于或者等于s滑动窗口的起始位置: 如果窗口的值大于等于s 窗口向前移动窗口结束位置:for循环的j class Solution {public int minSubArrayLen(int target, int[] nums) {int left 0;// 滑动窗口…

UDS统一诊断服务【七】DTC控制0X85服务

文章目录 前言一、DTC控制服务介绍二、数据格式2.1 请求报文2.2 子功能2.3响应格式 三、举例总结 前言 大家好&#xff0c;我是嵌入式老林&#xff0c;从事嵌入式软件开发多年&#xff0c;今天分享的内容是UDS诊断故障码控制0X85服务介绍&#xff0c;希望能对你有所帮助 一、D…

[LeetCode周赛复盘] 第 353 场周赛20230709

[LeetCode周赛复盘] 第 353 场周赛20230709 一、本周周赛总结6451. 找出最大的可达成数字1. 题目描述2. 思路分析3. 代码实现 6899. 达到末尾下标所需的最大跳跃次数1. 题目描述2. 思路分析3. 代码实现 6912. 构造最长非递减子数组1. 题目描述2. 思路分析3. 代码实现 6919. 使…

人工智能与Chat GPT

一本书全面掌握ChatGPT&#xff0c;既有向ChatGPT提问的技巧&#xff0c; 也有构建自己的ChatGPT模型的方法&#xff0c;涵盖开发背景、关联技术、使用方法、应用形式、实用案例等 人工智能是我们这个时代最热门的话题&#xff0c;人们既希望它能代替我们做一些工作&#xff0c…

Python使用SQLAlchemy

Python使用SQLAlchemy 1 安装SQLAlchemy 备注&#xff1a;本文适用于SQLAlchemy>2.0 # 安装SQLAlchemy pip install SQLAlchemy# 安装pymysql pip install pymysql参考文档&#xff08;SQLAlchemy>2.0&#xff09; https://docs.sqlalchemy.org/en/20/创建数据库 # …

什么是敏捷测试?

目录 前言&#xff1a; 敏捷测试的定义 敏捷测试的特点 为什么要敏捷测试 缩短价值交付周期 强调质量属于大家 化繁为简节省成本 敏捷测试VS. 传统测试 传统测试如何迁移到敏捷测试 1. 组织文化的转变 2. 组织架构的调整 3. 人员培训与指导 4. 轻流程 敏捷测试成…

电视访问Samba

文章目录 问题描述方案一&#xff1a;当贝播放器方案二&#xff1a;nPlayer方案三&#xff1a;Kodi 问题描述 本人使用小米 AX9000 路由器 移动硬盘组了个轻 NAS&#xff0c;想通过电视访问 Samba 看视频&#xff08;也可以电脑开 SMB&#xff09; 开启 Samba 功能 文件夹开…

SpringMVC第一讲:SpringMVC基础知识

一、MVC设计模式 MVC的全名是Model View Controller&#xff0c;是模型(Model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;是一种设计模式。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码&#xff0c;将众多的业务逻辑聚集到一个部件…