我正在用JavaScript创建一个基本的纸牌游戏(21),每个玩家都有一手牌。玩家从2张牌开始,但我想根据牌的总价值添加新牌,并调整是否存在牌。
不幸的是,我收到此错误:FATAL ERROR:CALL_AND_RETRY_LAST分配失败 - JavaScript堆内存不足。我认为问题必须与this.newCard方法,我似乎无法理解为什么它不起作用。
function Hand () {
this.cards = []
this.cardsAtStart = function() {
this.cards.push(new DealCards, new DealCards)
return this.cards
}
this.checkValue = function () {
let cardsInHand = this.cardsAtStart()
let ace = false
let value = 0
for (let i = 0; i < cardsInHand.length; i++) {
if (cardsInHand[i].cardnumber === 'A' && !ace) {
ace = true
value = value + 13
}
value = value + cardsInHand[i].cardvalue
}
if (ace && value > 21) {
value = value - 13
}
console.log(value)
return value
}
this.newCard = function () {
let value = this.checkValue()
console.log(value)
while (value < 15) {
this.cards.push(new DealCards)
}
if (value > 15) {
endGame()
}
console.log(this.cards)
}
}
卡片对象如下所示:
{ suit: '♦', cardnumber: 'K', cardvalue: 13 }
答案 0 :(得分:2)
您永远不会退出while
循环,因为value
无法更改:
while (value < 15) {
this.cards.push(new DealCards)
}
您需要更改value
循环内的while
变量,以便条件可以为false
。
这样的事情:
while (value < 15) {
this.cards.push(new DealCards);
value++;
}
答案 1 :(得分:2)
您不会检查每个循环的值:
this.newCard = function () {
let value = this.checkValue()
console.log(value)
while (value < 15) {
this.cards.push(new DealCards);
// check value again here!
value = this.checkValue()
}
if (value > 15) {
endGame()
}
console.log(this.cards)
}
但是也要修改checkValue以将cardsAtStart移出那里并进入构造函数。
<击> 或者,检查以下值:
while (value < 15) {
this.cards.push(new DealCards);
value = this.cards.reduce((all, current) => all + current.cardvalue, 0),
}
击> <击> 撞击>
划伤一下,Ace逻辑与我的减速器混在一起。坚持原计划。将调用cardAtStart移动到构造函数方法中。然后使用checkValue来检查值。
答案 2 :(得分:0)
你收到这个错误是因为你在这一行被困在一个无限循环中,
while (value < 15) {
this.cards.push(new DealCards)
}
问题是当这个函数运行时,值永远不会大于15,所以它只是不断重复。
如果您希望这张卡在卡片少于15张时发牌,那么您可以做其他事情,
if (value < 15) {
this.cards.push(new DealCards)
}
因此,为了解决您的问题,您需要在每次调用this.checkValue()
函数时更新值。
while (value < 15) {
this.cards.push(new DealCards);
value = this.checkValue();
}
答案 3 :(得分:0)
这个for循环永远不会结束
while (value < 15) {
this.cards.push(new DealCards)
}
您需要调用值++或++值才能结束
while (value < 15) {
this.cards.push(new DealCards);
value++;
}