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通道值,用于表示该像素的透明度。

运行结果示例:

                (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()  # 刷新窗口,显示最新的游戏画面

                运行结果:

                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()

  • 35
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《PythonPygame游戏 - 从入门到精通.pdf》是一本关于使用Python语言Pygame编写游戏的书籍。Python是一种简单易学的编程语言,具有丰富的和工具,非常适合初学者入门。而Pygame是为了方便开发2D游戏而设计的,提供了丰富的函数和类,可以帮助开发者轻松地创建游戏。 这本书的目标是帮助读者从游戏开发基础知识入手,逐步了解PythonPygame的使用方法,并逐渐提高到精通水平。书中按照渐进式的学习方式,从基本的Python语法开始介绍,然后逐步引入Pygame的功能和特性。读者可以学习如何创建游戏窗口,绘制图形和精灵,处理用户输入,实现游戏逻辑等。 此外,书中还涵盖了一些高级的游戏开发技术,比如碰撞检测、音效处理、动画效果和物理模拟等。通过学习这些内容,读者将能够掌握更多复杂游戏开发方法,并能够自己设计和实现自己的游戏。 总的来说,《PythonPygame游戏 - 从入门到精通.pdf》是一本适合初学者和有一定编程基础的读者学习游戏开发的书籍。读者可以通过学习这本书,掌握使用PythonPygame开发游戏的基本技能,从而进一步提升自己在游戏开发领域的能力。 ### 回答2: 《PythonPygame游戏-从入门到精通》是一本关于使用Python编程语言Pygame游戏开发来编写游戏的指南。它逐步介绍了从入门到精通的过程,并教会读者如何利用PythonPygame创建自己的游戏Python是一种简单易学的高级编程语言,被广泛应用于各种领域,包括游戏开发Pygame是一个基于Python,专门用于开发2D游戏。它提供了许多功能强大的工具和函数,可以帮助开发者处理游戏图形、声音、输入等方面的内容。 《PythonPygame游戏-从入门到精通》一书首先向读者介绍了PythonPygame基础知识,包括安装和配置开发环境以及PythonPygame的基本语法和功能。然后,它逐渐深入探讨了游戏开发的不同方面,包括游戏循环、图形绘制、碰撞检测、游戏物理等。书中使用了大量的示例代码和实际案例来帮助读者理解和应用所学知识。 通过学习《PythonPygame游戏-从入门到精通》,读者将获得从入门到精通的游戏开发技能。他们将学会创建各种类型的游戏,从简单的益智游戏到复杂的角色扮演游戏。此外,书中还提供了一些高级技巧和技术,如使用人工智能和网络功能来增强游戏体验。 总之,这本书是一本全面而深入的学习资源,适合那些希望利用PythonPygame开发游戏的初学者和有经验的开发者。它将引导读者从零开始掌握游戏开发的基本技能,并帮助他们创建自己的精彩游戏作品。 ### 回答3: 《PythonPygame游戏-从入门到精通.pdf》是一本专门介绍如何使用Python及其游戏开发Pygame来编写游戏的书籍。 Python是一种高级编程语言,易于学习和使用。它具有简洁的语法和丰富的标准,可以进行各种编程任务,包括游戏开发Pygame是一个基于Python的开源游戏开发,提供了丰富的功能和工具,方便开发进行游戏的设计和制作。 这本书从入门到精通的目标,意味着它适合各种编程经验水平的读者。对于初学者,它会介绍PythonPygame的基本知识和概念,例如变量、条件语句、循环和函数等。然后,它将引导读者学习如何使用Pygame中的各种功能和模块来创建游戏窗口、处理用户输入、绘制图形等。通过实际的示例和练习,读者可以逐步掌握游戏设计和开发的基本技能。 对于有一定编程经验的读者,本书也提供了更高级的内容和技巧,例如碰撞检测、动画效果、游戏物理学等。读者可以通过这些深入的学习,进一步提升自己的游戏开发能力,设计出更加有趣和复杂的游戏。 总的来说,《PythonPygame游戏-从入门到精通.pdf》是一本对于想要学习如何使用PythonPygame编写游戏的读者来说非常有价值的书籍。通过它的指导,读者可以系统地学习游戏开发基础知识和技能,并逐步提高自己的水平,成为一名优秀的游戏开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值