javascript - Javascript中的纸牌游戏,构造函数错误

标签 javascript oop object constructor this

我正在用 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/

相关文章:

javascript - 在外部回调中解决/拒绝 Promis

javascript - 如何动态导入 SVG 并内联渲染

javascript - 如何创建一个发送消息的函数

python - 如何将 numpy 数组的 dtype 更改为 'object' ?

javascript - 指向数组的字符串指针

javascript - Phonegap Hybrid App - JavaScript Redirect 使绝对定位元素闪烁并显示后面的内容

c++ - 删除数组成员的更好方法是什么?

c++ - 如何实现工厂模式?

c++ - 我的 API 应该使用非成员函数来作用于对象,还是使函数成为对象的公共(public)函数?

python - 继承类;如何实现