温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python干货实战之如何实现八音符酱小游戏

发布时间:2021-10-25 11:31:51 阅读:113 作者:iii 栏目:开发技术
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍“Python干货实战之如何实现八音符酱小游戏”,在日常操作中,相信很多人在Python干货实战之如何实现八音符酱小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python干货实战之如何实现八音符酱小游戏”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 导语?

  • 正文?

    • ?一、准备中

      • 1.1 游戏规则?

      • 1.2 素材图片?

    • ?二、环境

      • 2.1 小介绍?

      • 2.2 配置环境?

    • ?三、正式敲代码

      • 3.1 定义小黑八音符类:?

      • 3.2 定义block类:?

      • 3.3 实现游戏主循环:?

    • ?四、效果展示

    导语?

    Python干货实战之如何实现八音符酱小游戏

    Python干货实战之如何实现八音符酱小游戏

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

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

    Python干货实战之如何实现八音符酱小游戏

    Python干货实战之如何实现八音符酱小游戏

    正文?

    Python干货实战之如何实现八音符酱小游戏

    ?一、准备中

    1.1 游戏规则?

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

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

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

    1.2 素材图片?

    Python干货实战之如何实现八音符酱小游戏

    ?二、环境

    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、微软Windows和苹果Mac

    OS X/MACOS。

    2.2 配置环境?

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

    模块安装:

    pip install +模块名 或带豆瓣镜像源 pip install -i https://pypi.douban.com/simple/ +模块名

    ?三、正式敲代码

    3.1 定义小黑八音符类:?

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

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

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

    import cocos
     
     
    '''小黑类'''
    class Pikachu(cocos.sprite.Sprite):
        def __init__(self, imagepath, **kwargs):
            super(Pikachu, self).__init__(imagepath)
            # 锚点
            self.image_anchor = 00
            # 初始重置
            self.reset(False)
            # 更新
            self.schedule(self.update)
        '''声控跳跃'''
        def jump(self, h):
            if 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
        '''更新(重力下降)'''
        def update(self, dt):
            self.speed += 10 * dt
            self.y -= self.speed
            if self.y < -85:
                self.reset()
        '''重置'''
        def reset(self, flag=True):
            if flag: self.parent.reset()
            # 是否可跳跃
            self.is_able_jump = False
            # 速度
            self.speed = 0
            # 位置
            self.position = 80280
    3.2 定义block类:?

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

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

    具体代码如下:

    import cocos
    import random
     
     
    '''地面块'''
    class Block(cocos.sprite.Sprite):
        def __init__(self, imagepath, position, **kwargs):
            super(Block, self).__init__(imagepath)
            self.image_anchor = 00
            x, y = position
            if x == 0:
                self.scale_x = 4.5
                self.scale_y = 1
            else:
                self.scale_x = 0.5 + random.random() * 1.5
                self.scale_y = min(max(y - 50 + random.random() * 10050), 300) / 100.0
                self.position = x + 50 + random.random() * 1000
    3.3 实现游戏主循环:?
    import cfg
    import cocos
    import struct
    from modules import *
    from cocos.sprite import Sprite
    from pyaudio import PyAudio, paInt16
     
     
    '''定义声控游戏类'''
    class VCGame(cocos.layer.ColorLayer):
        def __init__(self):
            super(VCGame, self).__init__(255255255255800600)
            # frames_per_buffer
            self.num_samples = 1000
            # 声控条
            self.vbar = Sprite(cfg.BLOCK_IMAGE_PATH)
            self.vbar.position = 20450
            self.vbar.scale_y = 0.1
            self.vbar.image_anchor = 00
            self.add(self.vbar)
            # 皮卡丘
            self.pikachu = Pikachu(cfg.PIKACHU_IMAGE_PATH)
            self.add(self.pikachu)
            # 地面
            self.floor = cocos.cocosnode.CocosNode()
            self.add(self.floor)
            position = 0100
            for i in range(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)
        '''碰撞检测'''
        def collide(self):
            diffx = self.pikachu.x - self.floor.x
            for b in self.floor.get_children():
                if (b.x <= diffx + self.pikachu.width * 0.8and (diffx + self.pikachu.width * 0.2 <= b.x + b.width):
                    if self.pikachu.y < b.height:
                        self.pikachu.land(b.height)
                        break
        '''定义游戏规则'''
        def update(self, dt):
            # 获取每帧的音量
            audio_data = self.stream.read(self.num_samples)
            k = max(struct.unpack('1000h', audio_data))
            self.vbar.scale_x = k / 10000.0
            if k > 3000:
                self.floor.x -= min((k / 20.0), 150) * dt
            # 皮卡丘跳跃
            if k > 8000:
                self.pikachu.jump((k - 8000) / 1000.0)
            # 碰撞检测
            self.collide()
        '''重置'''
        def reset(self):
            self.floor.x = 0
     
     
    '''run'''
    if __name__ == '__main__':
        cocos.director.director.init(caption="xiaohei Go Go Go ")
        cocos.director.director.run(cocos.scene.Scene(VCGame()))

    ?四、效果展示

    Python干货实战之如何实现八音符酱小游戏

    到此,关于“Python干货实战之如何实现八音符酱小游戏”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI

    开发者交流群×