如何用100行Python代码做出魔性声控游戏“八分音符酱”

栏目: Python · 发布时间: 6年前

内容简介:最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩)。这个游戏叫做《不要停!八分音符酱♪》。它是一款来自岛国的恶搞游戏,主角是一只可爱的小生物 — 八分音符酱,玩家通过对它喊话来控制其前进和跳跃。因为操作方式太奇葩,所以玩游戏的人本身似乎会比游戏更好玩……

最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩)。

这个游戏叫做《不要停!八分音符酱♪》。它是一款来自岛国的恶搞游戏,主角是一只可爱的小生物 — 八分音符酱,玩家通过对它喊话来控制其前进和跳跃。

因为操作方式太奇葩,所以玩游戏的人本身似乎会比游戏更好玩……

如何用100行 <a href='https://www.codercto.com/topics/20097.html'>Python</a> 代码做出魔性声控游戏“八分音符酱”

不过这不是我今天重点。我们是编程教室啊,肯定不能像游戏主播一样打个游戏卖个萌就完啦!

所以,我就用了大约 100 行 Python 代码,自己实现了一个。而且,还配了个超霸气的主角:海中霸主皮皮虾!

如何用100行Python代码做出魔性声控游戏“八分音符酱”

先上效果(优化后的版本):

如何用100行Python代码做出魔性声控游戏“八分音符酱”

最初的仿制版本用了大约100行 Python 代码,花了半天时间。后来又花一天时间,根据自己的恶趣味,加了点更魔性的功能。另外加了个联机的排行榜。

如何用100行Python代码做出魔性声控游戏“八分音符酱”

执行文件和代码都上传了,不用安装 Python 也可以玩。具体细节可以对照源码看,代码不长。

这里简单说下实现的核心思路,主要用到两个模块:

cocos2d-python

这个之前的贪吃蛇大作战 Python 版就用到。参见 爆款游戏《贪吃蛇大作战》的 Python 实现 - 知乎专栏 。负责游戏的主循环、图像渲染、事件响应等。

pyaudio

基于开源声音库 PortAudio 的 Python 模块。靠它实现这个游戏的核心玩法:声控。

有了这两样东西,其他就没什么特别的了。如果你用 cocos2d 开发过小游戏,剩下的就是一些常规工作。通过几个代码片段粗略地说下:

  • 定义角色,添加在场景上

    # 定义 sprite

    class PPX(cocos.sprite.Sprite):

    def __init__(self):
          super(PPX, self).__init__('ppx.png')
          ... # 略

    # 创建并添加

    self.ppx = PPX()

    self.add(self.ppx)

  • 给角色增加重力的效果

    def update(self, dt):

    self.speed += 10 * dt
      self.y -= self.speed
      if self.y < -80:
          self.reset()
  • 获取麦克风的声音

    # 初始化

    pa = PyAudio()

    SAMPLING_RATE = int(pa.get_device_info_by_index(0)['defaultSampleRate'])

    self.stream = pa.open(format=paInt16, channels=1, rate=SAMPLING_RATE, input=True, frames_per_buffer=self.NUM_SAMPLES)

    # 每帧中获取音量

    string_audio_data = self.stream.read(self.NUM_SAMPLES)

    k = max(struct.unpack('1000h', string_audio_data))

  • 通过音量判断行走和跳跃

    if k > 3000:

    self.floor.x -= min((k / 20.0), 150) * dt

    if k > 8000:

    self.ppx.jump((k - 8000) / 1000.0)

目前只是通过试验随意设置了下参数,不能保证在每台电脑上的效果。

这里,地面上的每个块是放在一个整体的容器里,皮皮虾的“行走”,其实是通过地面整体向后退来实现的。

  • 简单的碰撞检测

    def collide(self):

    px = self.ppx.x - self.floor.x
      for b in self.floor.get_children():
          if b.x <= px + self.ppx.width * 0.8 and px + self.ppx.width * 0.2 <= b.x + b.width:
              if self.ppx.y < b.height:
                  self.ppx.land(b.height)
                  break

如果你现在对上面的代码还一脸懵逼,没关系,赶紧去看一看我们公众号里超好懂的入门教程。我们之后也还会对游戏开发、爬虫、数据分析等方面做进一步的介绍。

公众号(Crossin的编程教室)里回复 皮皮虾 ,获取游戏程序和源代码。


以上所述就是小编给大家介绍的《如何用100行Python代码做出魔性声控游戏“八分音符酱”》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Professional JavaScript for Web Developers

Professional JavaScript for Web Developers

Nicholas C. Zakas / Wrox / 2009-1-14 / USD 49.99

This eagerly anticipated update to the breakout book on JavaScript offers you an in-depth look at the numerous advances to the techniques and technology of the JavaScript language. You'll see why Java......一起来看看 《Professional JavaScript for Web Developers》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具