如何利用Matlab制作一款刮刮乐抽奖特效
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章给大家分享的是有关如何利用Matlab制作一款刮刮乐抽奖特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.效果展示程序运行效果如下:如图所示,按住鼠标不松开并滑
千家信息网最后更新 2025年02月16日如何利用Matlab制作一款刮刮乐抽奖特效
这篇文章给大家分享的是有关如何利用Matlab制作一款刮刮乐抽奖特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1.效果展示
程序运行效果如下:
如图所示,按住鼠标不松开并滑动鼠标,即可刮开图层:
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.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)
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;endset(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) endend
3.完整代码
function scratchCardstrSet={'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);endfig=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;endset(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) endendend
感谢各位的阅读!关于"如何利用Matlab制作一款刮刮乐抽奖特效"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
概率
鼠标
函数
密度
红包
黑丝
代码
奖项
特效
制作
个数
信息
内容
奖项设置
女仆
效果
更多
水手
程序
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为服务器内存条怎么插
数据库一般用什么logo
.数据库系统
铁血sql数据库怎么用
软件开发前的导图
网络安全班会课计划
怎么写网络安全儿歌
网络安全人才日
网络安全教育 动画片
用友erp服务器管理
xinyan 软件开发
软件开发的职位叫做什么
自动获取的dns服务器未响应
软件开发下班回来还要敲代码吗
怎么判断当前连接的数据库
关于网络安全的党课PPT
sql数据库工资管理系统
中国网络安全联盟美亚柏科
成都飞鸣镝网络技术服务
新时代网络安全问题
数据库查询数据怎么建立表
遂溪软件开发定制
网络战与网络安全宣传
初级数据库管理员的基本知识
不动产数据库升级改造情况
宁海ios软件开发项目
qq用什么邮件服务器
软件开发业务发展方向
电脑零基础学软件开发如何
中国医院药品统计报告数据库