pygame入门(千字详细版)

news2024/10/4 16:03:24

千字赘述,万字总结,就为博客点一赞吧!

1.安装pygame

pip install pygame

安装完成后在python中输入检验有没有问题,回车键应该不会报错。

>>>import pygame
>>>

2.pygame模块预览

9225cfbf6031407d862fb33927f814d0.png

 

3.项目实战

3.1.0 hello world

 

3.1 初始化Pygame


初始化是使用Pygame库的第一步。在编写任何Pygame程序之前,必须首先初始化Pygame模块。这可以通过调用pygame.init()函数来实现。初始化过程会准备Pygame所需的所有子系统,如显示、事件和音频。

import pygame

pygame.init()


初始化后,可以创建游戏窗口并开始使用Pygame的各种功能。初始化Pygame是一个简单的过程,但它是创建任何Pygame应用程序的基础。

3.2 事件处理
事件处理是Pygame中的核心概念之一。Pygame通过事件队列管理用户的输入,如键盘按键、鼠标点击等。事件是一个包含有关用户操作信息的对象,可以通过pygame.event.get()函数获取。

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()



在上面的代码示例中,我们检查事件队列中的每个事件。如果事件类型是QUIT,这意味着用户想要关闭窗口,我们调用pygame.quit()来退出Pygame并调用sys.exit()来结束程序。

事件处理是响应用户输入的关键,它允许游戏根据玩家的操作做出反应。通过事件处理,开发者可以控制游戏流程,实现各种交互功能。

3.3 创建窗口


在Pygame中,创建窗口是开始游戏开发的基本步骤之一。使用pygame.display.set_mode()函数可以创建一个窗口,该函数接受一个元组作为参数,指定窗口的宽度和高度。

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


创建窗口后,可以使用pygame.display.set_caption()函数为窗口设置标题。

 

pygame.display.set_caption('My Pygame Game')


窗口是游戏的画布,所有的图形绘制和显示都将在这个窗口中进行。

3.4 图形绘制
Pygame提供了丰富的图形绘制功能,允许开发者在窗口中绘制各种形状和图像。基本的绘图函数包括pygame.draw.line()、pygame.draw.circle()、pygame.draw.rect()等。

# 绘制一个红色矩形
color = (255, 0, 0)
rect = (50, 50, 100, 100)
pygame.draw.rect(screen, color, rect)


在绘制图形时,可以选择颜色和形状,以及它们的尺寸和位置。绘制的图形将显示在游戏窗口中,为游戏添加视觉效果。

3.5 动画和帧率控制
在游戏开发中,动画是创建动态效果的关键。Pygame通过控制帧率来实现动画效果。帧率是指每秒钟刷新屏幕的次数,通过pygame.time.Clock()可以创建一个时钟对象来控制帧率。

clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill((0, 0, 0))  # 清屏
    # 绘制动画
    # ...

    pygame.display.flip()  # 更新屏幕显示
    clock.tick(60)  # 设置帧率为60



在上面的代码中,clock.tick(60)确保游戏以每秒60帧的速度运行,这为动画提供了平滑的效果。

3.6 音频处理
Pygame还支持音频处理,可以在游戏中添加背景音乐和音效。使用pygame.mixer.init()初始化音频模块,然后加载音频文件并播放。

pygame.mixer.init()
sound = pygame.mixer.Sound('explosion.wav')
sound.play()



音频处理为游戏增加了听觉效果,提高了游戏的沉浸感。

3.7 游戏循环
游戏循环是游戏程序的核心,它控制着游戏的流程。游戏循环通常包括事件处理、游戏状态更新、图形绘制和屏幕刷新。

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新游戏状态
    # ...

    # 清屏
    screen.fill((0, 0, 0))

    # 绘制图形
    # ...

    # 更新屏幕显示
    pygame.display.flip()

    clock.tick(60)



游戏循环确保游戏持续运行,直到用户选择退出。

3.8 资源管理
在游戏开发中,管理游戏资源如图像、音频和字体是必要的。Pygame提供了加载和使用这些资源的功能。

image = pygame.image.load('background.png')
font = pygame.font.Font(None, 36)
text = font.render('Hello Pygame', True, (255, 255, 255))


资源管理确保游戏能够有效地使用内存和存储,提高游戏的性能。

通过上述概念的介绍,新手可以对Pygame有一个基本的了解,并开始尝试开发自己的游戏。在实际开发中,还可以探索更多高级功能,如碰撞检测、物理引擎集成等,以丰富游戏的玩法和体验。

4. 创建游戏窗口
创建游戏窗口是使用 Pygame 进行游戏开发的基础步骤。在这个环节,你将学习如何初始化 Pygame 库,并创建一个具有指定大小和标题的游戏窗口。

4.1 设置窗口大小和标题
在 Pygame 中,设置窗口大小和标题是一个简单的过程。首先,你需要导入 Pygame 模块,并初始化它。之后,使用 pygame.display.set_mode() 函数来设置窗口的宽度和高度,使用 pygame.display.set_caption() 函数来设置窗口的标题。

以下是创建游戏窗口的基本代码示例:

import pygame

# 初始化 Pygame
pygame.init()

# 设置窗口的宽度和高度
width, height = 800, 600

# 创建窗口对象
window = pygame.display.set_mode((width, height))

# 设置窗口标题
pygame.display.set_caption('我的 Pygame 游戏')

# 游戏主循环
running = True
while running:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

# 退出 Pygame
pygame.quit()



5.1 绘制基本图形
在Pygame中,绘制基本图形是游戏开发的基础。通过这些图形,开发者可以构建游戏的视觉元素,如角色、障碍物和背景等。以下是一些基本图形的绘制方法:

线条:使用pygame.draw.line(screen, color, start_pos, end_pos, width)来绘制线条,其中screen是窗口的Surface对象,color是颜色,start_pos和end_pos是线的起点和终点坐标,width是线宽。

矩形:使用pygame.draw.rect(screen, color, rect, width)来绘制矩形,其中rect是一个矩形区域的坐标,可以是(left, top, width, height)或Rect对象,width是边框宽度,如果为0则填充整个矩形。

圆形:使用pygame.draw.circle(screen, color, center, radius, width)来绘制圆形,其中center是圆心坐标,radius是半径,width是圆边宽度。

多边形:使用pygame.draw.polygon(screen, color, points, width)来绘制多边形,其中points是一个点的列表,每个点是一个坐标元组,width是多边形边的宽度。

弧形:使用pygame.draw.arc(screen, color, rect, start_angle, stop_angle, width)来绘制弧形,其中rect是弧形所在矩形的坐标,start_angle和stop_angle是弧形的起始和结束角度,以弧度为单位。

示例代码:

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Animation Example')

# 定义颜色
WHITE = (255, 255, 255)

# 初始化时钟
clock = pygame.time.Clock()

# 初始化球的位置和速度
ball_pos = [350, 300]
ball_speed = [2, 2]

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 更新球的位置
    ball_pos[0] += ball_speed[0]
    ball_pos[1] += ball_speed[1]
    
    # 检查球是否撞到边界
    if ball_pos[0] <= 0 or ball_pos[0] >= 800:
        ball_speed[0] = -ball_speed[0]
    if ball_pos[1] <= 0 or ball_pos[1] >= 600:
        ball_speed[1] = -ball_speed[1]
    
    # 清除屏幕
    screen.fill((0, 0, 0))
    
    # 绘制球
    pygame.draw.circle(screen, WHITE, ball_pos, 50)
    
    # 更新屏幕显示
    pygame.display.flip()
    
    # 控制帧率
    clock.tick(60)

pygame.quit()
sys.exit()

效果

476395329dd74605a3b18d3453f4125c.gif 

 

4.项目实战

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import pygame
from pygame.locals import *
from sys import exit

background_image = 'image/sushiplate.jpg'
mouse_image = 'image/fugu.png'

# 初始化pygame,为使用硬件做准备
pygame.init()
# 创建了一个窗口
screen = pygame.display.set_mode((640, 480), 0, 32)
# 设置窗口标题
pygame.display.set_caption("hello world")

# 加载并转换图像
background = pygame.image.load(background_image).convert()
mouse_cursor = pygame.image.load(mouse_image).convert_alpha()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:  # 接收到退出事件后退出程序
            exit()
    screen.blit(background, (0, 0))  # 画上背景图

    x, y = pygame.mouse.get_pos()  # 获得鼠标位置
    # 计算光标左上角位置
    x -= mouse_cursor.get_width()/2
    y -= mouse_cursor.get_height()/2
    # 画上光标
    screen.blit(mouse_cursor, (x, y))

    # 刷新画面
    pygame.display.update()

91388458c6214c79ac9e565daa02a845.png

 

pygame.mouse的函数:

  • pygame.mouse.get_pressed —— 返回按键按下情况,返回的是一元组,分别为(左键, 中键, 右键),如按下则为True

  • pygame.mouse.get_rel —— 返回相对偏移量,(x方向, y方向)的一元组

  • pygame.mouse.get_pos —— 返回当前鼠标位置(x, y)

  • pygame.mouse.set_pos —— 设置鼠标位置

  • pygame.mouse.set_visible —— 设置鼠标光标是否可见

  • pygame.mouse.get_focused —— 检查窗口是否接受鼠标事件,即鼠标是否focus到窗口

  • pygame.mouse.set_cursor —— 设置鼠标光标式样

  • pyGame.mouse.get_cursor ——得到鼠标图片

 

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

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

相关文章

一键开启高清录屏:盘点Windows最火四款录屏工具

嘿&#xff0c;朋友们&#xff0c;今天咱们来聊聊那些让我在电脑前忙活得热火朝天的录屏神器究竟怎么样。作为一个经常需要录制教程、分享游戏精彩瞬间的普通用户&#xff0c;我可是对这几款软件有着满满的体验心得&#xff0c;现在就给你们一一道来。 一、福昕录屏大师 网址…

编码与解码

文章目录 编码与解码一、字节 & 字符二、编码 & 解码三、字符集 & 字符编码四、ASCII五、ISO-8859-1六、GB七、Unicode1、概述2、发展3、UTF-8 编码4、UTF-16 编码 八、Base64 编码1、概述2、原理3、代码示例 九、十六进制编码 编码与解码 一、字节 & 字符 字…

kali下编译AOSP报错(libncurses.so.5: cannot open shared object file)

编译报错信息&#xff1a;libncurses.so.5: cannot open shared object file: No such file or directory /bin/bash -c "PWD/proc/self/cwd prebuilts/clang/host/linux-x86/clang-3289846/bin/clang -Ifr ameworks/rs/script_api/include -Iexternal/clang/lib/Headers …

【AI知识点】小世界网络(Small-World Networks)

小世界网络&#xff08;Small-World Networks&#xff09; 是一种具有独特拓扑结构的网络模型&#xff0c;广泛应用于研究社交网络、神经网络、互联网以及其他复杂系统中的节点间连接方式。小世界网络的特点是节点之间的平均路径长度较短&#xff0c;并且大多数节点的局部连接较…

世邦通信股份有限公司IP网络对讲广播系统RCE

漏洞描述 SPON世邦IP网络广播系统采用的IPAudio™技术, 将音频信号以数据包形式在局域网和广域网上进行传送&#xff0c;是一套纯数字传输的双向音频扩声系统。传统广播系统存在的音质不佳&#xff0c;传输距离有限&#xff0c;缺乏互动等问题。该系统设备使用简便&#xff0c…

知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱

在 Windows 环境中结合使用 Protg、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop&#xff0c;可以高效地实现从自然语言处理&#xff08;NLP&#xff09;到知识图谱构建的全过程。本案例将详细论述环境配置、步骤实现以及一些扩展和不足之处。 文章目录 1. 环境准备1.1 Neo4j…

webGL入门(六)图形旋转

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

PIDM—— 物理正则化扩散模型

概述 论文地址&#xff1a;https://arxiv.org/pdf/2403.14404 源码地址&#xff1a;https://github.com/jhbastek/physicsinformeddiffusionmodels 扩散模型在逼近非常复杂的数据分布方面具有极高的性能和多功能性&#xff0c;近年来在自然科学领域的应用迅速扩展。鉴于其在科…

两数相除111

1.//给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 //整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。 // 例如&#xff0c;8.345 将被截断为 8 &#xff0…

基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

WDG看门狗在stm32中的应用

一&#xff0c;WDG看门狗的介绍 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠性和安全性看…

2款.NET开源且免费的Git可视化管理工具

Git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;它可以记录文件的修改历史和版本变化&#xff0c;并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的&#xff0c;它具有高效、灵活、稳定等优点&#xff0c;如今已成为软件开发领域中最流行…

深入理解Dubbo源码核心原理-Part1

启动类&#xff1a; 进入EnableDubbo查看&#xff1a; ①EnableDubboConfig&#xff1a; ②DubboComponentScan&#xff1a; 请看核心方法registerServiceBeans() 到这里&#xff0c;Dubbo对于Bean的加载初始化就做完了&#xff0c;Spring容器读取这些BeanDefinition就要对其进…

【计算机体系结构】TLB和Cache

TLB的设计 在两级页表的虚拟存储系统中&#xff0c;需要访问两次物理内存才能得到虚拟地址所对应的物理地址&#xff0c;而物理内存的访问速度是远远慢于处理器的&#xff0c;为了对该过程进行加速&#xff0c;可以加入一个页表的缓存&#xff0c;该缓存将页表中最近使用的PTE…

<<迷雾>> 第7章 会变魔术的触发器(1)--连着两个按键开关的逻辑电路 示例电路

info::操作说明 鼠标单击开关切换开合状态 A 能使灯点亮并保持; B 则点亮的灯熄灭. 注: 此处使用的是 按钮开关, 松开鼠标后开关会自己断开, 类似于手机和电脑上的电源按钮 因系统原因, 此类开关与普通开关在外观上并无差别. primary::在线交互操作链接 https://cc.xiaogd.net/…

房屋水电费记账本:内置的数组数据击按钮不能删除,页面手动添加的可以删除

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>房租水电费记录</title><script type&qu…

6 个 Java 工具,轻松分析定位 JVM 问题

使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具&#xff0c;帮助查看 JVM 的一些信息。比如&#xff0c;在机器上运行 ls 命令&#xff0c;可以看到 JDK 8 提供了非常多的工具或程序&#xff1a; 接下来介绍些常用的监控工具。也可以先通过下面这张图…

buuctf[安洵杯 2019]easy misc1

解压的一个文件夹和图片一个&#xff0c;zip压缩包有密码 FLAG IN ((√2524921X8552)15-1794)NNULLULL, ((√2524921X8552)15-1794)7 我用passware kit 2022 所以试试7数字NNULLULL,掩码&#xff08;mask&#xff09;攻击试试 mask &#xff1a;?d?d?d?d?d?d?dNNULLU…

基于SSM的Java在线音乐平台

文未可获取一份本项目的java源码和数据库参考。 Java在线音乐平台是基于Java Web&#xff0c;依据Java语言功能性强大和简单易用的两大特点&#xff0c;实现的一个网上音乐平台。该平台包含了前台功能&#xff08;用户层面&#xff09;以及后台管理系统&#xff08;管理员层面&…