如何利用Matlab制作一款刮刮乐抽奖特效
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家分享的是有关如何利用Matlab制作一款刮刮乐抽奖特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.效果展示程序运行效果如下:如图所示,按住鼠标不松开并滑
千家信息网最后更新 2025年11月08日如何利用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安全错误
数据库的锁怎样保障安全
甘肃网络视频服务器虚拟主机
mx 邮件服务器
湖北软件开发价格
极数宝数据库产品叫什么
金山新闻网络安全
服务器租赁合同范本
囯家网络安全工程师认证
什么是电子邮箱的服务器
sq数据库多表查询
网络安全网站是干嘛的
拨号管理服务器
常州钟楼软件开发园区
浪潮服务器 风扇接口
银川网络技术是什么
计算机网络技术微调查
网络技术开发税率多少
青岛昱力网络技术有限公司
香港服务器租用管理方案
简笔画网络安全手抄报可爱
实时同步手机短信到服务器
无线网络安全插画接单
山西hp服务器虚拟化部署
append函数 数据库
ftfp服务器
华为数据库服务器默认用户名
学什么网络技术可以就业
数据库的思想和技术
金山新闻网络安全
95后学网络安全收入高
关于计算机网络技术安全问题