您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何利用Matlab制作一款刮刮樂抽獎特效的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
程序運行效果如下:
如圖所示,按住鼠標不松開并滑動鼠標,即可刮開圖層:
獎項設置寫在一個cell元胞數組中,第一列為文本信息,第二列為抽到的概率:
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
例如
概率密度和概率分布如下:
概率密度 | 概率分布 |
---|---|
0.15 | 0.15 |
0.05 | 0.2 |
0.2 | 0.4 |
0.2 | 0.6 |
0.2 | 0.8 |
0.2 | 1 |
則若是我抽到的隨機數為0.7,0.7在概率分布第四個數和第五個數之間,我們就認為我們抽到的是第五個選項。該部分代碼如下:
randNum=rand(); numRange=probVal>randNum; strPos=find(numRange,1);
確定了是第幾個獎項就可以顯示字符串了,用text函數在坐標區域進行顯示:
text(300,100,strSet{strPos,1},... 'HorizontalAlignment','center','FontSize',60)
使用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);
判斷鼠標是否被點擊
假設我們當前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
鼠標滑動刮獎
該部分代碼:
[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
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制作一款刮刮樂抽獎特效”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。