如何用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

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


(0)

相关推荐

  • 从《Flappy bird》到《八分音符酱》 也谈病毒式小游戏的“使命”|游戏论坛

    导 最近,日本2D声控游戏<不要停!八分音符酱 >(休むな!8分音符ちゃん )火了.中国玩家也纷纷加入,一边嘶吼一边笑到泪奔.黑白的界面,比<超级玛丽>还简洁,流程也很简单,只 ...

  • 你以为我在玩游戏,其实我在学编程,这一波我在大气层

    嗨,大家好啊 这里是汐仔 还记得大家一起住宿舍的日子吗?在宿舍的时间除了和一起打游戏开黑,或者看电影,反正除了学习一切事情都能干. 忽然有一天你醒悟过来,想捧一本看看,好的,你将成为一道景点,你会察觉 ...

  • Python|二叉树叶子结点问题解决方法

    问题描述键盘输入一颗二叉树,求解其叶子结点个数.示例: 输入:4,2,6,1,3,5输出:3解决方案一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子".当二叉树为空时 ...

  • 2.7万 Star!最全面的 Python 设计模式集合

    [导语]:设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.python-patterns 则是使用 ...

  • 用 Python 写个消消乐小游戏

    来源:Python 技术「ID: pythonall」 提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python ...

  • 主播声嘶力竭 这游戏输出全靠吼

    文/游戏陀螺 太鼓 "要不是隔壁的过来砸门,我应该就能把这游戏通关了." 对于日本的手游,通常大家会想到类似<怪物弹珠>那种古老朴素的风格,或者是充满二次元画风的清爽画 ...

  • 再见PDF提取收费!我用100行Python代码搞定!

    第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将PDF文件中的文字.图片和表格数据提取出来的问题.能够对PDF文件中的文字.表格等数据 ...

  • 不到 100 行 Python 代码写个计算器

    来源:Python 技术「ID: pythonall」 我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算盘相比,计算器无论是便利性还是计算速度都是优于算盘的, ...

  • 30行Python代码实现蚂蚁森林自动偷能量(附源码)

    虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化.之前通过用代码模拟手机点按的方式,实现了 朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋 ...

  • 什么,3行Python代码就能获取海量数据?

    Python爬虫与数据挖掘 1周前 以下文章来源于法纳斯特 ,作者小F 本文转载自公众号[法纳斯特],详情可以点击上方卡片,关注该公众号,获取更多好文推荐. 一谈起数据分析,首先想到的就是数据,没有数 ...

  • 6行python代码的爱心线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...

  • 10行Python代码的词云

    什么是词云呢? 词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思. 现在 ...

  • 不到70行Python代码,轻松玩转RFM用户分析模型(附案例数据和代码)

    本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一. 注:想直接下载代码和数据的同学可以空降文末 看这篇文章前源数据长这样: 学完后 ...

  • 女友半夜加班发自拍,IT男友用30行python代码发现惊天秘密

    点击上方"机器学习爱好者社区" 选择"星标"公众号,重磅干货,第一时间送达 这是一个悲伤的故事 昨天,我司的python开发小哥刚准备下班陪女友共进晚餐,满心期 ...

  • 用几行python代码偷偷复制U盘文件

    https://www.cnblogs.com/dawning666/articles/9433907.html 前言 上大学的时候有老师不给上课的PPT,就总想有个程序能偷偷复制老师的U盘....一 ...