,,Python干货实战之八音符酱小游戏全过程详解

,,Python干货实战之八音符酱小游戏全过程详解

读万卷书不如去万里路。仅仅学习书本上的理论是远远不够的。只有在实战中才能提升自己的能力。本文手把手带你用Python实现一个八音酱游戏,让你在过程中查漏补缺,提高水平。

目录

简介正文一、准备1.1游戏规则1.2素材图片二、环境2.1简介2.2配置环境三、正式敲码3.1黑八定义——注类:3.2方块类定义:3.3游戏主循环实现:四、效果显示总结

导语

嗨,大宝贝们,又到周末了。你今天休假吗?

周末,总是没什么事可做。我一直在想玩什么游戏,给大家一些新的东西,不是吗?

打游戏,找游戏,找资料,写代码。你听说过这个游戏吗?

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

今天给大家一个模仿八音的小游戏!

这个游戏需要操作者的声音来控制角色,同时还要掌握声音的强弱.偷偷玩。使用jpeg文件交换格式存储的编码图像文件扩展名

所有的操作全靠吼,所有的走位全靠调,再大声的操作也没用。边肖只能劝大家,晚上不要玩了,说不定会被邻居误会~

正文

一、准备中

1.1 游戏规则

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

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

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

1.2 素材图片

二、环境

2.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、Microsoft Windows和Apple Mac。

OS X/马科斯.

2.2 配置环境

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

模块安装:

带有豆瓣镜像源码的pip模块或pip install-I https://pypi.douban.com/simple/模块的名称

三、正式敲代码

3.1 定义小黑八音符类:

用cocos2d模块定义主角类是非常容易的。你只需要继承sprites类并告诉sprites。

班级需要做什么。根据八音游戏的规则,我们赋予小黑跳跃、下落、静止的能力,同

当时我们规定小黑在空中不能跳。具体代码如下:

进口可可

''小黑'''

皮卡丘类(cocos.sprite.Sprite):

def __init__(self,imagepath,**kwargs):

超级(皮卡丘,自我)。__init__(图像路径)

#锚点

self.image_anchor=0,0

#初始复位

自复位(假)

#更新

self.schedule(自我更新)

''声控跳跃'''

定义跳转(自身,h):

如果self.is_able_jump:

self.y=1

self.speed -=max(min(h,10),7)

self.is_able_jump=False

''仍然在着陆之后'''

def land(self,y):

if self.y y - 25:

self.is_able_jump=True

self.speed=0

self.y=y

更新(重力下降)“”

定义更新(自身,dt):

self.speed=10 * dt

self.y -=自我速度

if self.y -85:

自我重置()

''重置'''

定义复位(self,flag=True):

if标志:self.parent.reset()

#你会跳吗?

self.is_able_jump=False

#速度

self.speed=0

#位置

self.position=80,280

3.2 定义block类:

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

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

具体代码如下:

进口可可

随机导入

'''地面块'''

类块(cocos.sprite.Sprite):

def __init__(self,imagepath,position,**kwargs):

超级(块,自我)。__init__(图像路径)

self.image_anchor=0,0

x,y=位置

如果x==0:

self.scale_x=4.5

self.scale_y=1

否则:

自我。scale _ x=0.5随机。random()* 1.5

自我。scale _ y=min(max(y-50随机。random()* 100,50),300)/100.0

自我。位置=x 50随机。random()* 100,0

3.3 实现游戏主循环:

导入稳频发电机(发生器)(constant frequency generator的缩写)

进口可可

导入结构

从模块导入*

从cocos.sprite导入鬼怪;雪碧

从pyaudio导入PyAudio,油漆16

'''定义声控游戏类'''

VCGame类(cocos.layer.ColorLayer):

def __init__(self):

超级(VCGame,self).__init__(255,255,255,800,600)

#每缓冲区帧数

self.num_samples=1000

# 声控条

self.vbar=Sprite(cfg .块_图像_路径)

self.vbar.position=20,450

self.vbar.scale_y=0.1

self.vbar.image_anchor=0,0

self.add(self.vbar)

# 皮卡丘

自我。皮卡丘=皮卡丘(cfg .皮卡丘_图片_路径)

self.add(self。皮卡丘)

# 地面

自我。地板=cocos。cocos节点。cocos节点()

self.add(自助楼层)

位置=0,100

对于范围内的我(120):

b=块(cfg .块_图像_路径,位置)

self.floor.add(b)

位置=b.x b。宽度,b。高度

# 声音输入

audio=PyAudio()

自我。流=音频。open(格式=绘画16,通道=1,速率=int(音频。get _ device _ info _ by _ index(0)[' defaultSampleRate '],input=True,frames _ per _ buffer=self。数量_样本)

# 屏幕更新

自我计划(自我更新)

'''碰撞检测'''

定义碰撞(自身):

diffx=self。皮卡丘。x自我。地板。x

对于self.floor.get_children()中的乙:

if(b . x=diffx self。皮卡丘。宽度* 0.8)和(diffx自我。皮卡丘。宽度* 0.2=b . x b .宽度):

if self .皮卡丘. y b身高:

self.pikachu.land(b.height)

破裂

'''定义游戏规则'''

定义更新(自身,dt):

# 获取每帧的音量

audio _ data=自身。溪流。阅读(自我。数量_样本)

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

self.vbar.scale_x=k/10000.0

如果k 3000:

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

# 皮卡丘跳跃

如果k 8000:

自我。皮卡丘。跳转((k - 8000)/1000.0)

# 碰撞检测

self.collide()

'''重置'''

定义重置(自我):

self.floor.x=0

'''跑' ' '

if __name__=='__main__ ':

科科斯。导演。导演。init(标题='小黑Go Go Go’)

科科斯。导演。导演。运行(cocos。场景。场景(VC游戏()))

四、效果展示

总结

今天的木木子呢,也试玩了一下这个八分音符酱,因为是实在害怕同事会打我,所以就回家录了一下。没能通关,也没办法这个游戏实在不是我能驾驭的,玩了几局嗓子就要开始冒烟了~在这提醒好奇心比较强的宝宝们,一定不要在宿舍,夜晚,玩这个声控小游戏。否则,真的可能会被打!

好啦,到这里就结束了,想玩的小伙伴儿可以偷偷在家里玩儿,记得小声点儿哈~

到此这篇关于计算机编程语言干货实战之八音符酱小游戏全过程详解的文章就介绍到这了,更多相关计算机编程语言小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: