我正在用 JavaScript 创建一个基本的纸牌游戏 (21),其中每个玩家都有一手牌。玩家从 2 张牌开始,但我想根据牌的总值(value)添加新牌,并根据是否有 A 进行调整。
不幸的是,我收到此错误: 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)
}
}
卡片对象如下所示:
{ 花色:'♦',牌号:'K',牌值:13 }
最佳答案
你不检查每个循环的值:
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 逻辑弄乱了我的 reducer 。坚持原来的计划。将对 cardsAtStart 的调用移动到构造方法中。然后使用 checkValue 来检查值。
关于javascript - Javascript中的纸牌游戏,构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029471/