用于发牌的循环,最高可达确定的值



我需要想出一个循环,当值低于或等于玩家的设定 stopAtValue 时,从洗牌的牌组中发牌。我有一组牌,Deck,我使用洗牌功能洗牌。如果我从套牌中.shift一张牌,我会得到这种格式:

Card { value: 13, name: 'K', suit: '♥' }

我有一个播放器:

function Player (name, stopAtValue) {
  this.name = name
  this.stopAtValue = stopAtValue
}
let player = new Player('Player 1', 16)

我想使用交易函数:

function deal () {
  if (shuffledDeck.length > 1) {
  return shuffledDeck.shift().value
  } else {
  return null
  }
}

然后,我得到移位卡的值,并可以使用它来计算分数。问题是,我怎样才能创建一个循环来发牌,直到附加值达到限制。我想到了这样的事情:

do { 
  deal()
  } while (deal().value <= Player.stopAtValue)

关于我可以为此使用哪种循环的任何指针?

问题是deal()返回数组中第一个Card的值,而不是玩家的累积分数。您还指的是不存在的Player函数的stopAtValue。相反,您应该引用初始化的player对象的stopAtValue。我会向Player函数添加一个currentScore属性,并使交易函数添加到该属性中。

选手:

function Player (name, stopAtValue) {
  this.name = name
  this.stopAtValue = stopAtValue
  this.currentScore = 0
}
let player = new Player('Player 1', 16)

交易:

function dealTo (player) {
  if (shuffledDeck.length > 0) {
    player.currentScore += shuffledDeck.shift().value
  }
}

圈:

do { 
  dealTo(player)
} while (player.currentScore <= player.stopAtValue)

我会根据玩家的stopCount来计算循环计数,否则拥有它有什么意义。

let player = new Player('Player 1', 16);
var valueReached = false;
while (!valueReached){
  if(player.stopAtValue >= deal()) {
    valueReached = true;
  }
}

实际上,您的deal()函数通过shuffledDeck.shift().value返回一个number,并且您尝试访问deal().value中的value属性,这将引发错误。

解决方案是在deal函数中返回整个Card对象,然后获取其值,并将该值存储在临时变量中,并在循环条件中进行比较。

并确保引用创建的player实例的stopAtValue,而不是循环中Player.stopAtValuePlayer构造函数。

这是你的代码应该如何:

function deal () {
  if (shuffledDeck.length > 1) {
     return shuffledDeck.shift();
  } else {
     return null;
  }
}
var lastValue = 0;
do{ 
   lastValue = deal().value;
} while (lastValue && lastValue <= player.stopAtValue);

演示:

var shuffledDeck = [{
    value: 13,
    name: 'K',
    suit: '♥'
  },
  {
    value: 9,
    name: 'Q',
    suit: '♥'
  }, {
    value: 20,
    name: 'J',
    suit: '♥'
  },
  {
    value: 13,
    name: '10',
    suit: '♥'
  }
];
function Player(name, stopAtValue) {
  this.name = name;
  this.stopAtValue = stopAtValue;
}
let player = new Player('Player 1', 16);
function deal() {
  if (shuffledDeck.length > 1) {
    return shuffledDeck.shift();
  } else {
    return null;
  }
}
var lastValue = 0;
do {
  lastValue = deal().value;
  console.log(lastValue);
} while (lastValue && lastValue <= player.stopAtValue);

相关内容

  • 没有找到相关文章

最新更新