欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Matlab制作簡(jiǎn)易版八分音符醬游戲

 更新時(shí)間:2022年02月25日 11:18:56   作者:slandarer  
八分音符醬作為一款聲音控制類游戲,當(dāng)時(shí)還是很受大家的喜愛的。本文將用Matlab制作一款簡(jiǎn)易版的八分音符醬游戲,感興趣的可以學(xué)習(xí)一下

效果

游戲方式

給電腦插上耳機(jī)后叫喊叭 !

說明

1)使用此代碼應(yīng)首先安裝:

Audio Toolbox工具箱,博主使用的版本為:

Audio Toolbox 版本 3.0 (R2021a)

2)為保證游戲加載完所有素材后再開始,故設(shè)置了加載完成界面后停滯3秒再開始運(yùn)行游戲

若一進(jìn)入界面就掛了,應(yīng)是資源加載太久,請(qǐng)關(guān)掉窗口后嘗試重新運(yùn)行

工具箱主要部分代碼

1)基礎(chǔ)設(shè)置

這里懶得改了直接照抄的語音命令識(shí)別的截?cái)鄶?shù)據(jù),大家可以依據(jù)自己需要進(jìn)行更改:

[audio_t,fs] = audioread('stop_command.flac');
classificationRate = 20;
adr=audioDeviceReader('SampleRate',fs,'SamplesPerFrame',floor(fs/classificationRate));
audioBuffer=dsp.AsyncBuffer(fs);

聲音信號(hào)繪圖:

if ishandle(fig)
    audio_t=adr();
    write(audioBuffer,audio_t);
    audio_y=read(audioBuffer,fs,fs-adr.SamplesPerFrame);
    audio_x=(0:(length(audio_y)-1))./(length(audio_y)-1);
    audioHdl.XData=audio_x;
    audioHdl.YData=audio_y;
end

注意:

代碼后必須要進(jìn)行聲音采集設(shè)備的釋放及timer實(shí)類的刪除,否則會(huì)出現(xiàn)如下提示bug:A given audio device may only be opened once.

即一個(gè)設(shè)備被開啟兩次

因此需要設(shè)置如下回調(diào)避免該情況:

set(gcf,'tag','co','CloseRequestFcn',@clo);
function clo(~,~)
    stop(game)
    delete(game)
    release(adr)
    
    delete(findobj('tag','co'));
    clf,close,clc
end

完整代碼

function audioGame
%@author:slandarer
%使用工具箱情況:
%Audio Toolbox 版本 3.0 (R2021a)

% figure 創(chuàng)建
fig=figure('Units','normalized','Position',[0.2 0.2 0.6 0.5]);
fig.NumberTitle='off';
fig.MenuBar='none';
fig.Resize='off';
fig.Name='audio Game by slandarer';


% axes_1 創(chuàng)建(主axes)
ax_1=axes(fig);
ax_1.Position=[0 0 1 1];
ax_1.XTick=[];
ax_1.YTick=[];
ax_1.ZTick=[];
ax_1.XLim=[0 600];
ax_1.YLim=[0 200];
hold(ax_1,'on')


% axes_2 創(chuàng)建(聲波顯示axes創(chuàng)建)
ax_2=axes(fig);
ax_2.Position=[0.7 0.8 0.3 0.2];
ax_2.XTick=[];
ax_2.YTick=[];
ax_2.ZTick=[];
ax_2.XLim=[0 1];
ax_2.YLim=[-1 1];
ax_2.Box='on';
ax_2.LineWidth=2;
ax_2.Color=[250,250,247]./255;
hold(ax_2,'on')


% 繪圖函數(shù)句柄
groundHdl=fill(ax_1,[0,600,600,0],[0,0,65,65],[0,64,115]./255);
holeHdl_1=fill(ax_1,[0,50,50,0]+500,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]);
holeHdl_2=fill(ax_1,[0,50,50,0]+800,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]);
holeHdl_3=fill(ax_1,[0,50,50,0]+1100,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]);
audioHdl=plot(ax_2,[0,1],[0,0],'Color',[0,64,115]./255);

roleHdl_a=scatter(ax_1,100,95,300,'filled','CData',[0,64,115]./255);
roleHdl_b=fill(ax_1,[-5 0 5]+100,[90,65,90],[0,64,115]./255);

% 基礎(chǔ)屬性
role.y=0;
role.v=0;
role.a=-2;


% 窗口主要回調(diào)=============================================================
[audio_t,fs] = audioread('stop_command.flac');
classificationRate = 20;
adr=audioDeviceReader('SampleRate',fs,'SamplesPerFrame',floor(fs/classificationRate));
audioBuffer=dsp.AsyncBuffer(fs);

pause(3)
fps=20;
game=timer('ExecutionMode','FixedRate','Period',1/fps,'TimerFcn',@audioMainGame);
start(game)

set(gcf,'tag','co','CloseRequestFcn',@clo);
function clo(~,~)
    stop(game)
    delete(game)
    release(adr)
    
    delete(findobj('tag','co'));
    clf,close,clc
end

    function audioMainGame(~,~)
        holeHdl_1.XData=holeHdl_1.XData-5;
        holeHdl_2.XData=holeHdl_2.XData-5;
        holeHdl_3.XData=holeHdl_3.XData-5;
        
        if holeHdl_1.XData(1)<-50,holeHdl_1.XData=holeHdl_1.XData+900;end
        if holeHdl_2.XData(1)<-50,holeHdl_2.XData=holeHdl_2.XData+900;end
        if holeHdl_3.XData(1)<-50,holeHdl_3.XData=holeHdl_3.XData+900;end
        
        if ishandle(fig)
            audio_t=adr();
            write(audioBuffer,audio_t);
            audio_y=read(audioBuffer,fs,fs-adr.SamplesPerFrame);
            audio_x=(0:(length(audio_y)-1))./(length(audio_y)-1);
            audioHdl.XData=audio_x;
            audioHdl.YData=audio_y;
            
            if any(audio_y>0.2)&&role.y>-1&&role.y<1
                role.v=20;
            end
            role.v=role.v+role.a;
            role.v(role.v<-5)=-5;
            role.y=role.y+role.v;
            
            flag1=holeHdl_1.XData(1)<=95&holeHdl_1.XData(2)>=105;
            flag2=holeHdl_2.XData(1)<=95&holeHdl_2.XData(2)>=105;
            flag3=holeHdl_3.XData(1)<=95&holeHdl_3.XData(2)>=105;
            if (~flag1)&&(~flag2)&&(~flag3)
                role.y(role.y<0)=0;
                roleHdl_a.YData=95+role.y;
                roleHdl_b.YData=[90,65,90]+role.y;
            else
                if role.y<=-1
                    stop(game)
                    for i=1:10
                        roleHdl_a.YData=(95+role.y)-i*(65+role.y)/10;
                        roleHdl_b.YData=[90,65,90]+role.y-i*(65+role.y)/10;
                        pause(0.1)
                    end
                else
                    roleHdl_a.YData=95+role.y;
                    roleHdl_b.YData=[90,65,90]+role.y;
                end
            end
        end
        
    end

end

到此這篇關(guān)于使用Matlab制作簡(jiǎn)易版八分音符醬游戲的文章就介紹到這了,更多相關(guān)Matlab游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何在VS2019和VScode中配置C++調(diào)用python接口

    詳解如何在VS2019和VScode中配置C++調(diào)用python接口

    這篇文章主要介紹了詳解如何在VS2019和VScode中配置C++調(diào)用python接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++設(shè)計(jì)模式之原型模式

    C++設(shè)計(jì)模式之原型模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之原型模式,本文講解了什么是原型模式、為什么要使用原型模式、代碼實(shí)例等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • MFC設(shè)置對(duì)話框焦點(diǎn)的方法簡(jiǎn)述

    MFC設(shè)置對(duì)話框焦點(diǎn)的方法簡(jiǎn)述

    這篇文章主要介紹了MFC設(shè)置對(duì)話框焦點(diǎn)的方法簡(jiǎn)述,主要講述了兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C++模板Template詳解及其作用介紹

    C++模板Template詳解及其作用介紹

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C語言如何利用異或進(jìn)行兩個(gè)值的交換詳解

    C語言如何利用異或進(jìn)行兩個(gè)值的交換詳解

    最近在工作中遇到了兩個(gè)值交換的需求,發(fā)現(xiàn)自己對(duì)異或有些忘記,所以索性寫出來,方便以后需要的時(shí)候參考學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于C語言如何利用異或進(jìn)行兩個(gè)值的交換的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • C/C++: Inline function, calloc 對(duì)比 malloc

    C/C++: Inline function, calloc 對(duì)比 malloc

    以下是對(duì)c/c++中的malloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進(jìn)行了介紹,需要的朋友可以過來參考下
    2016-07-07
  • C++設(shè)計(jì)模式之觀察者模式(Observer)

    C++設(shè)計(jì)模式之觀察者模式(Observer)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之觀察者模式Observer,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C語言開發(fā)實(shí)現(xiàn)貪吃蛇游戲

    C語言開發(fā)實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C語言開發(fā)實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言實(shí)現(xiàn)萬年歷小程序

    C語言實(shí)現(xiàn)萬年歷小程序

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)萬年歷小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計(jì)

    C語言鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論