Blackjack javascript 游戏无限循环
Blackjack javascript game infinite loop
我创建了一个非常简单的二十一点游戏,它将洗牌后的牌组的第一个值存储到相应玩家的数组中,将他们作为实际手牌发牌。出于某种奇怪的原因,我似乎无法找到一种方法来多次执行代码的核心部分而不会出现无限循环。目前,我只尝试了 运行 非常普通的 "for" 命令,该命令用于多个语句,但在这里似乎不起作用。
原始形式的程序如下...
var dealerCards = [];
var playerCards = [];
var firstDeck = [];
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
function createShuffledDeckNumber(array, x) {
for (i = 0; i < 4*x; i++) {
array.push(1,2,3,4,5,6,7,8,9,10,11,12,13);
}
shuffle(array);
}
function drawCard(playersHand, playerSoft, playerHard) {
playersHand.push(firstDeck[0]);
firstDeck.shift();
}
function checkDeckDrawOne(playersHand) {
if (firstDeck.length === 0) {
createShuffledDeckNumber(firstDeck, 1);
drawCard(playersHand);
}else{
for (i = 0; i < 1; i++) {
drawCard(playersHand);
}
}
}
for (i = 0; i < 4; i++) {
dealerCards = [];
playerCards = [];
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(playerCards);
checkDeckDrawOne(playerCards);
console.log("dealerCards",dealerCards,"playerCards",playerCards);
console.log("firstDeckDrawn", firstDeck, "Number", firstDeck.length);
}
补充说明;
假定的 objective 可能会根据存储在每个玩家数组中的有限数量的值来模拟连续计算轮次的效果,从而计算出获胜者。虽然,在模拟实际玩 21 点的真实生活环境时,我已经尝试了一系列不同的方法,但这个版本似乎就是这样做的,它还让程序员能够引入像 KO 或 HiLo 这样的计数系统。整个事情背后的主要逻辑相当简单;每当涉及抽牌的命令被执行时,都会订购 x 洗好的牌组,除非牌组至少有一张牌。
考虑一下我为什么要在这样的游戏中创建多个回合是相当公平的。原因是,我想创建一个自动播放器应用程序,为我提供已处理数据的百分比。
函数 checkDeckDrawOne() 中的变量 i
具有全局作用域,这意味着它会在主循环中更改 i
的值:
for (i = 0; i < 4; i++) {
dealerCards = [];
playerCards = [];
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(playerCards);
checkDeckDrawOne(playerCards);
console.log("dealerCards",dealerCards,"playerCards",playerCards);
console.log("firstDeckDrawn", firstDeck, "Number", firstDeck.length);
}
改变这个:
for (i = 0; i < 1; i++) {
drawCard(playersHand);
}
对此:
for (var i = 0; i < 1; i++) {
drawCard(playersHand);
}
虽然你为什么在这里需要一个循环是令人费解的。
我创建了一个非常简单的二十一点游戏,它将洗牌后的牌组的第一个值存储到相应玩家的数组中,将他们作为实际手牌发牌。出于某种奇怪的原因,我似乎无法找到一种方法来多次执行代码的核心部分而不会出现无限循环。目前,我只尝试了 运行 非常普通的 "for" 命令,该命令用于多个语句,但在这里似乎不起作用。
原始形式的程序如下...
var dealerCards = [];
var playerCards = [];
var firstDeck = [];
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
function createShuffledDeckNumber(array, x) {
for (i = 0; i < 4*x; i++) {
array.push(1,2,3,4,5,6,7,8,9,10,11,12,13);
}
shuffle(array);
}
function drawCard(playersHand, playerSoft, playerHard) {
playersHand.push(firstDeck[0]);
firstDeck.shift();
}
function checkDeckDrawOne(playersHand) {
if (firstDeck.length === 0) {
createShuffledDeckNumber(firstDeck, 1);
drawCard(playersHand);
}else{
for (i = 0; i < 1; i++) {
drawCard(playersHand);
}
}
}
for (i = 0; i < 4; i++) {
dealerCards = [];
playerCards = [];
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(playerCards);
checkDeckDrawOne(playerCards);
console.log("dealerCards",dealerCards,"playerCards",playerCards);
console.log("firstDeckDrawn", firstDeck, "Number", firstDeck.length);
}
补充说明;
假定的 objective 可能会根据存储在每个玩家数组中的有限数量的值来模拟连续计算轮次的效果,从而计算出获胜者。虽然,在模拟实际玩 21 点的真实生活环境时,我已经尝试了一系列不同的方法,但这个版本似乎就是这样做的,它还让程序员能够引入像 KO 或 HiLo 这样的计数系统。整个事情背后的主要逻辑相当简单;每当涉及抽牌的命令被执行时,都会订购 x 洗好的牌组,除非牌组至少有一张牌。
考虑一下我为什么要在这样的游戏中创建多个回合是相当公平的。原因是,我想创建一个自动播放器应用程序,为我提供已处理数据的百分比。
函数 checkDeckDrawOne() 中的变量 i
具有全局作用域,这意味着它会在主循环中更改 i
的值:
for (i = 0; i < 4; i++) {
dealerCards = [];
playerCards = [];
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(dealerCards);
checkDeckDrawOne(playerCards);
checkDeckDrawOne(playerCards);
console.log("dealerCards",dealerCards,"playerCards",playerCards);
console.log("firstDeckDrawn", firstDeck, "Number", firstDeck.length);
}
改变这个:
for (i = 0; i < 1; i++) {
drawCard(playersHand);
}
对此:
for (var i = 0; i < 1; i++) {
drawCard(playersHand);
}
虽然你为什么在这里需要一个循环是令人费解的。