初步学习pygame,使用pygame搭建简单的窗口效果

在VSCode上使用pygame

第一步:创建 Python 虚拟环境

  1. 打开 VSCode 中的 Terminal(在菜单栏中选择 View > Terminal)
  2. 使用 cd 命令切换到你的项目文件夹
  3. 输入以下命令来创建一个新的虚拟环境:
   python3 -m venv env

这将在你的项目目录中创建一个名为 env 的文件夹,其中包含了你的 Python 环境。

第二步:激活虚拟环境

在 VS Code 的 Terminal 中,根据你的操作系统,运行适合的激活命令:

    .\env\Scripts\activate

你会注意到终端提示符改变,显示你已在 ‘env’ 环境中。

第三步:安装 pygame

在你的虚拟环境中,通过 Terminal 输入以下命令来安装 pygame:

python3 -m pip install pygame

到这里我们搭建好vscode上使用pygame库的基本条件,开始我们的pygame之路!

创建窗口

现在创建python文件,开始我们的代码。

# 导入 pygame 库
import pygame# 初始化所有 pygame 模块,此步在使用任何其他 pygame 函数之前都是必需的
pygame.init()# 创建一个 500x500 pix 的游戏窗口。参数是一个二元元组,表示窗口的宽度和高度
screen =  pygame.display.set_mode([500,500])# 这是一个用来控制主程序循环运行的开关变量
running = True
while running:  # 主程序循环# 内部事件循环,处理程序中发生的所有事件,比如鼠标点击。# get() 方法将获取 pygame 事件队列中的所有事件for event in pygame.event.get():# pygame.QUIT 是一个 pygame 特定的事件,由窗口 '关闭' 按钮点击触发if event.type == pygame.QUIT:running = False  # 用户点击 '关闭',开关变量 running 设置为 False 退出主程序循环# fill 方法会对整个屏幕进行清洗(或填充颜色)。三个参数分别对应 RGB 三种颜色,范围都是 0-255# 255 255 255 是白色screen.fill((255,255,255))# 画一个蓝色的圆。第二个参数是圆心的位置坐标,第三个参数是圆的半径# 圆的RGB颜色是 (0,0,255),即蓝色pygame.draw.circle(screen, (0,0,255), (250,250), 75)# flip() 是一个很重要的函数。它用来更新整个窗口的显示。# pygame 在操作窗口时常常需要采取先在“后台”完成所有绘制,再一次性刷新到屏幕上的方式。# flip 函数会将所有后台的绘制结果更新到屏幕上,使我们可以看到结果pygame.display.flip()# 离开主程序循环后,退出 pygame,清理内存
pygame.quit()

运行这个代码,我们可以得到一个白色的窗口,并且中间有一个蓝色的圆,如图:
在这里插入图片描述

蓝色方块

下面我们将编写一个显示四个蓝色方块的屏幕程序,如图
在这里插入图片描述
代码:

# 导入 pygame 库和对应的常量
import pygame
from pygame.locals import *# 定义一个自定义的 Square 类,这个类继承自 pygame.sprite.Sprite
class Square(pygame.sprite.Sprite):def __init__(self):# 调用父类(pygame.sprite.Sprite)的构造函数super(Square, self).__init__()# 创建一个 25x25 像素的 surface 对象,surface 在 pygame 中代表一个影像对象self.surf = pygame.Surface((25,25))# 使用 fill 方法,可以只填充一种颜色。将 surface 对象填充为 RGB = (0,200,255) 的颜色self.surf.fill((0,200,255))# 获取当前 surface 对象的矩形界限(rect 对象)self.rect = self.surf.get_rect()# 初始化 pygame
pygame.init()# 创建一个 800x600 像素的游戏窗口
screen = pygame.display.set_mode((800,600))# 创建四个 Square 实例
square1 = Square()
square2 = Square()
square3 = Square()
square4 = Square()# 设置游戏循环开关
gameOn = True# 游戏主循环
while gameOn:# 事件循环,处理游戏过程中发生的所有事件for event in pygame.event.get():# 如果检测到键盘输入的事件类型if event.type == KEYDOWN:# 判断如果按下的键是退格键(Backspace 键)if event.key == K_BACKSPACE:# 则将游戏循环开关 gameOn 设置为 False,退出游戏主循环gameOn = False# 如果检测到的事件类型是窗口关闭事件elif event.type == QUIT:# 则将游戏循环开关 gameOn 设置为 False,退出游戏主循环gameOn = False# 使用 screen 对象的 blit 功能,将四个 Square 对象绘制到指定的坐标处screen.blit(square1.surf, (40,40))screen.blit(square2.surf, (40, 530))screen.blit(square3.surf, (730, 40))screen.blit(square4.surf, (730, 530))# 更新整个屏幕,实现动画效果pygame.display.flip()# 退出游戏
pygame.quit()

针对几个关键的差异进行解释。

  • 精灵(Sprites): 在第二段代码中,使用了 Pygame 的精灵(Sprite)计数概念。精灵在游戏开发中是一个非常常见的概念,通常用于表示在屏幕上可以看到并可以与之交互的对象,如玩家角色、敌人、子弹等。在代码中,我们创建了一个精灵类 Square,它用一个代表其视觉表现形式的 surface 和一个代表其在屏幕上位置的 rect 对象来定义。并在后面的代码中创建了四个 Square 精灵。
  • 自定义类: 在第二段代码中,创建了一个自定义的 Square 类,这是面向对象编程的一部分。用这种方式,我们可以将可重用的代码打包到一个对象中,这样可以很容易地创建多个类似的实体(在这种情况下是 Square )。
  • 用户交互: 虽然两段代码都有事件循环来处理用户输入,但在第二段代码中,增加了对键盘的事件处理,这允许用户通过按下 “Backspace” 键来退出游戏。
  • 屏幕绘制(Blitting): “blit” 是 “block image transfer” 的简称,指的是把图像从一处复制到另一处。在第二段代码中,使用 blit() 函数将每一个 Square 精灵的视觉表现形式绘制或复制到定义的坐标处。

总的来说,第一段代码更加基础,主要向你展示了如何设置 Pygame 环境、初始化游戏窗口和基本的绘图功能。第二段代码则展示了如何创建和使用自定义的精灵类,以及如何处理更复杂的用户输入和在屏幕上绘制对象。

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

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

相关文章

每天五分钟深度学习框架PyTorch:创建具有特殊值的tensor张量

本文重点 tensor张量是一个多维数组,本节课程我们将学习一些pytorch中已经封装好的方法,使用这些方法我们可以快速创建出具有特殊意义的tensor张量。 创建一个值为空的张量 import torch import numpy as np a=torch.empty(1) print(a) print(a.dim()) print(s.shape) 如图…

三菱机械手维修控制器故障

在工业自动化领域,三菱工业机器人凭借其高性能、高可靠性和易用性,受到了广泛应用。然而,随着时间的推移,可能会出现MITSUBISH工业机械臂控制器故障,需要进行三菱机械手维修。 一、MITSUBISH机械手控制器故障诊断 在进…

冷干机的日常维护

冷干机的日常维护保养。 观察记录 (一)每班观察记录仪表值4次 1、压缩空气进出口压差不超过0.035Mpa; 2、蒸发压力表0.4Mpa-0.5Mpa; 高压压力表1.2Mpa-1.6Mpa。(冷媒R22) 3、压缩机的运行电流、电压。 (二)经常观察冷却水系统、压缩空气系统的进口温度…

【Numpy】深入解析numpy.mgrid()函数

numpy.mgrid():多维网格生成与数值计算的利器 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 &#x1f393…

Qt下使用QImage和OpenCV实现图像的拼接与融合

文章目录 前言一、使用QImage进行水平拼接二、使用OpenCV进行水平拼接三、使用OpenCV进行图像融合四、示例完整代码总结 前言 本文主要讲述了在Qt下使用QImage和OpenCV实现图像的拼接与融合,并结合相应的示例进行讲解,以便大家学习,如有错误…

首发!飞凌嵌入式FETMX6ULL-S核心板已适配OpenHarmony 4.1

近日,飞凌嵌入式在FETMX6ULL-S核心板上率先适配了OpenHarmony 4.1,这也是业内的首个应用案例,嵌入式核心板与OpenHarmony操作系统的结合与应用,将进一步推动千行百业的数智化进程。 飞凌嵌入式FETMX6ULL-S核心板基于NXP i.MX 6ULL…

码蹄集部分题目(2024OJ赛16期;单调栈集训+差分集训)

&#x1f9c0;&#x1f9c0;&#x1f9c0;单调栈集训 &#x1f96a;单调栈 单调递增栈伪代码&#xff1a; stack<int> st; for(遍历数组) {while(栈不为空&&栈顶元素大于当前元素)//单调递减栈就是把后方判断条件变为小于等于即可{栈顶元素出栈;//同时进行其他…

【Linux】LAMP集群分布式安全方案

LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP&#xff08;LAMP&#xff09;组合构成的集群环境的安全性和稳定性。 本次实验通过网络层安全对防火墙配置&#xff1a;使用防火墙&#xff08;如iptables或firewalld&#xff09;来限制对集群的访问&#xff0c;只…

[集群聊天服务器]----(五)User类、UserModel类

接着上文[集群聊天服务器]----(四)MySQL数据库模块&#xff0c;接下来我们对User类、UserModel类进行剖析&#xff0c;User表和UserModel类是项目最基本也是最重要的部分&#xff0c;通过它我们对用户的id&#xff0c;用户名&#xff0c;密码&#xff0c;状态相关信息进行存储&…

uniapp+canvas实现逐字手写效果

在移动端使用 UniApp 进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 初始化 Canvas&#xff1a; 使用 uni.c…

Top3专业课150满分,怎么考的?

这个系列会邀请上岸学长学姐进行经验分享~ 今天经验分享的同学是小马哥上海交大819的全程班学员&#xff0c;专业课150分满分&#xff0c;这位同学也是819期末考试的第一名&#xff0c;非常厉害&#xff01;大家吸吸欧气&#xff01; 初试成绩单 前言 先介绍下自己&#xff0…

新火种AI|复旦团队在“冷冻人脑”领域获得重大进展!人工智能是否会对此形成助力?

​在低温医学领域&#xff0c;“冷冻人脑”技术的研究和突破既是重点&#xff0c;也是难点。因为这项技术关乎着人类是否可以取得一个令人瞩目的突破——人类的生命是否能够得到延续。 早几年&#xff0c;诸如“利用人体冷冻技术将身患绝症的病人保存十几年&#xff0c;几十年…

C# 文件清理

/// <summary>/// 定期清除文件/// </summary>/// <param name"fileDirect">文件夹</param>/// <param name"postFix">文件后缀</param>/// <param name"saveDay">保存天数</param>private voi…

IntelliJ IDEA集成Baidu Comate,商城系统支付交易功能开发实战

文章目录 Baidu Comate介绍安装配置体验安装插件配置体验注释生成代码技术问答 实战设计表生成代码导入数据 总结 Baidu Comate介绍 在科技互联网飞速发展的今天&#xff0c;百度凭借其深厚的技术积累和创新能力&#xff0c;推出了一款名为Baidu Comate智能代码助手的产品。该…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进粒子滤波的锂离子电池剩余寿命预测 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Windows 10x64 IoT Enterprise LTSC 2021

打KB5036892补丁&#xff0c;升级版本19044.4291&#xff0c;打简体中文补丁包&#xff0c;系统后续升级需要升级英文补丁&#xff0c;需要重新打中文补丁包&#xff0c;系统禁用升级。禁用打印机服务&#xff0c;需要安装打印机的自行打开服务Print Spooler。 链接&#xff1a…

【SqL】数据库脚本编写规范和指南

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

Spring AOP的实操 + 原理(动态代理)

1 什么是Spring AOP 要想知道Spring AOP那必然是是要先知道什么是AOP了: AOP&#xff0c;全称为 Aspect-Oriented Programming&#xff08;面向切面编程&#xff09;&#xff0c;是一种编程范式&#xff0c;用于提高代码的模块化&#xff0c;特别是横切关注点&#xff08;cros…

钡铼BL205分布式IO在精密机械加工自动化中的精准控制OPC UA

随着工业自动化技术的不断发展&#xff0c;精密机械加工领域对于高效、精准的控制需求日益增加。在这一背景下&#xff0c;钡铼BL205分布式IO的出现为精密机械加工自动化注入了新的活力和可能性。本文将探讨钡铼BL205分布式IO在精密机械加工自动化中的应用&#xff0c;尤其是其…

使用Python探究OpenAI API

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域&#xff0c;许多公司现在急于成为下一大热点。 尽管竞争激烈&#xff0c;OpenAI仍然是任何生成式AI业务需求的首选公司&#xff0c;因为它拥有最好的模型和持续的支持。该公司…