我下载了CSV模板文件之后,里面的内容显示都是问号。
这个显示正常吗?求指教
你用 Excel 导入 csv 格式数据,然后碰到编码选 utf-8 试试。
另外,修好了,可以重新下载一个模板文件试试,
是的,按一次键,一次性,出全部获奖名单。
另外,可以在手机上投屏到电视来用吗
之前用AI生成过一套抽奖算法,可以实现类似抽卡的效果。比如买了 50包饼干、100颗糖果、30块巧克力、10次买玩具的机会,每次随机抽,直到用完。
/**
* 抽奖数据
* @Key: 类目
* @Value: 权重。数字越小,概率越低。原本是仿照抽卡游戏中的展示的概率。在本Demo中也可以理解成库存。
*/
let data = {
"饼干":50,
"糖果":100,
"巧克力":30,
"玩具":10,
}
/**
* 权重抽奖函数,由 Gemini 生成
* @param {Object} options - 格式为 {"类目名1": 权重数字, "类目名2": 权重数字, ...}, 权重越小,概率越低
* @returns {string|null} - 返回抽中的类目名
*/
function lottery(options) {
// 1. 获取所有类目的键名
const keys = Object.keys(options);
if (keys.length === 0) return null;
// 2. 计算总权重 (Total Weight)
const totalWeight = keys.reduce((sum, key) => sum + parseFloat(options[key]), 0);
if (totalWeight <= 0) return null;
// 3. 生成一个 0 到 总权重 之间的随机数
let random = Math.random() * totalWeight;
// 4. 遍历类目,通过累减确定随机数落下的区间
for (const key of keys) {
const weight = options[key];
if (random < weight) {
return key;
}
random -= weight;
}
// 万一由于浮点数精度问题没有返回,默认返回最后一个
return keys[keys.length - 1];
}
// 抽卡业务
// 1.全部抽完
let keys = Object.keys(data);
for(let i=0; keys.some(item=> data[item] > 0 ) ;i++){
let out = lottery(data);
console.log(`第${i+1}次抽奖结果:`, out);
data[out]--;
}
/*
// 2.抽奖一次
let out = lottery(data);
console.log(`抽奖结果:`, out);
// 视情况,是否需要减库存/概率
data[out]--;
// 查看库存
console.log(`库存:`, data);
*/
/*
// 3.抽奖10次
for(let i=0; i<10; i++){
let out = lottery(data);
console.log(`第${i+1}次抽奖结果:`, out);
// 如果输入的是概率,而不是库存,删除下面这行代码
data[out]--;
}
// 查看库存
console.log(`库存:`, data);
*/
打开浏览器,按F12,将代码中的data区域的内容改成自己的,粘贴到浏览器的开发者窗口中控制台的tab中,回车就能运行了
可以用了,非常感谢博主的耐心指教。
可以自定义背景图吗?
可以自定义文字和图标。
感觉不如这个网站好。https://www.gachago.net/
哎呦,第一个砸场子的人来了。
博主 代码中有做 重复中奖 的限制吗
不会重复的
太牛了谢谢大佬分享