八音符游戏怎么样(八音符游戏怎么玩)

时间:2023-03-08 10:19:07 来源:网络 发布:手游网 浏览:8次

周末的日子总是无所事事,无所事事。一直在想做什么游戏,给大家来点儿新鲜感,这不?

玩游戏、找游戏、找素材、写代码,大家听说过这个游戏嘛?

声控2D动作小游戏它的名字叫做《不要停下来!八分音符酱♪》!

今天就来给大家肝一个仿八音符小游戏!

这款游戏需要操作者发声来控制人物,同时还得掌握好声音的力度...偷偷玩.jpg

操作起来全都靠吼,走位全都靠音调,再多骚操作都无用,小编只能劝告大家,不要在晚上玩,大概会被邻居误会吧~

正文

一、准备中

1.1 游戏规则

不同于以往电脑键盘操作,亦不同于网络手游触屏操作,这款游戏的操作方法竟然是声音。

玩家可以通过调整声音的大小来控制音符酱的跳跃。简单来说。声音越大,音符酱跳得越高。

如果只发出微弱的声音, 音符酱就只会缓慢地移动。是不是超级有意思!

1.2 素材图片

二、环境

1.1 小介绍

Cocos2d模块:

Cocos2d是一个用于构建2D游戏、演示和其他图形/交互应用程序的框架。 它可以在Windows、OSX和Linux上工作,它可以供用python语言编写的应用程序使用。

Pyaudio模块:

Pyaudio库,使用这个可以进行录音,播放,生成wav文件等等。PyAudio 提供了 PortAudio 的 Python 语言版本,这是一个跨平台的音频 I/O 库,使用 PyAudio 你可以在 Python 程 序中播放和录制音频。为PoTaTudio提供Python绑定,跨平台音频I/O库。使用PyAudio,您可 以轻松地使用Python在各种平台上播放和录制音频,例如GNU/Linux、微软Windows和苹果Mac OS X/MACOS。

1.2 配置环境

本文涉及环境:Python3、Pycharm、cocos2d模块;pyaudio模块;以及一些Python自带的模块。

模块安装:

pipinstall+模块名或带豆瓣镜像源pipinstall-ihttps://pypi.douban.com/simple/+模块名

三、正式敲代码

3.1 定义小黑八音符类:

利用cocos2d模块来定义主角类是一件非常轻松的事情。你只需要继承sprites类,然后告诉sprites

类需要执行什么操作即可。根据八音符的游戏规则,我们赋予小黑跳跃、下降和静止的能力,同

时,我们规定小黑在空中时无法进行跳跃。具体代码如下:

importcocos'''小黑类'''classPikachu(cocos.sprite.Sprite):def__init__(self,imagepath,**kwargs):super(Pikachu,self).__init__(imagepath)#锚点self.image_anchor=0,0#初始重置self.reset(False)#更新self.schedule(self.update)'''声控跳跃'''defjump(self,h):ifself.is_able_jump:self.y+=1self.speed-=max(min(h,10),7)self.is_able_jump=False'''着陆后静止'''defland(self,y):ifself.y>y-25:self.is_able_jump=Trueself.speed=0self.y=y'''更新(重力下降)'''defupdate(self,dt):self.speed+=10*dtself.y-=self.speedifself.y<-85:self.reset()'''重置'''defreset(self,flag=True):ifflag:self.parent.reset()#是否可跳跃self.is_able_jump=False#速度self.speed=0#位置self.position=80,280

3.2定义block类:

初始化界面小黑要有一段站立的地方,对于地面,刚开始的时候先得有一段长点的平地缓冲一下,

让玩家先试试自己的嗓音,然后再随机生成跳跃块,让玩家展示自己的歌喉。

具体代码如下:

importcocosimportrandom'''地面块'''classBlock(cocos.sprite.Sprite):def__init__(self,imagepath,position,**kwargs):super(Block,self).__init__(imagepath)self.image_anchor=0,0x,y=positionifx==0:self.scale_x=4.5self.scale_y=1else:self.scale_x=0.5+random.random()*1.5self.scale_y=min(max(y-50+random.random()*100,50),300)/100.0self.position=x+50+random.random()*100,0

3.3实现游戏主循环:

importcfgimportcocosimportstructfrommodulesimport*fromcocos.spriteimportSpritefrompyaudioimportPyAudio,paInt16'''定义声控游戏类'''classVCGame(cocos.layer.ColorLayer):def__init__(self):super(VCGame,self).__init__(255,255,255,255,800,600)#frames_per_bufferself.num_samples=1000#声控条self.vbar=Sprite(cfg.BLOCK_IMAGE_PATH)self.vbar.position=20,450self.vbar.scale_y=0.1self.vbar.image_anchor=0,0self.add(self.vbar)#皮卡丘self.pikachu=Pikachu(cfg.PIKACHU_IMAGE_PATH)self.add(self.pikachu)#地面self.floor=cocos.cocosnode.CocosNode()self.add(self.floor)position=0,100foriinrange(120):b=Block(cfg.BLOCK_IMAGE_PATH,position)self.floor.add(b)position=b.x+b.width,b.height#声音输入audio=PyAudio()self.stream=audio.open(format=paInt16,channels=1,rate=int(audio.get_device_info_by_index(0)['defaultSampleRate']),input=True,frames_per_buffer=self.num_samples)#屏幕更新self.schedule(self.update)'''碰撞检测'''defcollide(self):diffx=self.pikachu.x-self.floor.xforbinself.floor.get_children():if(b.x<=diffx+self.pikachu.width*0.8)and(diffx+self.pikachu.width*0.2<=b.x+b.width):ifself.pikachu.y<b.height:self.pikachu.land(b.height)break'''定义游戏规则'''defupdate(self,dt):#获取每帧的音量audio_data=self.stream.read(self.num_samples)k=max(struct.unpack('1000h',audio_data))self.vbar.scale_x=k/10000.0ifk>3000:self.floor.x-=min((k/20.0),150)*dt#皮卡丘跳跃ifk>8000:self.pikachu.jump((k-8000)/1000.0)#碰撞检测self.collide()'''重置'''defreset(self):self.floor.x=0'''run'''if__name__=='__main__':cocos.director.director.init(caption="xiaoheiGoGoGo")cocos.director.director.run(cocos.scene.Scene(VCGame()))

四、效果展示

总结

  • 今天的木木子呢,也试玩了一下这个八分音符酱,因为是实在害怕同事会打我,所以就回家录了一下。

  • 没能通关,也没办法这个游戏实在不是我能驾驭的,玩了几局嗓子就要开始冒烟了~

  • 在这提醒好奇心比较强的宝宝们,一定不要在宿舍,夜晚,玩这个声控小游戏。否则,真的可能会被打!!

评论
评论
发 布