您当前的位置: 首页 >  matlab

slandarer

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

七夕节还不知道送啥,教你用MATLAB制作一款刮刮乐抽奖特效,让她的手气决定她的礼物

slandarer 发布时间:2021-08-13 12:17:34 ,浏览量:0

0效果展示

程序运行效果如下:

在这里插入图片描述 如图所示,按住鼠标不松开并滑动鼠标,即可刮开图层:

在这里插入图片描述

1程序原理说明 1.1 奖项设置

奖项设置写在一个cell元胞数组中,第一列为文本信息,第二列为抽到的概率:

strSet={'520元红包一个',15/100;
        '1314元红包一个',5/100;
        '黑丝水手服',20/100;
        '黑丝女仆装',20/100;
        '抱抱×50次',20/100;
        '亲亲×50次',20/100;}; 
probVal=cell2mat(strSet(:,2)); %提取第二列概率信息
1.2 随机抽取

我们首先将离散型概率密度函数转换为概率分布函数:

% 将概率密度函数转换为概率分布函数
for i=2:length(probVal)
    probVal(i)=probVal(i)+probVal(i-1);
end

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

概率密度概率分布0.150.150.050.20.20.40.20.60.20.80.21

则若是我抽到的随机数为0.7,0.7在概率分布第四个数和第五个数之间,我们就认为我们抽到的是第五个选项。该部分代码如下:

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

确定了是第几个奖项就可以显示字符串了,用text函数在坐标区域进行显示:

text(300,100,strSet{strPos,1},...
    'HorizontalAlignment','center','FontSize',60)
1.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);
1.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

鼠标滑动刮奖

Created with Raphaël 2.3.0 鼠标滑动 调用回调函数 鼠标被点击? 获取鼠标位置 将距离鼠标位置较近的像素透明度设为0 yes

该部分代码:

[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)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)            
关注
打赏
1664692598
查看更多评论
0.0376s