我需要提出一个循环来处理来自洗牌的卡牌,同时该值低于或等于玩家的设定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)
关于我可以使用哪种循环的任何指针?
答案 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);
<强>演示:强>
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;