91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python干貨實戰之如何實現八音符醬小游戲

發布時間:2021-10-25 11:31:51 來源:億速云 閱讀:112 作者:iii 欄目:開發技術

這篇文章主要介紹“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 = 0, 0
        # 初始重置
        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 = 80, 280
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 = 0, 0
        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() * 100, 50), 300) / 100.0
            self.position = x + 50 + random.random() * 100, 0
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__(255, 255, 255, 255, 800, 600)
        # frames_per_buffer
        self.num_samples = 1000
        # 聲控條
        self.vbar = Sprite(cfg.BLOCK_IMAGE_PATH)
        self.vbar.position = 20, 450
        self.vbar.scale_y = 0.1
        self.vbar.image_anchor = 0, 0
        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 = 0, 100
        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.8) and (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干貨實戰之如何實現八音符醬小游戲”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐庐县| 凯里市| 庄浪县| 定南县| 准格尔旗| 莱州市| 舟曲县| 荣成市| 芮城县| 马尔康县| 外汇| 淮阳县| 沙河市| 漳平市| 龙川县| 八宿县| 塘沽区| 望都县| 高雄市| 克拉玛依市| 丰都县| 雅安市| 正安县| 钦州市| 泗水县| 西丰县| 开原市| 喀什市| 奉新县| 固阳县| 留坝县| 福安市| 玛曲县| 厦门市| 呼伦贝尔市| 高清| 湘阴县| 上饶县| 金沙县| 永清县| 平湖市|