用于处理卡的循环达到确定的值

时间:2017-10-16 13:01:21

标签: javascript loops playing-cards

我需要提出一个循环来处理来自洗牌的卡牌,同时该值低于或等于玩家的设定stopAtValue。 我有一个卡片组,Deck,我使用shuffle函数进行洗牌。如果我从卡片中移动卡片,我会得到以下格式:

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

我有一名球员:

function Player (name, stopAtValue) {
  this.name = name
  this.stopAtValue = stopAtValue
}

let player = new Player('Player 1', 16)

我想过使用Deal函数:

function deal () {
  if (shuffledDeck.length > 1) {
  return shuffledDeck.shift().value
  } else {
  return null
  }
}
然后,我获得了转移卡的价值,并可以使用它来计算得分。 问题是,如何创建一个处理卡的循环,直到添加的值达到限制。我想到了这样的事情:

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

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

3 个答案:

答案 0 :(得分:1)

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

<强>播放器:

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)

答案 1 :(得分:0)

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

let player = new Player('Player 1', 16);
var valueReached = false;

while (!valueReached){
  if(player.stopAtValue >= deal()) {
    valueReached = true;
  }
}

答案 2 :(得分:0)

实际上,deal()函数会在number之前返回shuffledDeck.shift().value,而您正试图访问value中的deal().value属性,这会引发错误

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

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

这应该是你的代码:

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

var lastValue = 0;
do{ 
   lastValue = deal().value;
} while (lastValue && lastValue <= player.stopAtValue);

<强>演示:

&#13;
&#13;
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);
&#13;
&#13;
&#13;