皇冠与锚-JS实现(19世纪中叶流行的赌博游戏)
游戏规则
皇冠与锚游戏
游戏规则:
有一个6个面是"皇冠", “锚”, “红心”,“梅花”, “黑桃”, "方块"的骰子。玩家可以在这些面的组合中放任意数量钱数。
然后掷三个骰子,每个骰子上面都有之前提到的6个面。如果掷出来的骰子跟他下注的一样,那玩家可以收取对应的奖励。
场景模拟:玩家手里拥有50便士,当玩家赢到100便士或者输光则游戏结束。
下注 | 掷骰子 | 盈利 |
---|---|---|
5便士皇冠 | 皇冠、皇冠、锚 | 10便士 |
3便士梅花、2便士皇冠 | 黑桃、红桃、锚 | 0便士 |
所有花色1便士 | 任何一面 | 3便士 |
实现思路
1.游戏首先需要判断游戏状态
2.下注
function rand(m, n) { //随机金额
return m + Math.floor((n - m + 1) * Math.random());
}
3.掷骰子
function randFace() { //随机面
const allFace = ["crown", "anchor", "heart", "spade", "club", "diamond"];
let faceIndex = rand(0, 5);
return allFace[faceIndex];
}
4.收集奖励
代码实现
// 需求分析:1.判断游戏状态 2.下注 3.掷骰子 4.收集奖励
//游戏至少赢一次所需要次数
let num = 0;
let flag = false;
while (!flag) {
// 给初始50便士
let funds = 50;
num++;
// 1.判断游戏状态
while (funds > 0 && funds < 100) {
// 2.下注
const bets = { crown: 0, anchor: 0, heart: 0, spade: 0, club: 0, diamond: 0 }; //初始化下注
let totalBet = rand(1, funds); //下注总金额
console.log("这次下注:", totalBet);
//随机分配下注
let remaining = totalBet;
do {
let bet = rand(1, remaining); //单面下注金额
let face = randFace(); //下注的面
bets[face] += bet;
remaining -= bet;
} while (remaining > 0);
funds -= totalBet; //减去下注金额
console.log("下注情况:", bets);
// 3.掷骰子(3次)
const hand = [];
for (let roll = 0; roll < 3; roll++) {
hand.push(randFace());
}
console.log("骰子情况:", hand);
// 4.收集奖励
let winnings = 0; //赢得钱
for (let index = 0; index < hand.length; index++) {
let face = hand[index];
if (bets[face] > 0) {
winnings += bets[face];
}
}
funds += winnings; //加钱
console.log("这次赢了", winnings, "便士");
console.log("这次后金额:", funds);
}
console.log("第", num, "次游戏最后金额:", funds);
if(funds >= 100) {
flag = true;
}
}
function rand(m, n) { //随机金额
return m + Math.floor((n - m + 1) * Math.random());
}
function randFace() { //随机面
const allFace = ["crown", "anchor", "heart", "spade", "club", "diamond"];
let faceIndex = rand(0, 5);
return allFace[faceIndex];
}
这里我加入了循环判断,判断赌徒需要进行多少次赌博才能赢得一次赌博(相对极端,假设赌徒每次都花光50便士)下面是结果:
每次掷三个骰子,从上三次数据可以看出要盈利50便士以上需要的次数之高,假设赌徒每天赌博一次,运气最好也很难快速回本!拒绝赌博!!!
注:游戏摘自《JavaScript学习指南》