当前位置:主页 > python教程 > Python程序猿乘风破浪游戏

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

发布:2023-04-08 16:10:01 59


本站精选了一篇相关的编程文章,网友金敏才根据主题投稿了本篇教程内容,涉及到Python实现程序猿乘风破浪游戏、Python程序猿乘风破浪、Python、游戏、Python程序猿乘风破浪游戏相关内容,已被236网友关注,相关难点技巧可以阅读下方的电子资料。

Python程序猿乘风破浪游戏

一、游戏展示

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

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

游戏展示画面

二、游戏逻辑

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

游戏背景

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

天空背景

背景精灵代码:

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的立体感觉。

    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轴正值)的速度,这样就可以实现猴子精灵的上下跳动。

主要代码如下:

        # 使用键盘提供的方法获取键盘按键 - 按键元组
        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。

主要代码如下:

    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刷新界面函数时,先调用内层海洋刷新函数,再调用猴子精灵刷新函数,最后在调用外层海洋刷新函数,既可以实现预期效果。

主要代码如下:

    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)

巨浪游戏精力(敌人)

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)检测猴子精灵与巨浪精灵组是否出现碰撞,若碰撞了就结束本回合游戏。

碰撞检测代码如下:

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

定时器和得分

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

主要代码如下:

创建自定义事件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、游戏重新开始时,重置定时器及得分。如果用户点击重新开始游戏,则重置相关属性重新开始游戏。

以上就是基于Python实现原创程序猿乘风破浪小游戏的详细内容,更多关于Python程序猿乘风破浪游戏的资料请关注码农之家其它相关文章!


参考资料

相关文章

  • 如何用Python的list或dict字段模式读取文件

    发布:2020-01-07

    这篇文章主要给大家介绍了Python利用list字段模式或者dict字段模式读取文件的方法,文中给出了详细的介绍和示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以跟着


  • 如何解决Python中Dataframe通过print输出多行时显示省略号问题

    发布:2020-02-22

    今天小编就为大家分享一篇在Python中Dataframe通过print输出多行时显示省略号的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • 实例解析python urllib urlopen()对象方法/代理的补充说明

    发布:2020-02-22

    这篇文章主要介绍了python urllib urlopen()对象方法/代理的补充说明的相关资料,需要的朋友可以参考下


  • 一文带你吃透Python中的日期时间模块

    发布:2023-03-27

    Python 提供了 日期和时间模块用来处理日期和时间,还可以用于格式化日期和时间等常见功能。这篇文章就来带大家了解一下它的使用,需要的可以参考一下


  • python3中property的实例用法

    发布:2019-11-12

    这篇文章主要为大家详细介绍了python3中的property使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Python嵌套循环的使用

    发布:2023-03-30

    本文主要介绍了Python嵌套循环的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>


  • Python中数值比较的效率

    发布:2023-03-13

    这篇文章主要介绍了Python中数值比较的效率,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • Python使用Pandas处理测试数据的方法

    发布:2023-04-02

    Pandas是一个功能极其强大的数据分析库,可以高效地操作各种数据集,这篇文章主要介绍了Python自动化测试-使用Pandas来高效处理测试数据,需要的朋友可以参考下


网友讨论