贪吃蛇“大作战”(进阶篇)

  贪吃蛇游戏做到现在算是真正的完结了,后续如果有所改动,也只是当做版本更新处理。现在我整体介绍一下我做的这个贪吃蛇游戏:

  首先,我这个贪吃蛇游戏满足传统贪吃蛇游戏的基本规则:

  • 贪吃蛇吃到果实会“成长”(身体长度+1);
  • 碰到墙壁会死亡(有固定的活动范围);
  • 蛇头“追尾”会死亡(蛇的头部不能触碰到身体其他部分)

  然后,我在完成这个基本规则的情况下做了一些添加和改动。(这个可以实现基本规则的游戏代码就是之前博客中发出来的,和网上的比较不一样的就是我是以类的方式写的)

  • 我为游戏增加了 暂停\继续 的功能,可以在有外界干扰的时候手动 暂停\继续 游戏,这种暂停功能同样会使游戏的背景音乐暂停。
 #控制游戏暂停\继续
            elif event.key == K_SPACE:
                pause_flag = 0
                while True:
                    for event in pygame.event.get():
                        if event.type == QUIT:
                            pygame.quit()
                            exit()

                        if event.type == KEYDOWN:
                            if event.key == K_SPACE:
                                
                                pause_flag = 1

                    if pause_flag == 1:
                        pygame.mixer.music.unpause()
                        break
                    pygame.mixer.music.pause()              
  • 如上所说,我为游戏加入了背景音乐,有背景音乐的游戏和没有背景音乐的游戏完全是两种不同的游戏。当然,其中还加入了贪吃蛇吃到食物时的音效,还有贪吃蛇死亡时的音效。

  背景音乐

    #获取背景音乐的路径
    BGMpath = os.getcwd() + '//' + 'BGM.ogg'
    #加载背景音乐
    pygame.mixer.music.load(BGMpath)
    #循环播放背景音乐
    pygame.mixer.music.play(-1)

  音效

#获取“死亡”音效路径
deadpath  = os.getcwd() + '//' + 'dead.wav'
#创建“死亡”音效对象
sounddead = pygame.mixer.Sound(deadpath)
#获取“吃食物”音效路径
eatpath   = os.getcwd() + '//' + 'eat.wav'
#创建“吃食物”音效对象
soundeat  = pygame.mixer.Sound(eatpath)
  • 我为贪吃蛇增添了一个主动加速的功能。只要按住某个按键,贪吃蛇就会加速,松开这个按键,贪吃蛇就会恢复原来的速度。
            #加速贪吃蛇 
            elif event.key == K_LSHIFT:
                SPEED += 13
            # print('DIRECTION',DIRECTION)
        #从加速恢复
        elif event.type == KEYUP:
            if event.key == K_LSHIFT:
                SPEED -= 13
  • 我为这个贪吃蛇游戏设置了三种模式,也就是三个关卡,分别时:普通模式、困难模式和噩梦模式(三种模式的界面风格各不相同);对了,为了区分出贪吃蛇的头部,我还做了点小小的改动使贪吃蛇的头部和它身体的其他部分长得不一样。

  普通模式:普通模式中贪吃蛇的速度是恒定的,当然,如果嫌速度慢可以主动加速;此外,为了增添乐趣,我在普通模式中隐藏了一个“彩蛋”——一个隐藏的随机传送门,当你的游戏分数达到一定程度的时候,游戏界面上方会提醒“The Random Warp Gate has opened ”(随机传送门已开启);此后在你进入下一关之前都有机会通过随机传送门直接到达第三关——噩梦模式。游戏截图如下:

  

  传送门开启的提示将在你的贪吃蛇吃下下一个食物后消失,但传送门会持续存在直至你进入下一关。它就在那里,虽然你看不到它,但它就在那里。来张进传送门的截图:

  

 

  困难模式:相比普通模式,困难模式不仅界面风格变了,界面上方还会多出一个贪吃蛇的“血条”,显示贪吃蛇目前还有几条命;此外,贪吃蛇的速度还会随着身体的增长逐渐增加,这种速度的增长是玩家不可控的。困难模式的游戏截图如下:

  

  在介绍噩梦模式之前,不得不先介绍我增加的另一项功能——随机地形

  • 我在噩梦模式的地图中增添了一些有趣的东西——随机地形,所谓随机地形,其实说白了就是障碍,如果贪吃蛇身体的任何一部分触碰到障碍就会立即死亡(当然,如果贪吃蛇的命不止一条就另说),而且这些障碍的数量是随机的,玩家每次进入噩梦模式遇到的障碍数量是不一样的。并且,我在游戏中设置了四种地形:火、水、冰、土。每次进入噩梦模式遇到的地形随机的,有可能是火,也有可能是冰。有一点需要特别说明的,其中的冰和土两种地形障碍是会移动的,对,你没听错,就是会移动的,如果贪吃蛇身体的任何一个部位触碰到这些障碍都会立即死亡。此外,如果这两种移动的地形碰到食物,食物就会立即重生在其他地方。

  噩梦模式:相比前面的两种模式,噩梦模式当然也是另外一种界面风格,比较不一样的就是噩梦模式的地图是铺满窗口的,这样贪吃蛇的活动范围就更大了。噩梦模式和困难模式有很多相似的地方,比如贪吃蛇随着身体的增长而增速,比如加命机制;不一样的是在噩梦模式中存在着各种各样的地形(上文已介绍)。这些地形在中后期就是玩家的“噩梦”(奸笑脸~~)。噩梦模式的游戏截图如下:

  

  上图是移动地形——冰的游戏截图,下面再来张火的:

  

  好了,我的这个贪吃蛇游戏比较突出的特点都介绍完了,下一篇博客将针对这次贪吃蛇游戏编写过程中遇到的坑进行介绍,主要是使用pygame模块时比较容易忽略的一些地方,一个小小的不同很可能造成一个大大的BUG。(珍爱生命,远离BUG)  

  我这个贪吃蛇游戏的完整代码可以在我的github中找到:https://github.com/unknowerX/Retro-Snaker

 

posted @ 2018-07-19 20:26  3fman  阅读(681)  评论(0编辑  收藏  举报