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

本文主要是介绍七夕节还不知道送啥,教你用MATLAB制作一款刮刮乐抽奖特效,让她的手气决定她的礼物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.15
0.050.2
0.20.4
0.20.6
0.20.8
0.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;endset(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 isClickingmousePos=fig.CurrentPoint;boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;coverageMat_A(boolPos)=0;set(coverageHdl,'AlphaData',coverageMat_A)end
end

2完整代码

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);
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;endset(fig,'WindowButtonMotionFcn',@bt_move);
function bt_move(~,~)if isClickingmousePos=fig.CurrentPoint;boolPos=sqrt((xMesh-mousePos(1)).^2+(yMesh-mousePos(2)).^2)<=15;coverageMat_A(boolPos)=0;set(coverageHdl,'AlphaData',coverageMat_A)end
endend

各个奖项和概率都可以自己设置,还不快来试试?

这篇关于七夕节还不知道送啥,教你用MATLAB制作一款刮刮乐抽奖特效,让她的手气决定她的礼物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169430

相关文章

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

『功能项目』战士的平A特效【35】

我们打开上一篇34武器的切换实例的项目, 本章要做的事情是在战士的每次按A键时在指定位置生成一个平A特效 首先将之前下载的技能拖拽至场景中 完全解压缩后重命名为AEffect 拖拽至预制体文件夹 进入主角动画的战士动画层级 双击第一次攻击 选择Animation 创建事件 创建的动画事件帧放在攻击动画挥剑指定处 命名为PerpetualAtt

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版