一个简单的大转盘抽奖程序(附.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 ...
随机推荐
- 使用wxpython开发跨平台桌面应用,设计系统的登录界面
一般的系统登统界面,设计好看一些,系统会增色不少,而常规的桌面程序,包括Web上的很多界面,都借助于背景图片的效果来增色添彩,本篇随笔介绍基于WxPython来做一个登录界面效果,并对系统登录界面在不 ...
- An Entry Example of Log4j
The log4j can be configured both programmatically and externally using special configuration files. ...
- highcharts在vue中的应用
1.安装命令 npm install highcharts --save 2.在页面中按需引入 import Highcharts from 'highcharts/highstock'; impor ...
- Docker之磁盘清理
Docker 很占用空间,每当我们运行容器.拉取镜像.部署应用.构建自己的镜像时,我们的磁盘空间会被大量占用. 如果你也被这个问题所困扰,咱们就一起看一下 Docker 是如何使用磁盘空间的,以及如何 ...
- Filter内存马
概述 最近感冒了,不想BB太多,直接开始调试吧,先写个Filter来调试 Filter代码 新建一个FilterShell类,代码如下: 一个类如果想要成为Filter则需要继承Filter,然后重写 ...
- ZCMU-1038
其实感觉不太难,读懂题意就行,我一开始没有仔细去读感觉就很懵.其题目意思就是一段字符串含有数字和'<'或者'>',一开始从左开始遍历,遇到'>'这类东西换方向,如果有多次遇到就删之前 ...
- 东方通TongWeb7.0.4.9M4部署SuperMap iServer 11.2.1
一.软件版本 操作系统: CentOS Linux release 7.5.1804 (Core) JDK:11.0.18 东方通:TongWeb7.0.4.9M4 SuperMap iServer: ...
- 【NAS】绿联NAS+alist+lsky+natfrp 实现图床服务
alist 安装与配置 值得一提的就是,映射的data是配置相关的,让绿联直接默认路径就行,不需要手动设置 但是文件保存位置的映射的话,为了方便,可以单独映射到一个方便访问的文件夹,(但是要注意下权限 ...
- 开源产品测评之 SQL 上线能力
背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...
- Pycharm创建工程及运行程序入门教程
pycharm基础使用步骤 1.下载pycharm2.新建Python工程(1)如下,点击Create New Project (2)选择保存位置,点击create. (3)命名,打开界面如下 (4) ...