利用Matlab制作一款刮刮乐抽奖特效

目录
  • 1.效果展示
  • 2.程序原理说明
    • 2.1奖项设置
    • 2.2随机抽取
    • 2.3绘制图层
    • 2.4滑动鼠标刮奖
  • 3.完整代码

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;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

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制作一款刮刮乐抽奖特效的文章就介绍到这了,更多相关Matlab刮刮乐抽奖特效内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实战项目刮刮乐的实现详解流程

    目录 导语 正文 1)环境安装 2)正式敲代码 2.1定义必要常量 2.2设置随机读取图片 2.3主程序 3)效果图展示 3.1 part 随机图一 3.2 part 随机图二 3.3 part 随机图三 总结 导语 在CSDN学习的过程中,遇到了爆火的文章是关于刮刮卡的! 大家猜猜看是谁写的? 我看这文章都特别火,我也感觉挺好玩的,那就寻思用 Python肯定也能做呀! 这不?今天还有时间,那就带大家写一款刮刮乐的小程序吧~ 正文 1)环境安装 准备好Python3.Pycharm.Pygam

  • JavaScript实现刮刮乐效果

    刮刮乐怎么做? 本文实例为大家分享了JavaScript实现刮刮乐效果的具体代码,供大家参考,具体内容如下 来这我教你 1.首先准备好编程软件webStorm或者eclipse都行 2.不会编写代码?给你准备好了 3.如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <

  • 详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    目录 1.玫瑰花绘制 绘制效果 完整代码 2.月季花绘制 绘制效果 完整代码 3.玫瑰配色 4.旋转版本 1.玫瑰花绘制 绘制效果 完整代码 function drawrose grid on [x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi); p=(pi/2)*exp(-t./(8*pi)); change=sin(15*t)/150; u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change; y=2*(

  • 利用Matlab绘制一个可爱的南瓜灯

    目录 效果及原理 原理 实现方法 完整代码 效果及原理 效果如下: 调一下数据还能改成三角眼: 原理 南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着z轴旋转一周得到曲面,我对数值做了微调,原图及原始数据: 实现方法 这里我故意保留了网格让南瓜看起来有一点布娃娃的感觉,(大家也可以根据自己喜好改写,例如将’EdgeColor’设置为’none’并打个光啥的) % 构造网格 [t,p]=meshgrid(linspace(0,2*pi,200),linspace(0

  • 20行JS代码实现网页刮刮乐效果

    分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码 效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) <canvas id="canvas" width="400" height="300"></canvas> </body> 没什么要特别注意的 为了效果加了些CSS样式 CSS部分 <style type=&

  • JavaScript canvas实现刮刮乐案例

    本文实例为大家分享了JavaScript canvas实现刮刮乐效果的具体代码,供大家参考,具体内容如下 效果图 HTML代码: <div class="ggk"> <span id="span">200元</span> <canvas id="canvas"></canvas> </div> css代码: .ggk { width: 200px; height: 100px

  • 基于Matlab绘制超绚丽的烟花的过程详解

    目录 1.使用效果 2.随机点生成 3.图像膨胀 4.特效「风」模拟 5.级坐标变换 6.图像模糊及再映射 7.图像上色 8.完整代码 1.使用效果 2.随机点生成 我们要构造一个黑色背景,对其添加高斯噪声,然后依据阈值删掉部分噪声,生成一张随机点图片: % 构造黑色背景并生成白色杂点 blackPic=uint8(zeros(800,800)); distPic=imnoise(blackPic,'gaussian',0, 0.11); distPic(distPic<254)=0; 3.图像

  • 利用Matlab绘制一款专属进度条

    目录 1.使用效果 2.制作历程 3.函数用法 4.工具函数完整代码 waitBar_SL1.m waitBar_SL2.m waitBar_SL3.m waitBar_SL4.m 5.下载地址 1.使用效果 2.制作历程 首先我有个程序需要用到进度条,我首先试了一下MATLAB自带的进度条: bar=waitbar(0,'读取数据中...'); % waitbar显示进度条 for i=1:1000 A(i)=rand(); str=['计算中...',num2str(100*i/1000),

  • 利用Matlab制作一款刮刮乐抽奖特效

    目录 1.效果展示 2.程序原理说明 2.1奖项设置 2.2随机抽取 2.3绘制图层 2.4滑动鼠标刮奖 3.完整代码 1.效果展示 程序运行效果如下: 如图所示,按住鼠标不松开并滑动鼠标,即可刮开图层: 2.程序原理说明 2.1 奖项设置 奖项设置写在一个cell元胞数组中,第一列为文本信息,第二列为抽到的概率: strSet={'520元红包一个',15/100; '1314元红包一个',5/100; '黑丝水手服',20/100; '黑丝女仆装',20/100; '抱抱×50次',20/1

  • 如何利用Matlab制作一款真正的拼图小游戏

    效果: 简单原理介绍: 1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置) jigsawMask=zeros(101*5,101*5); jigsawMask(102:404,102:404)=1; [xMesh,yMesh]=meshgrid(1:101*5,1:101*5); dis1=sqrt((xMesh-51).^2+(yMesh-253).^2); dis2=sqrt((xMesh-505+50).^2+(yMesh-2

  • 利用Matlab制作一款3D版2048小游戏

    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代码: function game20483D global squaremap global colorlist global fontsizelist global baseX baseY baseZ global barHdl textHdl global txtBest txtScore global best fig=figure('units','pi

  • 利用Matlab制作一款狗头翻牌子小游戏

    目录 0游戏效果 1fig界面和背景板 2狗狗牌子与胜利标志 2.1狗狗牌子绘制 2.2游戏胜利标签 2.3鼠标点击牌子回调 3游戏难度按钮组 3.1按钮绘制 3.2难度选择回调 4游戏刷新模块 4.1刷新游戏按钮绘制 4.2模拟鼠标点击 4.3刷新游戏回调 5完整代码 0 游戏效果 就是点击一个牌子时,该牌子和周围四个牌子也会相应发生变化,想办法让所有牌子都在同一面即为游戏胜利. 1 fig界面和背景板 这一段比较简单,主要是对界面和背景板的属性设置,我们采用编程的方式调用app design

  • 利用Matlab制作抖音同款含褶皱面料图

    目录 效果如下 步骤 1.导入图片 2.图片扩张 3.像素映射 4.正片叠底 5.完整代码 效果如下 步骤 1.导入图片 我们需要导入一张褶皱图片(background.jpg)以及一张前景图片(foreground.jpg),将褶皱图片灰度化,将前景图调整至与褶皱图片相同大小: bkgPic=imread('background.jpg'); bkgPic=rgb2gray(bkgPic); forePic=imread('foreground.jpg'); forePic=imresize(

  • 利用Matlab制作环形相册效果详解

    目录 运行效果 完整步骤 1.图片准备及导入 2.为每张图片制作遮罩层 3.调整每张图大小 4.绘图及绘图参数详解 完整代码 运行效果 完整步骤 1.图片准备及导入 要制作一款相册足够的图片量是必不可少的,不然整个相册只有一张图来回重复多没意思呀,因此我们需要一个文件夹专门放图片,为了方便导入,这里全部都是jpg格式: 图片导入代码: path='.\album\';%文件夹路径 files=dir(fullfile(path,'*.jpg')); picNum=size(files,1); %

  • 基于Matlab制作一款简单的龙舟小游戏

    效果图: 没找到合适的背景就自己画了个,大家如果有更好看的可以换一下... 步骤 1 创建Axes及图片导入 窗口创建: Mainfig=figure('units','pixels','position',[50 100 760 400],... 'Numbertitle','off','menubar','none','resize','off',... 'name','dragonBoat'); axes('parent',Mainfig,'position',[0 0 1 1],...

  • 利用Matlab制作三子棋游戏的示例代码

    效果: 注: 由于用uifigure和uiaxes写的会比较慢,改成常规的axes和figure会快很多. 完整代码: function OX_chess fig=uifigure('units','pixels',... 'position',[350 100 500 500],... 'Numbertitle','off',... 'name','OX_chess',... 'Color',[1 1 1],... 'resize','off',... 'menubar','none'); a

  • 利用Matlab制作一个贼简单的粒子圣诞树

    目录 圣诞树主体 背景修饰 绘制地面 水晶球 添加雪花并旋转视角 完整代码 上一期圣诞树有些人说代码太复杂,这期来个贼简单的水晶球里的圣诞树: 这期就是非常简单的三个图形组合: 圣诞树主体 % 圣诞树形状生成函数 h0=25;r0=12;a0=.5.*pi; XFunc=@(h,r,a,z) (h-z)./h.*r.*cos(a.*z); YFunc=@(h,r,a,z) (h-z)./h.*r.*sin(a.*z); ZFunc=@(h,r,z) z+sqrt(12^2-((h-z)./h.*

随机推荐