1

桌上有 8 张牌,其中 4 面可见,4 面隐藏。单击一张卡片将其翻转,如果有点子匹配或西装匹配,则在相关卡片周围显示火花。

问题是,我要么在逻辑上做错了事,要么 .concat() 不起作用。因为有些火花会出现,有些则不会。

整个游戏可能可以重构为适当的对象,但这超出了我目前的水平(我已经学习 JS 一个月了)。使用的框架是 RightJS。为了清楚起见和一些上下文,发布了整个函数。

function pick(card) {
    var matches = [],
        pip = [],
        suit = [];

    //Check for matches
    ['card1', 'card2', 'card3', 'card4'].each(function (el) {
        if (hand[el].charAt(0) == 'j') {
            matches.push(card);
            matches.push(el);
        } //Joker
        else if (hand[card].charAt(1) == hand[el].charAt(1) || hand[card].charAt(0) == 'j') {
            matches.push(card);
            pip.push(el);
        } //Pip match
        else if (hand[card].charAt(0) == hand[el].charAt(0) || hand[card].charAt(0) == 'j') {
            matches.push(card);
            suit.push(el);
        } //Suit match
    });
    if (pip.length > suit.length) {
        matches.concat(pip);
    } else {
        matches.concat(suit);
    }

    //Hide old bling
    $$('.bling').each(function (el) {
        el.hide();
    });

    //Show bling
    if (matches.length > 0) {
        matches.each(function (el) {
            $(el).firstChild.show();
        });
    }

    //Show the card from hand
    $(card).setClass(hand[card]);
    turned++;

    // New turn if all have been clicked
    if (turned == 4) {
        turned = 0;
        newturn();
    }
}
4

1 回答 1

0

诀窍是先建立你的牌组,然后在分发时从牌组中取出牌。

下面是使用classesArray.splice()和 52 卡的一种方法。你用 Deck.drawCard() 抽一张牌。

这是一个演示。

class Card {
  constructor(suit, value) {
    this.suit = suit;
    this.value = value;
  }
}

class Deck {
  constructor() {
    const suits = ["H", "D", "S", "C"];
    const values = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"];
    this.cards = [];
    suits.forEach(suit =>
      values.forEach(value => {
        const newCard = new Card(suit, value);
        this.cards.push(newCard);
      })
    );
  }
  drawCard() {
    if (!this.cards.length) return false;
    const cardIndex = Math.floor(Math.random() * this.cards.length);
    return this.cards.splice(cardIndex, 1)[0];
  }
}
于 2020-05-20T13:48:06.630 回答