溫馨提示×

溫馨提示×

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

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

如何利用Matlab制作一款刮刮樂抽獎特效

發(fā)布時間:2022-03-01 13:38:34 來源:億速云 閱讀:230 作者:小新 欄目:開發(fā)技術

這篇文章給大家分享的是有關如何利用Matlab制作一款刮刮樂抽獎特效的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    1.效果展示

    程序運行效果如下:

    如何利用Matlab制作一款刮刮樂抽獎特效

    如圖所示,按住鼠標不松開并滑動鼠標,即可刮開圖層:

    如何利用Matlab制作一款刮刮樂抽獎特效

    2.程序原理說明

    2.1 獎項設置

    獎項設置寫在一個cell元胞數組中,第一列為文本信息,第二列為抽到的概率:

    strSet={'520元紅包一個',15/100;
            '1314元紅包一個',5/100;
            '黑絲水手服',20/100;
            '黑絲女仆裝',20/100;
            '抱抱×50次',20/100;
            '親親×50次',20/100;}; 
    probVal=cell2mat(strSet(:,2)); %提取第二列概率信息

    2.2 隨機抽取

    我們首先將離散型概率密度函數轉換為概率分布函數:

    % 將概率密度函數轉換為概率分布函數
    for i=2:length(probVal)
        probVal(i)=probVal(i)+probVal(i-1);
    end

    例如

    概率密度和概率分布如下:

    概率密度概率分布
    0.150.15
    0.050.2
    0.20.4
    0.20.6
    0.20.8
    0.21

    則若是我抽到的隨機數為0.7,0.7在概率分布第四個數和第五個數之間,我們就認為我們抽到的是第五個選項。該部分代碼如下:

    randNum=rand();
    numRange=probVal>randNum;
    strPos=find(numRange,1);

    確定了是第幾個獎項就可以顯示字符串了,用text函數在坐標區(qū)域進行顯示:

    text(300,100,strSet{strPos,1},...
        'HorizontalAlignment','center','FontSize',60)

    2.3繪制圖層

    使用image繪制一張顏色為灰色每個位置透明度都為1的圖片:

    coverageMat_C=ones(200,600,3).*0.62;
    coverageMat_A=ones(200,600);
    
    coverageHdl=image([0 600],[0 200],coverageMat_C,...
                      'AlphaData',coverageMat_A);

    2.4 滑動鼠標刮獎

    判斷鼠標是否被點擊

    假設我們當前figure名為fig,以下設置是在fig的基礎上設置,首先我們要判定鼠標是否被按住。因此我們設置一個名為isClicking,并設置鼠標按下和鼠標松開兩個回調函數,當鼠標點擊時將isClicking設置為true,當鼠標松開時isClicking設置為false。

    isClicking=false;
    set(fig,'WindowButtonDownFcn',@bt_down);
    function bt_down(~,~),isClicking=true;end
    
    set(fig,'WindowButtonUpFcn',@bt_up);
    function bt_up(~,~),isClicking=false;end

    鼠標滑動刮獎

    如何利用Matlab制作一款刮刮樂抽獎特效

    該部分代碼:

    [xMesh,yMesh]=meshgrid(1:600,1:200);
    
    set(fig,'WindowButtonMotionFcn',@bt_move);
    function bt_move(~,~)
        if isClicking
            mousePos=fig.CurrentPoint;
            boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;
            coverageMat_A(boolPos)=0;
            set(coverageHdl,'AlphaData',coverageMat_A)
        end
    end

    3.完整代碼

    function scratchCard
    strSet={'520元紅包一個',15/100;
            '1314元紅包一個',5/100;
            '黑絲水手服',20/100;
            '黑絲女仆裝',20/100;
            '抱抱×50次',20/100;
            '親親×50次',20/100;}; 
    probVal=cell2mat(strSet(:,2));
    % 將概率密度函數轉換為概率分布函數
    for i=2:length(probVal)
        probVal(i)=probVal(i)+probVal(i-1);
    end
    
    
    fig=figure('units','pixels');
    fig.Position=[300 80 600 200];
    fig.NumberTitle='off';
    fig.MenuBar='none';
    fig.Resize='off';
    fig.Name='刮刮樂';
    
    ax=axes(fig);
    ax.Position=[0 0 1 1];
    ax.XTick=[];
    ax.YTick=[];
    ax.ZTick=[];
    ax.XLim=[0 600];
    ax.YLim=[0 200];
    hold(ax,'on')
    
    
    randNum=rand();
    numRange=probVal>randNum;
    strPos=find(numRange,1);
    text(300,100,strSet{strPos,1},...
        'HorizontalAlignment','center','FontSize',60)
    
    coverageMat_C=ones(200,600,3).*0.62;
    coverageMat_A=ones(200,600);
    [xMesh,yMesh]=meshgrid(1:600,1:200);
    
    coverageHdl=image([0 600],[0 200],coverageMat_C,...
                      'AlphaData',coverageMat_A);
    
    isClicking=false;
    set(fig,'WindowButtonDownFcn',@bt_down);
    function bt_down(~,~),isClicking=true;end
    
    set(fig,'WindowButtonUpFcn',@bt_up);
    function bt_up(~,~),isClicking=false;end
                 
    set(fig,'WindowButtonMotionFcn',@bt_move);
    function bt_move(~,~)
        if isClicking
            mousePos=fig.CurrentPoint;
            boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;
            coverageMat_A(boolPos)=0;
            set(coverageHdl,'AlphaData',coverageMat_A)
        end
    end
    
    
    end

    感謝各位的閱讀!關于“如何利用Matlab制作一款刮刮樂抽獎特效”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節(jié)

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

    AI