我的编程空间,编程开发者的网络收藏夹
学习永远不晚

猿创征文|程序猿乘风破浪 Python Pygame 原创小游戏【源码+解析】

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

猿创征文|程序猿乘风破浪 Python Pygame 原创小游戏【源码+解析】

        第一次参加猿创征文活动,肯定要来一波大的!Σ(⊙▽⊙"a!!!

        在夏天结束不久之际,让我们再来一波冲浪,感受夏日阳光下程序员的刻苦钻研精神,和无处可放基情。

        最近学习了一丁点Pygame技能,感觉有点上头,一波操作创作“程序猿乘风破浪”游戏一款,希望大家喜欢。

4c306c42c74b4efebfe2325909c4be8f.gif

一、游戏展示

        所谓:开局一张图,后面全靠编。先放图片、动画展示一波。

        游戏玩法很简单,按空格猴子↑跳起来,躲开巨浪袭击,时间越长得分越高,碰到巨浪游戏结束统计得分

c85be1e405534f4db0844a2827f83a74.png

游戏展示画面

 二、游戏逻辑

        为了通俗易懂,这里就不用代码结构的方式解释。游戏大致可以分为四大部分,分别为:

        (一)游戏背景

                1、天空背景。用多条蓝色横线点缀的白色天空,使用Python代码让天空背景从右到左不停的移动,从而制造猴子向右移动的假象

42cf434eb5f34a03a2f33cc82dc98a0a.png

天空背景

背景精灵代码:

class Background(GameSprite):    """游戏背景精灵"""    def __init__(self,image_path, is_alt=False):        # 1.调用父类方法实现精灵的创建(image/rect/speed)        super().__init__(image_path)        # 2.判断是否是交替图像,如果是,需要设置初始位置        if is_alt is True:            self.rect.x = self.rect.width        else:            self.rect.x = 0    def update(self):        # 1.调用父类的方法实现        super().update()        # 2.判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方        if self.rect.x <= -SCREEN_RECT.width:            self.rect.x = self.rect.width

                2、海洋背景。海洋背景使用了内层海洋外层海洋两张背景图片,同时让他们的移动速度与天空背景不一致,两个内层与外层海洋之间的移动速度也不一致,从而制造游戏的立体层次感,让2D游戏增加3D的立体感觉。

82541774e0cd47d48f86cde02d4e1d8d.png

    def __create_sprites(self):        """创建背景精灵和精灵组"""        # 天空背景        bg1 = Background("./images/background_16_9.png", False)        bg2 = Background("./images/background_16_9.png", True)        self.back_group = pygame.sprite.Group(bg1, bg2)        # 内层海洋背景        sea_bg_1 = Background("./images/sea_bg_1_16_9.png", False)        sea_bg_2 = Background("./images/sea_bg_1_16_9.png", True)        #移动速度        sea_bg_1.speed = 2        sea_bg_2.speed = 2        sea_bg_1.rect.bottom = SCREEN_RECT.height        sea_bg_2.rect.bottom = SCREEN_RECT.height        self.sea_bg_ground_1 = pygame.sprite.Group(sea_bg_1, sea_bg_2)        # 外层海洋背景        sea_bg_3 = Background("./images/sea_bg_2_16_9.png", False)        sea_bg_4 = Background("./images/sea_bg_2_16_9.png", True)        # 移动速度        sea_bg_3.speed = 3        sea_bg_4.speed = 3        sea_bg_3.rect.bottom = SCREEN_RECT.height        sea_bg_4.rect.bottom = SCREEN_RECT.height        self.sea_bg_ground_2 = pygame.sprite.Group(sea_bg_3, sea_bg_4)

        (二)猴子游戏精灵(玩家)

                1、让猴子精灵上下跳动。使用Python监听键盘时间,当按下键盘空格键时,给猴子精灵一个向上(y轴负值)的速度,当键盘空格键没按下时给猴子精灵一个向下(y轴正值)的速度,这样就可以实现猴子精灵的上下跳动。

881b66eceb7042788e78c4262f32a728.png

主要代码如下:

        # 使用键盘提供的方法获取键盘按键 - 按键元组        keys_pressed = pygame.key.get_pressed()        # 判断用户按下键盘空格键        if keys_pressed[pygame.K_SPACE]:            # 跳起            self.man.speed = -10        else:            # 下降            self.man.speed = 10

                2、让猴子不能飞出游戏屏幕。使用Python代码监控猴子的位置,当猴子y轴的值小于0(碰到屏幕上边缘)时y轴的值重置为0,当猴子y轴的值大于360(碰到屏幕下边缘)时y轴重置为360。

cb30efa925fd4ca79e092b21273102c9.png

主要代码如下: 

    def update(self):        # 猴子在水平方向移动        self.rect.y += self.speed        # 控制猴子不能移出屏幕        if self.rect.y < 0:            self.rect.y = 0        elif self.rect.bottom > self.bottom_to_ground:            self.rect.bottom = self.bottom_to_ground

                3、让猴子置与内层海洋和外层海洋之间,增加游戏层次感。在调用Pygame刷新界面函数时,先调用内层海洋刷新函数,再调用猴子精灵刷新函数,最后在调用外层海洋刷新函数,既可以实现预期效果。

        8096433037df4a53bab625278288ea4f.png

主要代码如下:

    def __update_sprites(self):        """刷新各个精灵组"""        # 先刷新内层海洋        self.sea_bg_ground_1.update()        self.sea_bg_ground_1.draw(self.screen)        # 再刷新猴子        self.man_group.update()        self.man_group.draw(self.screen)        # 最后刷新外层海洋        self.sea_bg_ground_2.update()        self.sea_bg_ground_2.draw(self.screen)

        (三)巨浪游戏精力(敌人)

1d552a75ac9c40bc8996288f34e08bbd.png

                1、每个一段时间生成一股巨浪,巨浪由右到左出现,速度有快有慢。首先继承pygame.sprite.Sprite创建巨浪精灵类,使其具有速度speed等属性。

class Wave(GameSprite):    """海浪精灵"""    def __init__(self):        # 1.调用父类方法,创建海浪精灵,同时指定海浪图片        super().__init__("./images/wave.png")        # 2.指定海浪的初始随机速度        self.speed = random.randint(2, 4)        # 3.指定海浪的初始随机位置        self.rect.x = SCREEN_RECT.width        self.rect.bottom = SCREEN_RECT.height

        然后创建Pygame自定义事件CREATE_WAVE_EVENT。

# 创建海浪的定时器事件常量CREATE_WAVE_EVENT = pygame.USEREVENT+1

        同时使用pygame.time.set_timer创建定时器,每3秒触发一次该事件。 

# 4.设置定时器事件——每3秒创建一次海浪pygame.time.set_timer(CREATE_WAVE_EVENT, 3000)

        最后,若事件监听处理函数发现该事件后,创建一个巨浪精灵并加入精灵组。

elif event.type == CREATE_WAVE_EVENT:    # 创建海浪精灵    wave = Wave()    # 将海浪精灵添加到海浪精灵组    self.wave_group.add(wave)

                2、巨浪与猴子碰撞后结束游戏。每帧使用def __check_collide(self)检测猴子精灵与巨浪精灵组是否出现碰撞,若碰撞了就结束本回合游戏。

8b9af2eb8b8247c5a78da203d615c3f1.png

 碰撞检测代码如下:

    def __check_collide(self):        # 1.撞到海浪        waves = pygame.sprite.spritecollide(self.man, self.wave_group, True)        # 2.判断碰撞列表长度        if len(waves) > 0:            # 该回合游戏结束,显示菜单            self.menu_sprite.display = True            self.game_state = 0

                3、巨浪移出左屏幕后删除该巨浪。为了节省内存,当没有被碰到的巨浪从右至左移出屏幕左边缘的时候应该删除该巨浪精灵。可以每帧判断巨浪的右侧是否小于屏幕左边缘实现该删除操作。

43635282fc364f0d810a37dd79a8c7d9.png

        (四)定时器和得分

                1、自定义定时器事件,每个1秒数字减1。游戏默认游玩时间为30秒,游戏开始后便开始倒数,右上角开始30,29,28更新数字。和创建巨浪类似,可以先创建一个倒数事件,然后使用定时器每秒触发,最后在监听事件函数中执行刷新数字操作。

        feb93473ca4c4e51ba04933f347c779a.png

主要代码如下:

        创建自定义事件CREATE_I_EVENT

# 创建游戏倒计时的定时器常量CREATE_I_EVENT = pygame.USEREVENT+2

         同时使用pygame.time.set_timer创建定时器,每1秒触发一次该事件。 

# 5.设置定时器事件——倒计时每1秒触发一次pygame.time.set_timer(CREATE_I_EVENT, 1000)

         最后,若事件监听处理函数发现该事件后,倒计时减1

elif event.type == CREATE_I_EVENT:    # 倒计时减1秒    self.countdown_sprite.start_time = self.countdown_sprite.start_time - 1

                2、每个一秒加十分。和倒计时一样,只是这里是每秒加十分。

elif event.type == CREATE_I_EVENT:    # 每过1秒加十分    self.score_sprite.score = self.score_sprite.score + 10

                3、游戏重新开始时,重置定时器及得分。如果用户点击重新开始游戏,则重置相关属性重新开始游戏。

 ec9eb798ec854164b2cfd367353a7485.png

三、游戏完整源代码

        游戏终于搞定了!尼玛啊!又要编程又要写文章,累啊!o(╥﹏╥)o,码文不易,请多多支持,Thanks♪(・ω・)ノ,后续在此基础上再搞一波,丰富游戏玩法。

        最后贴上完整源码,素材(部分素材来源网络,如果问题请联系博主处理,谢谢!)只能打包放下载了。

        https://download.csdn.net/download/qq616491978/86512478

来源地址:https://blog.csdn.net/qq616491978/article/details/126769079

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

猿创征文|程序猿乘风破浪 Python Pygame 原创小游戏【源码+解析】

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于Python实现原创程序猿乘风破浪小游戏

最近学习了一丁点Pygame技能,感觉有点上头,一波操作创作“程序猿乘风破浪”游戏一款,文中的示例代码讲解详细,希望大家能够喜欢
2023-02-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录