抽卡手游玩多了,心血来潮写个抽卡模拟器,卡等级分sss,ss,s,a,b,c六种,sss概率为0.01%,ss概率为0.1%,s概率为1%,a概率为15%,b概率为30%,剩余都为c,为了避免长期呆在非洲,加入了概率补偿的设定,每一次抽到s以下的卡片,都会使概率补偿计数器的值上升,这个计数器的值直接影响到抽到s以上卡的概率,当抽取到s以上卡时,重置这个计数器,防止抽到高级卡的概率过高。目前仅有单抽功能,待下次补完十连抽。卡片的抽取原理是通过Math.floor(Math.random()*10000)生成一个0-9999的整数值,根据值的大小确定抽取到的卡片种类。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Draw Card Simulator</title>
</head>
<body>
<p id="p1"></p>
<br>
<form>
<input type="button" value="抽卡" onclick="clickButton()">
</form>
<script>
var sssCount = 0;
var ssCount = 0;
var sCount = 0;
var aCount = 0;
var bCount = 0;
var cCount = 0;
var compensate = 0;
var randomDraw = 0;
function drawCard(){
randomDraw = Math.floor(Math.random() * 10000);
if (randomDraw <= compensate) {
sssCount++;
compensate = 0;
}
else if (randomDraw <= compensate * 6 + 10) {
ssCount++;
compensate = 0;
}
else if (randomDraw <= compensate * 16 + 110) {
sCount++;
compensate = 0;
}
else if (randomDraw <= compensate * 16 + 1610) {
aCount++;
compensate++;
}
else if (randomDraw <= compensate * 16 + 4610) {
bCount++;
compensate++;
}
else {
cCount++;
compensate++;
}
}
function showCard(){
var p = document.getElementById("p1");
var str = "sssCount: " + sssCount + "<br>ssCount: " + ssCount + "<br>sCount: " + sCount + "<br>aCount: " + aCount + "<br>bCount: " + bCount + "<br>cCount: " + cCount;
p.innerHTML = str;
}
function clickButton(){
drawCard();
showCard();
}
</script>
<body>
</html>