javascript - 创建扑克牌

标签 javascript object

在 JavaScript 中创建对象时遇到问题。

尝试创建一副扑克牌,然后我可以随心所欲地展示它们。我很擅长用 HTML 来显示它们,只是在理解我在 JavaScript 中做错了什么时遇到了问题,它只会为我创建未定义的卡片。

(function () {

function Card (rank, suit) {

    this.rank = rank;
    this.suit = suit;

};

function Deck() {

    this.deck = new Array();

    this.makeDeck = makeDeck;
    this.shuffle = shuffle;
    this.deal = deal;
}
function makeDeck() {

    var ranks = new Array("A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
                    "J", "Q", "K");
    var suits = new Array("Clubs", "Diamonds", "Hears", "Spades");

    this.deck = new Array(52);

    var i, j;
    for (i = 0; i < suits.length; i++) {
        for (j = 0; j < ranks.length; j++) {
            this.deck[i*ranks.length + j] = new Card(ranks[j], suits[i]);
            document.write("Card made \n");
        }
    }
};

function shuffle() {
    var i, n, j, temp;
    for (i = 0; i < n; i++) {
        for (j = 0; j < this.deck.length; j++) {
            k = Math.floor(Math.random() * this.deck.length);
            temp = this.deck[j];
            this.deck[j] = this.deck[k];
            this.deck[k] = temp;
        }
    }
    document.write("Cards Shuffled");
};



function deal() {

    if (this.deck.length > 0) {
        return this.deck.shift();
    }
    else return null;
};

var deck = new Deck();

deck.makeDeck();
deck.shuffle();
for (i = 0; i < 2; i++) {
    for (j = 0; j < 5; j++) {
        var Card = new Card(deck.deal);
        var c = JSON.stringify(Card);
        document.write(this.deck[j]);
    }
}


   } ());

最佳答案

这是有问题的行:

this.deck = new Card(ranks[j], suits[i]);

this.deck 应该是包含所有卡片的数组,但使用上面的行,您每次都用一张新卡片覆盖它。

您有 2 个选择:

第一个选项

代替 this.deck = new Array(52),使用 this.deck = [],将一个空数组初始化为 this.deck。

然后使用 this.deck.push(new Card(ranks[j], suits[i])) 将卡片的所有组合推送到您的套牌中。

第二个选项

第一个选项的问题是 array.push 效率不高。阅读this获取更多信息。对于 52 大小的数组来说,这并不重要,只需将其放在桌面上以供大家引用。

或者,您可以使用 this.deck[i] = new Card(ranks[j], suits[i]) 来填充您的数组。您可以为此使用 this.deck = []this.deck = new Array(52)。两者都行。

关于javascript - 创建扑克牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248001/

相关文章:

c++ - 无法为指向类的指针数组创建访问方法

Javascript setInterval 未运行

javascript - Algolia 浏览函数使用 Javascript 返回最多 1000 条记录

javascript - 使用随机颜色对 div 的所有像素进行着色。允许使用 JavaScript

javascript - 是否可以从 JavaScript 中的对象数组中获取特定属性?

javascript - 使用映射和字符串模板文字转换对象键值

javascript - 通过具有重复键的另一个数组过滤对象数组

c++ - 替换派生对象 vector 中的对象 "no matching function to call"

javascript - chrome.tabs.create 无法正常工作?

javascript - 使用 D3 制作直方图动画