pygame游戏模块详解

这篇具有很好参考价值的文章主要介绍了pygame游戏模块详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、下载pygame第三方模块

二、pygame模块知识点化(把模块分为n多个知识点)

1、使用pygame知识制作一个可以关闭的空白窗体,这里我就不用文字说明了,直接上代码,简洁明了。

 2、使用精灵显示背景, 背景的循环展示

3、使用精灵玩家,玩家可以移动

4、使用精灵显示道具,玩家与道具碰撞检测

5、UI的使用 (字体,鼠标点击检测)


前言

        Pygame 是一个专门用来开发游戏的 Python 模块,主要为开发、设计 2D 电子游戏而生,它是一个免费、开源的第三方软件包,支持多种操作系统,具有良好的跨平台性(比如 Windows、Linux、Mac 等)。Pygame 是 Pete Shinners 在 SDL(Simple DirectMedia Layer,一套开源的跨平台多媒体开发库)基础上开发而来,其目的是取代 PySDL。

一、下载pygame第三方模块

        在pycharm软件的终端命令栏中输入以下命令下载安装pygame  

pygame模块详解,pygame,python,游戏

pip install pygame

二、pygame模块知识点化(把模块分为n多个知识点)

1、使用pygame知识制作一个可以关闭的空白窗体,这里我就不用文字说明了,直接上代码,简洁明了。

# 导入sys模块包 用于终止退出程序
import sys
# 导入pygame模块包
import pygame

pygame.init()  # 初始化pygame 虽然在这个简单的开关空白窗体看不出作用 但是默认把他写上是必要的 防止报错

screen = pygame.display.set_mode((400, 600))  # 设置一个400x400的空白窗体
screen.fill((0, 255, 255))  # 这里我们给空白窗体添加一个背景颜色

while True:
    # 循环获取事件,监听事件
    for event in pygame.event.get():
        # 判断用户是否点了关闭按钮
        if event.type == pygame.QUIT:
            # 卸载退出所有模块
            pygame.quit()
            # 终止程序
            sys.exit()

    pygame.display.flip()  # 更新屏幕内容 没有它 你增加的内容是无法显示的

  这样我们就可以获得一个可关闭的带有背景颜色的空白窗体。

pygame模块详解,pygame,python,游戏

 2、使用精灵显示背景, 背景的循环展示

import pygame, sys


# 构造一个背景精灵类 继承pygame的精灵类
class BgSprite(pygame.sprite.Sprite):
    # 初始化函数 加入参数name(需要加载的背景名) top_left(背景从哪里开始加载)
    def __init__(self, name, location):
        # 有精灵父类 必须调用
        super().__init__()
        self.image = pygame.image.load(name)  # 加载图片
        self.rect = self.image.get_rect()  # 获取rect的区域
        self.rect.topleft = location  # 设置位置

    # 定义一个更新函数
    def update(self):
        self.rect.top += 10  # 每次向上移动10个像素
        if self.rect.top >= 600:
            self.rect.top = -600


# 构造一个背景精灵的管理类
class BgManage:
    # 定义初始化函数 传入Manage类的实例 方便把背景添加到screen上
    def __init__(self, mg):
        self.mg = mg
        self.bg_group = pygame.sprite.Group()  # 添加一个背景精灵组
        self.bg_sprite1 = BgSprite("img/begin2.png", (0, 0))  # 实例化两个背景精灵加入背景精灵组
        self.bg_sprite1.add(self.bg_group)
        self.bg_sprite2 = BgSprite("img/begin2.png", (0, -600))
        self.bg_sprite2.add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.mg.screen)


# 构造管理类管理精灵管理类
class Manage:
    def __init__(self):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption("会动的背景")
        # 实例化背景精灵管理类
        self.bg_manage = BgManage(self)

    def run(self):
        while True:
            self.clock.tick(25)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            # 更新背景管理类中的内容
            self.bg_manage.update()
            pygame.display.flip()


mg = Manage()
mg.run()

这样我们就得到一个会动的背景

3、使用精灵玩家,玩家可以移动

        在已有的代码中添加玩家精灵类和玩家管理类就可以实现

import pygame, sys


# 构造一个精灵父类
class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)  # 加载图片
        self.rect = self.image.get_rect()  # 获取rect的位置


# 构造一个背景精灵类 继承的精灵父类
class BgSprite(BaseSprite):
    # 初始化函数 加入参数name(需要加载的背景名) top_left(背景从哪里开始加载)
    def __init__(self, name, location):
        # 有精灵父类 必须调用
        super().__init__(name)
        self.rect.topleft = location  # 设置位置

    # 定义一个更新函数
    def update(self):
        self.rect.top += 10  # 每次向上移动10个像素
        if self.rect.top >= 600:
            self.rect.top = -600


# 构造一个背景精灵的管理类
class BgManage:
    # 定义初始化函数 传入Manage类的实例 方便把背景添加到screen上
    def __init__(self, mg):
        self.mg = mg
        self.bg_group = pygame.sprite.Group()  # 添加一个背景精灵组
        self.bg_sprite1 = BgSprite("img/begin2.png", (0, 0))  # 实例化两个背景精灵加入背景精灵组
        self.bg_sprite1.add(self.bg_group)
        self.bg_sprite2 = BgSprite("img/begin2.png", (0, -600))
        self.bg_sprite2.add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.mg.screen)


class PlayerSprite(BaseSprite):
    # 初始化函数 加入参数name(需要加载的背景名) location(背景从哪里开始加载)
    def __init__(self, name, location):
        # 有精灵父类 必须调用
        super().__init__(name)
        self.rect.topleft = location  # 设置位置

    def update(self):
        # 获取键盘事件 玩家移动
        key_pressed = pygame.key.get_pressed()
        # 按下键盘←键 向左移动
        if key_pressed[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.left -= 8
        # 按下键盘→键 向右移动
        elif key_pressed[pygame.K_RIGHT] and self.rect.right < 400:
            self.rect.left += 8
        # 按下键盘↑键 向上移动
        elif key_pressed[pygame.K_UP] and self.rect.top > 0:
            self.rect.top -= 8
        # 按下键盘↓键 向下移动
        elif key_pressed[pygame.K_DOWN] and self.rect.bottom < 600:
            self.rect.top += 8


class PlayerManage:  # 构造玩家管理类
    def __init__(self, mg):
        self.mg = mg
        # 添加玩家精灵组
        self.player_group = pygame.sprite.Group()
        # 实例玩家精灵并加入到玩家精灵组
        self.player_sprite = PlayerSprite("img2/me1.png", (150, 400))
        self.player_sprite.add(self.player_group)

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.mg.screen)


# 构造管理类管理精灵管理类
class Manage:
    def __init__(self):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption("会动的背景")
        # 实例化背景精灵管理类
        self.bg_manage = BgManage(self)
        # 实例化玩家管理
        self.player_manage = PlayerManage(self)

    def run(self):
        while True:
            self.clock.tick(25)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            # 更新背景管理类中的内容
            self.bg_manage.update()
            self.player_manage.update()
            pygame.display.flip()


mg = Manage()
mg.run()

4、使用精灵显示道具,玩家与道具碰撞检测

        在已有的代码中添加道具精灵类和道具管理类,然后添加碰撞检测就可以实现

import random

import pygame, sys


# 构造一个精灵父类
class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)  # 加载图片
        self.rect = self.image.get_rect()  # 获取rect的位置


# 构造一个背景精灵类 继承的精灵父类
class BgSprite(BaseSprite):
    # 初始化函数 加入参数name(需要加载的背景名) top_left(背景从哪里开始加载)
    def __init__(self, name, location):
        # 有精灵父类 必须调用
        super().__init__(name)
        self.rect.topleft = location  # 设置位置

    # 定义一个更新函数
    def update(self):
        self.rect.top += 10  # 每次向上移动10个像素
        if self.rect.top >= 600:
            self.rect.top = -600


# 构造一个背景精灵的管理类
class BgManage:
    # 定义初始化函数 传入Manage类的实例 方便把背景添加到screen上
    def __init__(self, mg):
        self.mg = mg
        self.bg_group = pygame.sprite.Group()  # 添加一个背景精灵组
        self.bg_sprite1 = BgSprite("img/begin2.png", (0, 0))  # 实例化两个背景精灵加入背景精灵组
        self.bg_sprite1.add(self.bg_group)
        self.bg_sprite2 = BgSprite("img/begin2.png", (0, -600))
        self.bg_sprite2.add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.mg.screen)


class PlayerSprite(BaseSprite):
    # 初始化函数 加入参数name(需要加载的图片) location(玩家从哪里开始加载)
    def __init__(self, name, location):
        # 有精灵父类 必须调用
        super().__init__(name)
        self.rect.topleft = location  # 设置位置

    def update(self):
        # 获取键盘事件 玩家移动
        key_pressed = pygame.key.get_pressed()
        # 按下键盘←键 向左移动
        if key_pressed[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.left -= 8
        # 按下键盘→键 向右移动
        elif key_pressed[pygame.K_RIGHT] and self.rect.right < 400:
            self.rect.left += 8
        # 按下键盘↑键 向上移动
        elif key_pressed[pygame.K_UP] and self.rect.top > 0:
            self.rect.top -= 8
        # 按下键盘↓键 向下移动
        elif key_pressed[pygame.K_DOWN] and self.rect.bottom < 600:
            self.rect.top += 8


class PlayerManage:  # 构造玩家管理类
    def __init__(self, mg):
        self.mg = mg
        # 添加玩家精灵组
        self.player_group = pygame.sprite.Group()
        # 实例玩家精灵并加入到玩家精灵组
        self.player_sprite = PlayerSprite("img2/me1.png", (150, 400))
        self.player_sprite.add(self.player_group)

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.mg.screen)


# 构造道具精灵类
class PropSprite(BaseSprite):
    # 初始化函数 加入参数name(需要加载的道具图片) center(道具加载的位置)
    def __init__(self, name, center):
        super().__init__(name)
        self.rect.center = center

    def update(self):
        self.rect.top += 10
        if self.rect.top >= 600:
            self.kill()


class PropManage:
    def __init__(self, mg):
        self.mg = mg
        self.prop_group = pygame.sprite.Group()
        self.time_count = 3     # 计时器

    def update(self):
        # 每过一段时间就会产生道具
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 3
            self.prop_sprite = PropSprite("img2/bomb_supply.png", (random.randint(0, 370), 0))
            self.prop_sprite.add(self.prop_group)
        self.prop_group.update()
        self.prop_group.draw(self.mg.screen)


# 构造管理类管理精灵管理类
class Manage:
    def __init__(self):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption("会动的背景")
        # 实例化背景精灵管理类
        self.bg_manage = BgManage(self)
        # 实例化玩家管理
        self.player_manage = PlayerManage(self)
        # 实例化道具管理
        self.prop_manage = PropManage(self)

    def run(self):
        while True:
            self.clock.tick(25)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            # 更新背景管理类中的内容
            self.bg_manage.update()
            self.player_manage.update()
            self.prop_manage.update()
            # 组与组之间的碰撞检测
            result = pygame.sprite.groupcollide(self.player_manage.player_group, self.prop_manage.prop_group, False, True)
            if result:
                print("吃到了道具")

            pygame.display.flip()


mg = Manage()
mg.run()

5、UI的使用 (字体,鼠标点击检测)

import sys

import pygame


# 游戏状态 ready 未开始  gaming  游戏中 end 游戏结束

# 创建点击检测类
class Util:
    """
    工具类: 提供静态方法
    """

    @staticmethod
    def check_click(sprite):
        # 如果是鼠标的左键
        """
        精灵的点击检测
        """
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False


# 创建ui精灵类 继承pygame精灵
class UISprite(pygame.sprite.Sprite):
    def __init__(self, name, center):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()
        self.rect.center = center


# 构造Ui精灵管理类
class UIManage:
    def __init__(self, gm):
        self.gm = gm
        self.foot = pygame.font.Font("font/font.ttf", 30)

        # 创建一个游戏前的精灵组
        self.ready_group = pygame.sprite.Group()
        self.begin_btn = UISprite("img/begin_btn.png", (200, 300))
        self.begin_btn.add(self.ready_group)

        # 游戏中在屏幕显示字体
        self.score_surface = self.foot.render(f"Score:{0}", True, (255, 0, 0))

        # 游戏结束
        self.end_group = pygame.sprite.Group()
        self.gm_over_btn = UISprite("img/begin_btn.png", (200, 300))
        self.gm_over_btn.add(self.end_group)

    def update(self):
        # 游戏前有一个开始按钮
        if self.gm.state == "ready":
            self.ready_group.draw(self.gm.screen)
            # 把开始精灵传入工具类
            if Util.check_click(self.begin_btn):
                # 状态切换到游戏中
                self.gm.state = "gaming"
        elif self.gm.state == "gaming":
            # 游戏中会显示一个游戏分数的字体
            self.gm.screen.blit(self.score_surface, (0, 0))
        elif self.gm.state == "end":
            # 游戏结束会出现重新开始按钮 点击重新开始会再次切换到游戏中
            self.end_group.draw(self.gm.screen)
            if Util.check_click(self.gm_over_btn):
                self.gm.state = "gaming"


class GameManage:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((400, 600))

        self.state = "ready"
        # 实例化UI精灵管理类
        self.ui_manage = UIManage(self)

    def run(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                # 测试一键自杀 游戏结束
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_SPACE:
                        self.state = "end"
            self.screen.fill((0, 255, 255))
            self.ui_manage.update()
            pygame.display.flip()



gm = GameManage()
gm.run()

开始前:

pygame模块详解,pygame,python,游戏

游戏中:

pygame模块详解,pygame,python,游戏

游戏结束:

pygame模块详解,pygame,python,游戏文章来源地址https://www.toymoban.com/news/detail-736068.html

到了这里,关于pygame游戏模块详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python游戏篇:pygame

    pygame专门用于多媒体(如电子游戏开发),其中包含对图像、声音、视频、事件、碰撞等支持, 如果想开发3D游戏,pygame就显得力不从心了,可以看看panda3d。 pygame中的draw模块可以在窗口上绘图如线条、矩形、多边形、圆、椭圆、圆弧等。 pygame中的image模块用来加载图片。

    2024年02月13日
    浏览(36)
  • 【Python】pygame弹球游戏实现

    游戏源码: pygame_os库:

    2024年02月12日
    浏览(44)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(35)
  • Python的Pygame游戏框架(汇总)

    个人主页 : ζ小菜鸡 大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习Python的Pygame游戏框架。 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)   pygame是跨平台Python模块,专为电子游戏设置,包含图像、声音。创建在SDL(Simple Direct Medica Layer)基础上,允许实时电

    2024年02月09日
    浏览(42)
  • python游戏库pygame经典教程

    目录 一.Pygame程序基本搭建过程         1.初始化化程序         2.创建Surface对象         3.事件监听         4.游戏循环  二.Pygame Display显示模块详解         1.将Surface对象粘贴至主窗口上         2.设置窗口主窗口         3.填充主窗口背景,参数

    2024年02月03日
    浏览(38)
  • python如何安装pygame模块

    游戏设计作品集,艺术留学申请条件/费用/流程全面详解查看详情广告 1 首先按键盘上的“Win + R”键。 游戏设计作品集,艺术留学申请_ACG国际艺术教育查看详情广告 2 在弹出的运行窗口中输入cmd,输入完成后点击确定。 3 然后在弹出的命令提示符窗口中输入python,输入完成后点

    2024年02月03日
    浏览(35)
  • Python基础篇(十五)-- Pygame游戏编程

            Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让

    2024年02月05日
    浏览(36)
  • Python利用pygame实现飞机大战游戏

    文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 Demo 必备知识:python图形化编程pygame游戏模块 效果图 ◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考:【Python游戏】1小时开发飞机大战游戏-Pygame版本(1小时40分钟) 博主提取资源: 提取

    2024年04月09日
    浏览(52)
  • Pygame —— 一个好玩的游戏 Python 库

    在电子游戏的世界里,每一个精彩跳跃、每一个刺激冲刺、每一次动听的背景音乐,都是通过精心设计的代码和资源组合出来的奇幻体验。 想象一下,如果你能够制作自己的电子游戏,将内心的奇思妙想实现在屏幕上,那会是多么令人兴奋和自豪的事情。这个梦想,并不遥远

    2024年02月20日
    浏览(46)
  • Python游戏利器pygame,疯狂赛车(34)

    小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 你玩过游戏吗? 你喜欢玩游戏吗? 手机游戏,电脑游戏,还是游戏机游戏? pygame是一个跨平台Python库,pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public Lice

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包