一个简单的大转盘抽奖程序(附.NetCore Demo源码)
最近闲下来在做一些demo,现在讲一下做的一个简单的大转盘抽奖demo,前端lottery,layui,后端.net core,sqlsugar,数据库用的mysql
1.前端实现:
前端用的是基于开源的lottery,其中有些改动的,使得前端可以自适应pc端和手机端浏览器,以下是前端js调用实现:
var accountId = 1;
var lottery = new LotteryDial(document.getElementById('luckPointer'),
{ // eslint-disable-line
speed: 30, // 每帧速度
areaNumber: 8, // 奖区数量
circleNumber: 5 //旋转圈数
});
var index = -1;
var luckProduct = {};
lottery.on('start',
function() {
// 请求获取中奖结果
$.ajax({
url: '@Url.Action("GetLuckyResult")',
dataType: 'json',
type: 'post',
async :false,
data: { accountId: accountId, ran: Math.random() }
}).done(function(d) {
if (d.code === 0) {
console.log('剩余次数为0');
}
if (d.code === 1) {
console.log(d.data);
index = parseInt(d.data.luckyIndex);
luckProduct = d.data;
lottery.setResult(index);
}
});
// 假如请求出错
// setTimeout(function () {
// lottery.reset()
// }, 1000)
});
lottery.on('end',
function() {
console.log('中奖奖区:' + index);
if (luckProduct != null && luckProduct.isLucky) {
layer.msg('恭喜您中奖了,你将获得了:' + luckProduct.productName);
} else {
layer.msg('谢谢参与!');
} });
2.后端逻辑实现
后端用的简单算法,步骤如下
a.根据奖品概率构造一个区间
b.通过随机数Rondom的API获取随机值 [0, 最大值)
c.根据随机值匹配到对应区间的奖品,即是抽取到的奖品
代码实现如下:
public async Task<LuckyProduct> GetLuckyAction(int accountId)
{
var res = new LuckyProduct();
try
{
var allow = Db.Queryable<LuckyAccount>().Where(e => e.AccountId == accountId).First();
if (allow == null || allow.AllowCount <= 0)
return await Task.Run(() => res);
bool isSaveAction = LuckyActionDb.Insert(new LuckyAction()
{
AccountId = accountId,
LuckyAccount = "test",
CreatedAt = DateTime.Now
}); if (isSaveAction)
{
allow.AllowCount = allow.AllowCount - 1;
bool isUpdateAllow =
LuckyAccountDb.Update(allow);
if (isUpdateAllow)
{
var list = LuckyProductDb.GetList(e => e.ProductStatus == 1 && e.ProductStore > 0);
if (list != null && list.Count > 0)
{
res = list.Find(e => e.IsLucky == 0);
Random r = new Random();
int index = r.Next(1, 100);
foreach (LuckyProduct t in list)
{
if (t.ProductLuckyRateMin <= index && t.ProductLuckyRateMax >= index)
{
res = t;
}
}
if (res != null && res.IsLucky == 1)
{
res.ProductStore = res.ProductStore - 1;
LuckyProductDb.Update(res);
LuckyResultDb.Insert(new LuckyResult()
{
AccountId = accountId,
CreatedAt = DateTime.Now,
LuckyAccount = "test",
ProductCode = res.ProductCode,
ProductId = res.ProductId,
ProductName = res.ProductName
});
}
}
}
}
}
catch (Exception ex)
{
}
return await Task.Run(() => res);
}

预览地址:http://lucky.idevtool.com/
开源demo地址:https://gitee.com/jomingol/lucky
程序员工具站点:草根工具www.idevtool.com
一个简单的大转盘抽奖程序(附.NetCore Demo源码)的更多相关文章
- Android Gallery实现3D相册(附效果图+Demo源码)
今天因为要做一个设置开机画面的功能,主要是让用户可以设置自己的开机画面,应用层需要做让用户选择开机画面图片的功能.所以需要做一个简单的图片浏览选择程序.最后选用Gallery作为基本控件.加入了一些炫 ...
- 近期热门微信小程序demo源码下载汇总
近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...
- 纯CSS3大转盘抽奖(响应式、可配置)
源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘 ...
- Java 实现大转盘抽奖
需要用到 JAVA中的Random()函数 注意:大转盘抽奖各奖项中奖概率之和为 1.奖品列表中的概率为累加概率,需要按照添加进列表的顺序进行累加,添加顺序不做要求. 实际中使用需要考虑奖品数量限制等 ...
- jquery——九宫格大转盘抽奖
一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Con ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- 【Vue.js游戏机实战】- Vue.js实现大转盘抽奖总结
大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩 ...
- 在 Visual Studio 中创建一个简单的 C# 控制台应用程序
转载:https://blog.csdn.net/qq_43994242/article/details/87260824 快速入门:使用 Visual Studio 创建第一个 C# 控制台应用 h ...
- 一个简单的c# 贪吃蛇程序
一个简单的c#贪吃蛇程序 程序分为界面设计和程序设计:界面设计和程序设计均参考了一些游戏实例,但是所有代码内容是本人编写. 由于看到别人写的程序并没有署名,这里的署名全部都是csdn官网. 游戏界面设 ...
- Django 学习笔记之六 建立一个简单的博客应用程序
最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...
随机推荐
- 鸿蒙NEXT开发案例:随机密码生成
[引言] 本案例将实现一个随机密码生成器.用户可以自定义密码的长度以及包含的字符类型(大写字母.小写字母.数字.特殊字符),最后通过点击按钮生成密码,并提供一键复制功能. [环境准备] •操作系统:W ...
- AI运动小程序开发常见问题集锦二
截止到现在写博文时,我们的AI运动识别小程序插件已经迭代了23个版本,成功应用于健身.体育.体测.AR互动等场景:为了让正在集成或者计划进行功能扩展优化的用户,少走弯路.投入更少的开发资源,针对近期的 ...
- 盘点Vue3 watch的一些关键时刻能够大显身手的功能
前言 watch这个API大家应该都不陌生,在Vue3版本中给watch增加不少有用的功能,比如deep选项支持传入数字.pause.resume.stop方法.once选项.onCleanup函数. ...
- 洛谷P4913【深基16.例3】二叉树深度题解
很简单的二叉树遍历问题,可以用dfs(深度优先搜索)解决. 看到数据范围,最大不超过 \(10^6\) ,可以不开 long long (但我还是习惯性地开了) 接下来上代码: #include< ...
- Java线程:新特征-条件变量
条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义. 这里的条 ...
- Kafka可视化工具之Kafka Tool
官网: https://www.kafkatool.com/download.html Kafka Tool是一个用于管理和使用Apache Kafka集群的GUI应用程序. Kafka Tool提供 ...
- 借助AI助手如何高效排查SQL问题
快乐的时光总是转瞬即逝,尤其是当我们面对bug时,不仅浪费了宝贵的时间,更让人感到沮丧.因为bug往往是非常奇怪.难以捉摸的,找来找去你始终无法确定问题所在,最终意识到这些bug并没有多大技术含量.尽 ...
- 聊一下怎么10分钟速水中危CVE
题目是真的.今天晚上刚接触关于CVE的审计和提交.只能说:牛逼的是真牛逼,水的是真水. 我接下来教你,怎么在10分钟里找到一个CVE的中危漏洞并且提交.然后你就可以去咸鱼接单了,一个一铂快 打开htt ...
- 全球气象数据ERA5的下载方法
本文介绍在ERA5气象数据的官方网站中,手动下载.Python代码自动批量下载逐小时.逐日与逐月的ERA5气象数据各类产品的快捷方法. ERA5(fifth generation ECMWF ...
- Rapid SCADA v6安装常见问题
用了很多年的Rapid SCADA v5,现在官网已经推出了v6,就简单写一下有关v6的安装指南吧. 本指南面向Windows用户,不适用于linux用户 步骤 从官网下载Rapid SCADA最新的 ...