Python学习之pygame模块介绍并制作代码雨

news2025/1/10 21:19:30

前言

对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制窗口,反馈键盘鼠标信息,播放音频文件,渲染图片文字等等功能。

今天咱们通过pygame模块实现一个代码雨的简单示例,顺便讲解下子模块中的一些简单功能代码示例,希望对看到的小伙伴有帮助。

完整代码,在文章最后,请耐心看完哦!!!

在这里插入图片描述

pygame模块部分功能讲解

Pygame(Python Game)是一个跨平台的多媒体库,主要用于开发游戏、音频和图形应用程序。下面介绍一些常用的Pygame子模块及其使用方法。

1、pygame.display

该模块用于管理游戏窗口的显示。可以使用它来创建游戏窗口、设置窗口大小、刷新屏幕等。

import pygame  
pygame.init()  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((800, 600))  
pygame.display.set_caption("My Game")  
  
while True:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            pygame.quit()  
            exit()  
    # 在屏幕上绘制图形  
    pygame.display.update()

2、pygame.event

该模块用于处理事件,例如键盘、鼠标、游戏控制器等事件。可以使用它来检查是否按下某个按键、移动鼠标等。

import pygame  
pygame.init()  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((800, 600))  
pygame.display.set_caption("My Game")  
  
while True:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            pygame.quit()  
            exit()  
        elif event.type == pygame.KEYDOWN:  
            if event.key == pygame.K_ESCAPE:  
                pygame.quit()  
                exit()  
    # 在屏幕上绘制图形  
    pygame.display.update()

3、pygame.locals

该模块包含了各种常量,例如按键的键码、鼠标按钮的键码等。可以使用它来获取各种常量。

import pygame  
pygame.init()  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((800, 600))  
pygame.display.set_caption("My Game")  
  
while True:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            pygame.quit()  
            exit()  
        elif event.type == pygame.KEYDOWN:  
            if event.key == pygame.K_ESCAPE:  
                pygame.quit()  
                exit()  
    # 在屏幕上绘制图形并设置字体样式和颜色  
    pygame.draw.line(screen, (255, 0, 0), (100, 100), (300, 100), 5)  
    font = pygame.font.Font(None, 36)  
    text = font.render("Hello, World!", True, (255, 255, 255))  
    screen.blit(text, (100, 50))  
    pygame.display.update()

4、pygame.time

该模块用于管理游戏的时间和帧率。可以使用它来获取当前时间、延迟、计时器等。

import pygame  
pygame.init()  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((800, 600))  
pygame.display.set_caption("My Game")  
  
clock = pygame.time.Clock()  
running = True  
  
while running:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            running = False  
        elif event.type == pygame.KEYDOWN:  
            if event.key == pygame.K_ESCAPE:  
                running = False  
    # 在屏幕上绘制图形并设置字体样式和颜色  
    pygame.draw.line(screen, (255, 0, 0), (100, 100), (300, 100), 5)  
    font = pygame.font.Font(None, 36)  
    text = font.render("Hello, World!", True, (255, 255, 255))  
    screen.blit(text, (100, 50))  
    # 控制游戏帧率  
    clock.tick(60)  
    pygame.display.update()

5、pygame.mixer

该模块用于播放音频文件,例如音乐、音效等。可以使用它来播放各种音频文件。

import pygame  
pygame.init()  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((800, 600))  
pygame.display.set_caption("My Game")  
  
# 加载音频文件  
pygame.mixer.music.load("audio.mp3")  
pygame.mixer.music.play()  
  
# 在屏幕上绘制图形并设置字体样式和颜色  
pygame.draw.line(screen, (255, 0, 0), (100, 100), (300, 100), 5)  
font = pygame.font.Font(None, 36)  
text = font.render("Hello, World!", True, (255, 255, 255))  
screen.blit(text, (100, 50))  
  
# 控制游戏帧率  
clock = pygame.time.Clock()  
while pygame.mixer.music.get_busy():  
    clock.tick(60)  
    pygame.display.update()

6、30行代码搞定代码雨

简单设计:

1.黑色背景,字体颜色随机,内容为随机字符-----pygame和random

2.下落,显示,刷新

import sys
import random
import pygame
from pygame.locals import *


# 屏幕大小
WIDTH = 800
HEIGHT = 600
# 下落速度范围
SPEED = [15, 30]
# 字母大小范围
SIZE = [5, 30]
# CODE长度范围
LEN = [1, 8]


# 随机生成一个颜色
def randomColor():
	return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))


# 随机生成一个速度
def randomSpeed():
	return random.randint(SPEED[0], SPEED[1])


# 随机生成一个大小
def randomSize():
	return random.randint(SIZE[0], SIZE[1])


# 随机生成一个长度
def randomLen():
	return random.randint(LEN[0], LEN[1])


# 随机生成一个位置
def randomPos():
	return (random.randint(0, WIDTH), -20)


# 随机生成一个字符串
def randomCode():
	return random.choice('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890')


# 定义代码精灵类
class Code(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.font = pygame.font.Font('./font.ttf', randomSize())	# 随机字体大小
		self.speed = randomSpeed()			# 随机速度
		self.code = self.getCode()			# 随机长度
		self.image = self.font.render(self.code, True, randomColor())	# 使用已有的文本创建一个位图image,返回值为一个image  随机颜色
		self.image = pygame.transform.rotate(self.image, random.randint(87, 93))	# 讲图像随机旋转角度
		self.rect = self.image.get_rect()
		self.rect.topleft = randomPos()		# 随机位置

	def getCode(self):
		length = randomLen()
		code = ''
		for i in range(length):
			code += randomCode()
		return code
	def update(self):
		self.rect = self.rect.move(0, self.speed)
		if self.rect.top > HEIGHT:
			self.kill()


pygame.init()			# 初始函数,使用pygame的第一步
screen = pygame.display.set_mode((WIDTH, HEIGHT))	#生成主屏幕screen;第一个参数是屏幕大小
pygame.display.set_caption('逃逸的卡路里')	# 窗口命名

clock = pygame.time.Clock()					# 初始化一个clock对象
codesGroup = pygame.sprite.Group()			# 精灵组,一个简单的实体容器
while True:
	clock.tick(24)							# 控制游戏绘制的最大帧率为30
	for event in pygame.event.get():
		if event.type == QUIT:
			pygame.quit()
			sys.exit(0)
	# screen.fill((1, 1, 1))					# 填充
	screen.fill((0, 0, 0))						# 填充背景颜色

	codeobject = Code()
	codesGroup.add(codeobject)				# 添加精灵对象
	codesGroup.update()
	codesGroup.draw(screen)
	pygame.display.update()

代码雨效果图展示

在这里插入图片描述

总结

Pygame(Python Game)是一个用于开发游戏的Python模块,它提供了处理游戏窗口、音频、事件处理、图形渲染等功能,可以用于开发2D游戏和图形界面应用程序。
以上是Pygame的一些常用子模块和使用方法,使用这些模块可以帮助开发者更加方便地进行游戏开发、图形界面开发等任务。

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

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

相关文章

Java接口测试实战:掌握JMeter技能,让测试更高效!

目录 引言 一.java环境搭建 二.操作示例 1.添加信息头 2.添加请求路径和请求参数 3.添加单个文件 4添加文件集合 三.实操注意事项 1.登录 1.1登录界面断言注意事项 1.2登录界面定义token 2.首页 2.1http请求只有路径 2.2需要引用token变量 3.产品管理 3.1增加产…

Acrel 2000E/G配电室综合监控系统

1、概述 在信息化建设中,配电室运行处于信息交换管理的核心位置,这就要求配电室内所有设备需要时时刻刻正常运转,一旦某台设备出现故障,对数据传输、存储及系统运行构成威胁,就会影响到全局,如果不能及时处…

python flask p5.js mysql 实现数据库查询并网页显示数据(后附完整代码分享)

tips:不涉及session,是纯简单数据共享 实现步骤: 第一步:搭建框架第二步:创建数据库第三步:设计前端网页第四步:后端实现存储数据库整体实现需要的代码文件: 第一步:搭建框架 首先f…

Unity-vr用眼睛注视选择物体

Unity-vr用眼睛注视选择物体 文章目录 Unity-vr用眼睛注视选择物体工程版本用法说明脚本说明WatchController - 注视主控制器WatchEvent - 注视事件WatchGameobject - 被注视物体TimerTool - 计时器工具 总结 工程版本 unity2019.4.9f1 vs2019 项目工程源代码下载 用法说明 …

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023) Windows 11, version 22H2 官方原版,2023 年 5 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作…

《计算之魂》引子

了解计算机基本原理的读者朋友可以跳过这个引子直接阅读第 1 章,因为本书其他章节并不依赖本章内容。不过,如果你愿意花上半小时读一读这一部分,相信会从数学和哲学层面对计算机以及计算的本质有更深刻的理解。 0.1 什么是计算机 如果你有…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层,box是他们的父级,一般浏览器支持都没什问题需要注意的是,确保父元素不是透明的, 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用,还得是纯色,没去深究,设置纯色…

集成gtest进行单元测试之cmake应用

编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候…

二、CNNs网络架构-卷积分离网络架构

《A review of convolutional neural network architectures and their optimizations》论文指出AlexNet的优异性能证明了可以通过增加网络深度提高网络性能。随着网络层数的不断增加,不断增加的计算负担和不显著的性能提升使得更先进的网络架构成为另一个主要的研究…

如何在华为OD机试中获得满分?Java实现【字符串分隔】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

uniapp沉浸式渐变状态栏

插件地址&#xff1a;沉浸式渐变状态栏 - DCloud 插件市场 标准用法 <v-headerview actionBarColor"#fac90f" titleColor"#ffffff" pageTitle这是标题 ><template v-slot:title><!--如需自定义标题&#xff0c;用这个slot自定义内容。否则…

基于postman测试接口(整套接口测试)

可以解决的问题 几百个接口人工测试接口过于繁杂大多测试无法使用请求结果当参数可以使用随机参数支持swagger信息导入随账号持久化保存数据对集合一键测试自定义可视化结果 开启控制台 单个测试尝试 使用请求结果当参数 pm.test("存全局参数", function () {// 获…

【深度学习】基于Python Qt的口罩检测与报警系统

文章目录 yolov7训练系统集成数据库报警记录查看qt页面跳转方式qt 的数据库某表查看页面如何写q742971636 yolov7训练 yolov7:https://github.com/WongKinYiu/yolov7 人脸口罩数据集&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1bnxJPnoRNwUfVzLxKjIvkQ?pwdc0yc …

Confluence的数据迁移备份与恢复

目录 一、简介 二、数据备份&#xff08;默认系统会自动备份&#xff0c;不需要手动&#xff09; 2、点击左上角的设置按钮&#xff0c;选择“一般配置”选项。 3、选择“备份与还原”选项 4、开始手动备份 三、数据恢复 1、使用管理员账号登录 2、选择“备份与还原”选…

亿发管理信息化系统,助力五金加工企业信息化建设

传统生产模式下劳动密集的五金生产车间&#xff0c;管理难度逐渐增大&#xff0c;五进生产加工商需要寻求新的竞争力。信息化建设可以将信息技术和系统融入五金生产加工过程的各个环节&#xff0c;使五金生产行业受益。 1、定制生产 信息化建设使五金管理者能够高效地实施定制…

laravel 图表Apexchart 整数多出小数点

Apexchart做统计界面发现一个问题&#xff0c;数据全是整数&#xff0c;但是还显示小数点&#xff0c;如下图&#xff1a; 网上很少有答案&#xff0c;自己研究了很久&#xff0c;分享下经验 第一种方案重新buildDefaultScript方法 protected function buildDefaultScript(){$…

R语言实践——rWCVP 的函数清单

rWCVP 的函数清单 1. get_area_name()用法参数值详介例子 2. get_wgsrpd3_codes()用法参数值详介例子 3. powo_map()用法参数值 4. powo_pal(), scale_color_powo(), scale_colour_powo(), scale_fill_powo()用法参数值 5. redlist_example用法格式资源 6. taxonomic_mapping用…

【万字长文】深度解析 Transformer 和注意力机制(含完整代码实现)

深度解析 Transformer 和注意力机制 在《图解NLP模型发展&#xff1a;从RNN到Transformer》一文中&#xff0c;我介绍了 NLP 模型的发展演化历程&#xff0c;并用直观图解的方式为大家展现了各技术的架构和不足。有读者反馈图解方式虽然直观&#xff0c;但深度不足。考虑到 Tra…

Java设计模式七大原则-单一职责原则

✨作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 单一职责原则 1、单一职责介绍 单一职责原则&#xff08;SRP&#xff1a;Single Responsibility Principle&#xff09;是指一个类…

二层交换机和三层交换机的区别

交换机端口是现代 IT 生态系统中网络通信过程的重要组成部分。通过将数据包从一个网段或网络设备转发到另一个网段或网络设备&#xff0c;它们可实现网络连接和可访问性。但是&#xff0c;并非所有交换机都是平等的。为您的网络选择合适的交换机归结为一个关键决策&#xff1a;…