pgzero所有知识点详解

news2024/10/6 6:03:13

目录

 什么是pgzero?

pgzero的安装

4,正式开始!

1,调整背景色

2,导入角色

3,鼠标事件

5,按键事件

6,刷新功能

1,角色属性

2,功能介绍

7,全局变量and局部变量

1,全局变量与局部变量的区别

2,全局变量如何在功能内使用

8,角色功能及窗口功能

1,角色功能

2,窗口功能

9,结尾


 

 什么是pgzero?

python在各个领域都有着丰富的第三方库,pygame是python在游戏领域的应用库,可以用来开发各种不同的游戏。但是对于初学者来说,还是存在一定的门槛。

而今天要和大家分享的pgzero(pygame zero)是在pygame基础上做了进一步的封装,使得设计一款游戏十分的方便,特别适合少儿编程领域的教学, 与scratch相得益彰。

pgzero的安装

pip install pygame
pip install pgzero

 这个也就是我们所说的:终端下载pgzero库

安装完后,新建一个文本文档。打开,输入下列代码:

import pgzrun
pgzrun go()

将下面名字改为.py,编码改为UTF-8

再点击保存

找到这个文件,点击:

你就会发现:

4,正式开始!

1,调整背景色

实例代码:

import pgzrun
def draw():
   screen.fill((225,225,225))
pgzrun.go()
        

2,导入角色

实例代码:

import pgzrun
zy = Actor('zy.png')
def draw():
   zy.draw()
pgzrun.go()
#也可以用draw()功能画出背景图

注意:必须要在文件同一个目录下新建一个images文件夹,角色图片(必须都是png格式)都放里面!

3,鼠标事件

1,基础代码:

import pgzrun
def on_mouse_down():
    #代码
pgzrun.go()

2,获取鼠标位置:

import pgzrun
def on_mouse_down(pos):
    print(pos)
pgzrun.go()

3,鼠标按下左键 or 右键:

import pgzrun
def on_mouse_down(button):
    print(button)
pgzrun.go()

而输出的结果是:

mouse.LEFT#左键
#或者是:
mouse.RIGHT#右键

5,按键事件

1,功能

按键按下功能是on_key_down(),按键松开功能是on_key_up()(也可以写在update()(刷新游戏界面功能)里面)

2,数字按键

数字按键在pgzero的表达方式是:keyboard.K_1~8

3,字母按键

字母按键的表示方法是:keyboard.K_A~Z

4,功能按键

功能按键的表示方法是:keyboard.K_(功能键(大写))

5,按下按键,发生事件

示例代码:

import pgzrun
def on_key_down():
    if keyboard.K_1:
        #代码
pgzrun.go()

6,刷新功能

1,角色属性

说刷新功能之前,先给你们讲一下角色的属性。

角色的属性有这几类:方位类,图片类等

方位类的属性有:x(x坐标),y(y坐标),bottom(底部线),top(顶部线),left(左边线),right(右边线)

图片类的属性有:image(图片)

2,功能介绍

刷新功能就是update()功能。他就像while循环一样,被用于竞速类游戏的障碍移动等方面。程序调用一次update()功能就会再调用一次draw()功能哦!

代码示范:

import pgzrun
zy = Actor('zy.png')
def draw():
    zy.draw()
def update():
#让角色zy上升
    zy.x += 3
pgzrun.go()

7,全局变量and局部变量

实例代码:

p1 = '手机'
def home():
    p2 = '座机'
home()

1,全局变量与局部变量的区别

假如说一个程序里有一个def功能,那么全局变量就是在def功能外的一个变量。也就是示例代码里的p1变量。局部变量是在功能内的变量,只能在功能内使用。也就是示例代码里的p2变量。

2,全局变量如何在功能内使用

如果将示例代码更改一下:

p = '手机'
def home():
    p = ‘座机’
home()
print(p)
#那么输出结果是:
#手机
#如何不在home功能内使用print语句也能输出 座机 呢?

现在都看到要求了吧。如果功能内要使用功能外的变量,那么就要在def语句下面的一行输入:

global (全局变量)

这样,全局变量p的值就被更改为 座机 了,输出的东西也是 座机 。

注意:这个知识点一定要记住,因为这个知识将会很常见。

8,角色功能及窗口功能

1,角色功能

角色功能是对于角色创建的功能,比如角色碰到另一个角色以及角色碰到了游戏窗口里的一个点。

1,colliderect()功能

colliderect()功能是判断角色是否与另一个角色相撞。

示例代码:

import pgzrun
player1 = Actor('1.png',[400,300])
player2 = Actor('2.png',[400,250])
def draw():
    player1.draw()
    player2.draw()
if player1.colliderect(player2):#角色1.colliderect(角色2)(也可以这样:角色1.colliderect(角色2))
   exit()#退出游戏

2,collidepoint()功能

collidepoint()功能是判断角色是否一个点碰撞。

示例代码:

import pgzrun
player1 = Actor('1.png)

2,窗口功能

9,结尾

分享一个用pygame做的代码吧

#友情提示:请不要更改任何代码,谢谢!

import pgzrun


WIDTH = 1136
HEIGHT = 640
TITLE = 'P1 VS P2'
global bossX
bossX = 10
global zyX
zyX = 10
bg = Actor('bg.png')
zy = Actor('zy.png', [200, 420])
boss = Actor('boss.png', [900, 420])

def draw():
    bg.draw()
    zy.draw()
    boss.draw()
    # 写角色名字
    screen.draw.text('P1:' + str(zyX), [180, 30],fontsize=30,color='red')
    screen.draw.text('P2:' + str(bossX), [850, 30],fontsize=30,color='blue')
    #判断胜负
    if bossX == 0:
        print('P1玩家获胜')
        exit()
    elif zyX == 0:        
        print('P2玩家获胜')
        exit()
def update():
    # 判断壮猿移动
    if keyboard.K_A:
        zy.x = 200
    if keyboard.K_D:
        zy.right = 558
    # 判断boss移动
    if keyboard.K_LEFT:
        boss.left = 548
    if keyboard.K_RIGHT:
        boss.x = 900

    # 判断壮猿攻击、防御状态时,切换图片
    if keyboard.K_W:
        zy.image = 'zy1.png'
    elif keyboard.K_S:
        zy.image = 'zy2.png'
    else:
        zy.image = 'zy.png'
    # 判断boss攻击、防御状态时,切换图片
    if keyboard.K_UP:
        boss.image = 'boss1.png'
    elif keyboard.K_DOWN:
        boss.image = 'boss2.png'
    else:
        boss.image = 'boss.png'

    # 判断壮猿是否和boss发生碰撞
    if zy.colliderect(boss):
        if zy.image == 'zy1.png' and boss.image == 'boss.png':
            boss.x += 250
            global bossX
            bossX -= 1
        if boss.image == 'boss1.png' and zy.image == 'zy.png':
            zy.x -= 250
            global zyX
            zyX -= 1
        if zy.image == 'zy1.png' and boss.image == 'boss1.png':
            zy.x -= 250
            boss.x += 250
pgzrun.go()
#行数自己数!

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

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

相关文章

Java面试 异常

文章目录 1. Java 异常类层次结构概览图2. Exception 和 Error 有什么区别?3. Checked Exception 和 Unchecked Exception 有什么区别?4. Throwable 类常用方法有哪些?5. try-catch-finally 如何使用?6. finally 中的代码一定会执…

chatGPT VS 科大讯飞星火大模型 使用初体验,到底谁更胜一筹?

下午这会有时间,正好之前申请了讯飞星火大模型的体验,这里就想着简单使用体验对比一下chatGPT和星火大模型的差异,废话不多说这里直接上图: 【诺特兰德叶黄素与纯天然蔬菜中的叶黄素有什么区别】 【今年六月份我就要参加高考了&am…

Python实战案例03

文章目录 1、归并排序2、角谷猜想3、兔子数列4、学生管理系统5、饮品自动售货机6、信息安全策略——文件备份7、用户账户管理1、归并排序 先将待排序的序列划分成若干长度为 1 的子序列,依次将两个子序列排序后合并成长度为 2 的子序列;再依次将两个子序列排序后合并成长度为…

基于Yolov8的道路缺陷检测,加入PConv、WIOU 、DCNV2提升检测精度

1.数据集介绍 缺陷类型:crack 数据集数量:195张 1.1数据增强,扩充数据集 通过medianBlur、GaussianBlur、Blur3倍扩充得到780张图片 按照train、val、test进行8:1:1进行划分 1.1.1 通过split_train_val.py得到trainval.txt、val.txt、test.txt # coding:utf-8import…

事件轮询EventLoop

JS 是一门单线程语言 (换句话说: 一个时间内我只能做一件事), 异步操作都是放到事件循环队列中, 等待主执行栈来执行 JS 是如何执行的 (执行顺序) ●从上往下, 一行一行执行 ●如果中间的某一行书写有误, 那么程序在运行到这一行会报错并停止向下继续运行 ●先把所有的同步代码…

15个对Web开发人员有用工具网站

1. 代码转图片 网址:https://carbon.now.sh/ 使用 Carbon 创建和分享源代码的精美图像。它提供了多种代码风格和主题。 3.图片图库 网址:https://unsplash.com/ 4. 智能 WebP、PNG 和 JPEG 图片压缩 网址:https://tinypng.com/ tiny…

SpringCloud00

服务调用方式 RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有 。自定义数据格式&am…

VSAN 7 安装部署指南(一)

本文使用三台服务器安装ESXI 7.0 ,并在其中一台ESXI中安装vCenter 7.0。本环境中最终在VMware Workstation虚拟机中做的嵌套虚拟化。每台虚拟机配置两块网卡,一块网卡桥接,一块NAT。三块硬盘,一块100GB作为系统盘,一块…

C++前序遍历(栈)

#include <stdio.h> #include <malloc.h> //树结构 typedef struct kl { int data; struct kl *lchild; struct kl *rchild; }bittree; //栈结构 typedef struct ji { int top; bittree **data; int size; }stack; //初始化栈 void in…

【PCIE体系结构十】链路两端的参考时钟有频偏怎么办?

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;《PCI.EXPRESS系统体系结构标准教材 Mindshare》 PCIE规范中…

Linux环境基础开发工具

目录 Linux软件包管理器yum Linux开发工具 文本编辑器vi、vim vim的基本概念 vim操作 Linux编译器-gcc\g使用 函数库分为动态库和静态库 Linux调试器gdb使用 在gdb模式下的命令 Linux软件包管理器yum yum怎么说呢&#xff1f;就相当我们手机里的应用商店。我们需要安…

RAID磁盘阵列(看咱这篇就够了!)

目录 一、RAID简介 二、RAID的级别详列 三、总结 前言&#xff1a; 写这篇博客的原因是小编在工作中遇到的这个不熟悉的硬件知识&#xff0c;然后工作之余就立马搜集了资料进行学习。了解了RAID的作用和区别以及如何进行挂载之类的。本篇以及之后的一篇博客适合新手小白来初…

8.防火墙

文章目录 防火墙iptables防火墙介绍基础操作高级操作通用匹配隐含匹配端口匹配&#xff1a;--sport 源端口、--dport 目的端口 TCP标志位匹配&#xff1a;--tcp-flags TCP标志位ICMP类型匹配&#xff1a;--icmp-type ICMP类型 显式匹配多端口匹配IP范围匹配&#xff1a;-m ipra…

FPGA_学习_04_Verilog基础语法和Modelsem仿真

前言&#xff1a;对于以前学过C/C/C#的作者来讲&#xff0c;Verilog的基础语法算是特别简单的。本文主要介绍Verilog的基础语法和Modelsem仿真。 Verilog的基础语法 1 模块声明 FPGA开发是以模块为基础的&#xff0c;每个可综合的.v文件都是一个模块&#xff0c;模块由module…

华为云——代码托管的使用

一、打开前后端项目 登录华为云&#xff0c;点击页面右上角的用户名——点击个人设置 2.点击代码托管的HTTPS密码管理&#xff0c;设置自己的密码 3.回到代码仓库&#xff0c;复制HTTP地址 4.打开GitHubDesktop&#xff0c;点击左上角进行仓库克隆 &#xff08;我这里已经cl…

Redis 介绍相关知识,常用五大数据结构

1.Redis 介绍相关知识 Redis 是单线程多路 IO 复用技术 多路复用是指使用一个线程来检查多个文件描述符&#xff08;Socket&#xff09;的就绪状态&#xff0c;比如调用select 和 poll 函数&#xff0c;传入多个文件描述符&#xff0c;如果有一个文件描述符就绪&#xff0c;则…

1米挂幅「社交泛娱乐出海作战地图」预定火爆,免费抢领纸质版

移步【融云全球互联网通信云】回复“地图”免费领 家人们&#xff01; 融云自制《社交泛娱乐出海作战地图》 首开大捷&#xff01; 预约已超 300 出海必备实战手册 移步公众号报名 泰火辣~ 已预约进入排队的朋友请耐心等待 后期我们将按照报名顺序依次派送 另外&#…

终于通过啦! 我拿到了阿里云【通义千问】大模型AI测试体验资格啦!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

Jmeter的十大组件

1.Jmeter的十大组件以及执行顺序 1.十大组件 测试计划线程组配置元件前置处理器定时器取样器后置处理器断言监听器 2.执行顺序为从测试计划到监听器依次执行 测试计划> 线程组>配置元件>前置处理器>定时器> 取样器> 后置处理器>断言>监听器 3.作用…

leetcode 2130. Maximum Twin Sum of a Linked List(链表的最大孪生和)

给出一个单向链表&#xff0c;第i 个node 和 第(n-1-i)个node称为twin. 0 < i < n/2 - 1 求所有twin的最大和。 链表长度为偶数。 思路&#xff1a; 链表长度为偶数&#xff0c;就省了不少步骤&#xff0c;不用再考虑奇数时中间那个node单独计算了。 直觉上来看&#x…