Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
21点javascript游戏无限循环_Javascript_Arrays_Loops_Blackjack - Fatal编程技术网

21点javascript游戏无限循环

21点javascript游戏无限循环,javascript,arrays,loops,blackjack,Javascript,Arrays,Loops,Blackjack,我创建了一个非常简单的21点游戏,它将洗牌数组中的第一个值存储到相应玩家的数组中,并将它们作为实际手牌进行处理。出于某种奇怪的原因,我似乎找不到一种方法来多次执行代码的核心部分,而不得到一个无限循环。目前,我只尝试运行非常普通的“For”命令,该命令用于多个语句,但在这里似乎不起作用 其基本形式的程序如下 var dealerCards = []; var playerCards = []; var firstDeck = []; function shuffle(o){ for(var

我创建了一个非常简单的21点游戏,它将洗牌数组中的第一个值存储到相应玩家的数组中,并将它们作为实际手牌进行处理。出于某种奇怪的原因,我似乎找不到一种方法来多次执行代码的核心部分,而不得到一个无限循环。目前,我只尝试运行非常普通的“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);
}
var-dealerCards=[];
var playerCards=[];
var firstDeck=[];
函数洗牌(o){
对于(var j,x,i=o.length;i;j=Math.floor(Math.random()*i),x=o[--i],o[i]=o[j],o[j]=x);
返回o;
}
函数createShuffledDeckNumber(数组,x){
对于(i=0;i<4*x;i++){
推(1,2,3,4,5,6,7,8,9,10,11,12,13);
} 
洗牌(阵法);
}
功能抽卡(playersand、playerSoft、playershard){
播放机手推(第一副牌[0]);
firstDeck.shift();
}
功能检查一台(播放机和){
if(firstDeck.length==0){
createShuffledDeckNumber(第一组,1);
抽卡(玩家和);
}否则{
对于(i=0;i<1;i++){
抽卡(玩家和);
}
}
}
对于(i=0;i<4;i++){
经销商卡=[];
玩家卡=[];
支票卡;
支票卡;
棋盘游戏机;
棋盘游戏机;
log(“dealerCards”,dealerCards,“playerCards”,playerCards);
console.log(“FirstDeckDrawed”,firstDeck,“Number”,firstDeck.length);
}
补充说明

假定的目标可能是通过模拟基于每个玩家数组中存储的有限个值的连续计算回合的效果来计算出获胜者。尽管我尝试了一系列不同的方法来模拟实际玩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);
}
(i=0;i<4;i++)的
{
经销商卡=[];
玩家卡=[];
支票卡;
支票卡;
棋盘游戏机;
棋盘游戏机;
log(“dealerCards”,dealerCards,“playerCards”,playerCards);
console.log(“FirstDeckDrawed”,firstDeck,“Number”,firstDeck.length);
}
更改此项:

for (i = 0; i < 1; i++) {
  drawCard(playersHand);
}
(i=0;i<1;i++)的
{
抽卡(玩家和);
}
为此:

for (var i = 0; i < 1; i++) {
  drawCard(playersHand);
}
for(变量i=0;i<1;i++){
抽卡(玩家和);
}

尽管你为什么需要一个循环还是让人费解。

可以添加一个小提琴吗?你是对的,我不需要一个。原来我在尝试画多张卡片,但由于卡片计数算法的问题,我完全放弃了。从来没有想到这个特定的块会导致问题,随后也不介意重新检查它。感谢您在这方面的帮助。您的“for”循环实际实现了什么?