Python -- 利用pygame库进行游戏开发基础

一、什么是pygame

        Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏,主要是为了开发2D游戏而生。具有免费、开源,支持多种操作系统,具有良好的跨平台性等优点。

在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行中安装

pip install pygame

 输入以下代码检测pygame是否安装成功

import pygame
pygame.ver

二、基本屏幕设置使用方法

        pygame基本使用模块
模块名 功能
pygame.cdrom 访问光驱
pygame.cursors 加载光标
pygame.display 访问显示设备
pygame.draw 绘制形状、线和点
pygame.event 管理事件
pygame.font 使用字体
pygame.image 加载和存储图片
pygame.joystick 使用游戏手柄或类似的东西
pygame.key 读取键盘按键
pygame.mixer 声音
pygame.mouse 鼠标
pygame.movie 播放视频
pygame.music 播放音乐
pygame.overlay 访问高级视频叠加
pygame.rect 管理矩形区域
pygame.sndarray 操作声音数据
pygame.sprite 操作移动图像
pygame.surface 管理图像和屏幕
pygame.surfarray 管理点阵图像数据
pygame.time 管理时间和帧信息
pygame.transform 缩放和移动图像

        模块的具体使用方法
         1、pygame概括化使用流程
      (1)pygame.init()初始化

                pygame.init() 是 Pygame 库中的初始化函数,它用于初始化 Pygame 的各种子模块和设置,以准备创建游戏或图形应用程序。调用 pygame.init() 的目的是确保 Pygame 环境正确准备好,以便在程序中使用 Pygame 的各种功能。

这个函数通常在程序的开始处调用,以确保 Pygame 能够正常工作。在调用 pygame.init() 之后,你可以使用 Pygame 的各种模块来处理图形、音频、事件等。例如,你可以创建游戏窗口、加载图像、播放音频等操作。

一旦初始化完成,你可以开始使用 Pygame 编写游戏逻辑并启动游戏循环。请注意,一旦初始化完成,你也可以通过 pygame.quit() 来清理 Pygame 环境和资源,通常是在程序结束时使用,以确保资源被正确释放。

                初始化时显示

pygame.init()

                pygame.init():该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化
                pygame.display.set_mode():创建一个窗口或屏幕,其大小由(width, height)指定,width表示窗口宽度,height代表屏幕高度。这个函数返回一个Surface对象,代表了整个屏幕。

         (2)创建一个Surface对象

                  Surface是Pygame的编程窗口,像一个画布一样,能在上面进行显示,图像和文本能显示在Surface上

          (1)创建Surface对象
screen = pygame.display.set_mode((800, 600))
            (2)创建一个带文本的页面
# 设置字体
f = pygame.font.Font(None, 36)

# 创建包含文字的Surface对象
text = f.render("简单的Pygame窗口", True, (255, 255, 255), (0, 0, 0))

# 获取文本的大小并创建一个合适的Rect
textRect = text.get_rect()
textRect.topleft = (100, 50)  # 设置文本的左上角位置

# 通过blit方法将其绘制出来
screen.blit(text, textRect)
         (3)创建一个带图像的画面
import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
image = pygame.image.load('155410.png')
screen.blit(image, (0, 0))  # 图像左上角在窗口的(0, 0)坐标
pygame.display.flip()  # 更新整个屏幕的显示
         (4)事件监听
#所有get()获取事件
for event in pygame.event.get():
    #判断事件类型
    if event.type == pygame.QUIT:
        pygame.quit()

                利用 for event in pygame.event.get对上次调用后所有事件进行遍历,其中pygame.envent.get()会获取pygame事件队列里面的所有事件,并返回一个事件列表(这些事件可能包括按键按下、鼠标点击、窗口关闭等用户或系统的交互动作)

                if event.type == pygame.QUIT,此语句是用来检测当前遍历的事件是否属于pygame.QUIT类型(pygame.QUIT类型是一种特殊的事件类型,一般当用户点击窗口关闭按钮是pygame会产生该事件)

                pygame.quit是一个很重要的函数,这个函数用于正确的关闭pygame库,并且释放资源退出程序

         (5)游戏循环

                   游戏循环的作用

while True:
    for event in pymage.event.get():
        if event.type == pygame.QUIT:
            pymage.quit()
            sys.exit()
    #更新并绘制屏幕内容
    pygame.display.flip()

                

                while True: 这是一个无限循环,通常用于创建游戏循环。游戏循环是一个持续运行的循环,用于处理游戏逻辑,更新游戏状态和绘制图形。

                for event in pygame.event.get(): 这是一个事件处理循环。它迭代遍历通过 pygame.event.get() 函数获取的所有事件。Pygame 会将各种事件(例如按键按下、鼠标移动、窗口关闭等)存储在一个事件队列中,通过这个循环可以处理这些事件。

                if event.type == pygame.QUIT:这是一个条件语句,用于检查事件的类型是否为窗口关闭事件。pygame.QUIT 是一个表示窗口关闭事件的常量。

                pygame.quit(): 如果检测到窗口关闭事件,这行代码会调用 pygame.quit() 函数,用于清理 Pygame 环境和资源,以确保程序正确退出。这会关闭 Pygame 窗口并释放游戏资源。

sys.exit():这是一个用于退出程序的函数。它会终止程序的执行,退出游戏循环,从而结束程序的运行。

               pygame.display.flip(): 这行代码用于更新屏幕内容。在游戏循环中,通常会进行游戏状态的更新和图形的绘制,然后使用 pygame.display.flip() 来刷新屏幕,以显示最新的游戏画面。

                2.pygame.display显示模块具体使用方法
              (1)Pygame使用pygame.display显示模块中的方法创建游戏的主窗口:

                函数书写格式

#写法一
window = pygame.display.set_mode(size=(),flags=0)
#size:用来设置窗口的大小
#flags:功能标志位,表示创建的主窗口样式

#写法二
window_size = (800, 600)
# 创建游戏窗口
window = pygame.display.set_mode(window_size)
标志位 功能
pygame.FULLSCREEN 创建一个全屏窗口
pygame.HWSURFACE 创建一个硬件加速窗口,必须和FULLSCREEN同时使用
pygame.OPENGL 创建一个OPENGL渲染窗口
pygame.RESIZABLE 创建一个可以改变大小的窗口
pygame.DOUBLEBUF 创建一个双缓冲窗口,建议在HWSURFACE或者OPENGL时候使用
pygame.NOFRAME 创建一个没有边框的窗口
              (2)将Surface对象粘贴至主窗口上:
​
# 导入Pygame库
import pygame
# 导入sys库,用于退出程序
import sys

# 初始化Pygame
pygame.init()

# 定义窗口大小和标题
screen_width = 1600  # 窗口宽度
screen_height = 1000  # 窗口高度
screen = pygame.display.set_mode((screen_width, screen_height))  # 创建一个游戏窗口
pygame.display.set_caption("简单的Pygame窗口")  # 设置窗口标题

# 加载图像
image = pygame.image.load("屏幕截图 2024-01-15 155410.png")  # 加载一个图像文件(请替换成你的图像文件路径)

# 进入主循环
while True:
    for event in pygame.event.get():  # 获取Pygame事件
        if event.type == pygame.QUIT:  # 如果事件类型是窗口关闭
            pygame.quit()  # 退出Pygame
            sys.exit()  # 退出程序


    # 在窗口上绘制图像
    screen.blit(image, (0, 0))  # 将加载的图像绘制到窗口左上角(坐标 (0, 0))


    # 更新屏幕内容
    pygame.display.flip()  # 刷新窗口,显示最新的游戏画面

​

这是一个完整的代码窗口创建流程,其中

 # 在窗口上绘制图像
    screen.blit(image, (0, 0))  # 将加载的图像绘制到窗口左上角(坐标 (0, 0))

这行代码是在游戏窗口上绘制一个图像,且图像的坐标为(0,0),而image是需要导入的Surface对象

              (3)设置窗口主窗口,以及主窗口的命名:
# 定义窗口大小和标题
screen_width = 1600  # 窗口宽度
screen_height = 1000  # 窗口高度
screen = pygame.display.set_mode((screen_width, screen_height))  # 创建一个游戏窗口
pygame.display.set_caption("简单的Pygame窗口")  # 设置窗口标题

                通过定义两个参数screen_width = 1600,screen_height = 1000对窗口的大小进行限定;利用screen = pygame.display.set_mode((screen_width, screen_height))来创建窗口;pygame.display.set_caption("简单的Pygame窗口")来对窗口进行命名

              (4)填充主窗口的背景,并用RGB参数值的颜色进行填充:
    # 填充窗口背景为灰色
    screen.fill((156, 156, 156))
              (5)更新屏幕的内容:
    # 更新屏幕内容
    pygame.display.flip()  # 刷新窗口,显示最新的游戏画面

                通过pygame中的display.flip方法来对窗口的内容进行更新,以显示最新的画面

              (6)pygame.display的其他方法:
方法名称 说明
pygame.display.get_surface() 获取当前显示的Surface对象
pygame.display.flip() 更新整个待显示的Surface对象到屏幕上
pygame.display.update() 更新部分软件界面显示
pygame.display.lnfo() 产生一个VideInfo对象,包含了显示界面的相关信息
pygame.display.set_icon() 设置左上角的游戏图标,图标尺寸大小为32*32
pygame.display.iconify() 将显示的主窗口即Surface对象最小化,或者隐藏
pygame.display.get_active() 当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False
                3.利用pygame的Surface来创建图像
import pygame
import sys

# 初始化Pygame
pygame.init()

# 定义窗口大小和标题
screen_width = 1600
screen_height = 1000
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("简单的Pygame窗口")

# 创建一个新的Surface对象
width = 200  # 新Surface的宽度
height = 200  # 新Surface的高度
flags = pygame.SRCALPHA  # 使用SRCALPHA标志以支持Alpha透明度
depth = 32  # 32位颜色深度
new_surface = pygame.Surface((width, height), flags, depth)

# 加载图像
image = pygame.image.load("屏幕截图 2024-01-15 155410.png")  # 加载一个图像文件(请替换成你的图像文件路径)

# 进入主循环
while True:
    for event in pygame.event.get():  # 获取Pygame事件
        if event.type == pygame.QUIT:  # 如果事件类型是窗口关闭
            pygame.quit()  # 退出Pygame
            sys.exit()  # 退出程序

    # 在新Surface上绘制图像
    new_surface.fill((255, 0, 0))  # 填充新Surface为红色背景
    new_surface.blit(image, (0, 0))  # 将加载的图像绘制到新Surface的左上角

    # 填充窗口背景为灰色
    screen.fill((156, 156, 156))

    # 在窗口上绘制新Surface
    screen.blit(new_surface, (100, 100))  # 将新Surface绘制到窗口的(100, 100)位置

    # 更新屏幕内容
    pygame.display.flip()  # 刷新窗口,显示最新的游戏画面
                (1)Surface模块创建图像
# 创建一个新的Surface对象
width = 50  # 新Surface的宽度
height = 50  # 新Surface的高度
flags = pygame.SRCALPHA  # 使用SRCALPHA标志以支持Alpha透明度
depth = 32  # 32位颜色深度
new_surface = pygame.Surface((width, height), flags, depth)

# 格式  Surface=pygame.Surface(size=(width,height),flags,depth)
# size:表示Surface对象的矩形区域大小         
# flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道      
# depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节

               pygame.SRCALPHA 是Pygame库中的一个特殊标志,用于在创建新的Surface对象时指示该Surface具有Alpha透明度支持。具体来说,SRCALPHA表示要为新的Surface分配一个Alpha通道,以便你可以控制每个像素的透明度。

        Alpha透明度是指图像的每个像素的透明程度或不透明程度。Alpha通道是图像中存储每个像素Alpha透明度值的一种方式。它通常是一个独立的颜色通道,与红、绿和蓝通道一起组成了一个像素的颜色。每个像素都有一个与之关联的Alpha通道值,用于表示该像素的透明度。

运行结果示例:Python -- 利用pygame库进行游戏开发基础_第1张图片

                (2)Surface从外部加载图像

                引入外部图像的代码

image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')  
# 加载一个图像文件

                  完整代码:

import pygame  # 导入Pygame库
import sys  # 导入sys库,用于退出程序

pygame.init()  # 初始化Pygame

# 设置主窗口
screen = pygame.display.set_mode((800, 600))  # 创建一个800x600像素的游戏窗口
screen.fill('white')  # 填充窗口背景为白色

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

# 加载图片
image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')  # 加载一个图像文件

# 填充图片的指定区域为蓝色
image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
# 上面这行代码的作用是将加载的图像的指定区域(矩形区域,左上角坐标为(100, 100),宽度为100像素,高度为50像素)填充为蓝色。

image_surface.scroll(100, 60)  # 移动图片
# 上面这行代码的作用是将加载的图像向右移动100像素,向下移动60像素。

while True:
    for event in pygame.event.get():  # 获取Pygame事件
        if event.type == pygame.QUIT:  # 如果事件类型是窗口关闭
            pygame.quit()  # 退出Pygame
            sys.exit()  # 退出程序

    # 将图像添加到主屏幕上
    screen.blit(image_surface, (0, 0))  # 将加载的图像绘制到主窗口的左上角(0, 0)位置

    # 更新屏幕内容
    pygame.display.flip()  # 刷新窗口,显示最新的游戏画面

                运行结果:

Python -- 利用pygame库进行游戏开发基础_第2张图片

                4.利用pygame的Transform使图像变形 
transform方法
方法 说明
pygame.transform.scale() 将图片缩放至指定的大小,并返回一个新的Surface对象
pygame.transform.rotate() 将图片旋转至指定角度
pygame.transform.rotozoom() 以角度旋转图像,同时将图像缩小或放大至指定的倍数
                5.利用pygame的time进行时间的控制
                (1)游戏暂停
                   <1>利用pygame.time.get_ticks()来获取时间
import pygame
import sys

pygame.init()

# 设置主窗口
screen = pygame.display.set_mode((800, 600))
screen.fill((255, 255, 255))  # 白色背景
# 设置窗口标题
pygame.display.set_caption('简单的Pygame窗口')

# 加载图片
image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')

# 初始化滚动变量
scroll_x = 0
scroll_y = 0
last_update_time = pygame.time.get_ticks()


while True:
    # 检查退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 获取当前时间
    current_time = pygame.time.get_ticks()
    # 每隔100毫秒滚动一次图片
    if current_time - last_update_time > 100:
        last_update_time = current_time
        scroll_x += 10  # 每次水平滚动10像素
        scroll_y += 5   # 每次垂直滚动5像素
        image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
        image_surface.scroll(scroll_x, scroll_y)

    # 将图像添加到主屏幕上
    screen.blit(image_surface, (0, 0))
    # 更新屏幕内容
    pygame.display.flip()

                在上面的代码中,last_update_time = pygame.time.get_ticks() 的作用是用来记录上一次更新操作的时间点。在游戏循环中,首先获取当前的毫秒数时间戳,使用 pygame.time.get_ticks() 函数得到 current_time 变量。然后,通过计算 current_time - last_update_time 来确定自上一次更新操作以来经过了多少毫秒时间。

                如果经过的时间超过了100毫秒(即 current_time - last_update_time > 100),就执行一次图像的滚动操作。接着,将 last_update_time 更新为当前时间,以便下一次循环中继续计算时间间隔。last_update_time 变量的作用是跟踪上一次图像滚动操作的时间点,以便在控制每次滚动的时间间隔时使用,确保图像以恰当的速度滚动。

                   <2>利用pygame.time.wait()来暂停一段时间和利用pygame.time.set_time()创建一个定时器,即每隔一段时间就去执行一些动作
import pygame  # 导入pygame库

pygame.init()  # 初始化pygame

# 创建一个窗口,尺寸为500x400像素
screen = pygame.display.set_mode((500, 400))

# 设置窗口的标题为'时间设置'
pygame.display.set_caption('时间设置')

# 获取当前时间(自pygame初始化以来的毫秒数)
t = pygame.time.get_ticks()

# 暂停游戏3000毫秒(3秒)
t1 = pygame.time.wait(3000)

# 打印暂停时间(这里应该是3000,因为pygame.time.wait返回的是暂停的毫秒数)
print(t1)

# 加载一张图片(确保文件路径正确)
image_surface = pygame.image.load('E:\\超级玛丽\\屏幕截图 2024-01-15 155410.png')

# 进入游戏的主循环
while True:
    # 遍历所有的事件
    for event in pygame.event.get():
        # 如果事件类型是QUIT(例如点击了关闭窗口的按钮),则退出程序
        if event.type == pygame.QUIT:
            exit()

    # 将加载的图片绘制到窗口的(0,0)位置
    screen.blit(image_surface, (0, 0))

    # 更新整个屏幕的显示
    pygame.display.update()

你可能感兴趣的:(pygame,python,开发语言)