用JavaScript生成一副牌?

时间:2015-09-24 19:04:34

标签: javascript

我目前正在尝试建立一个程序,用扑克中的各种起手来预测获胜几率。我认为表示每个Card的最佳方式是使其成为具有两个属性的对象:numbersuit。我想我应该把它添加到一个名为deck的数组中 - 但是我不确定生成这副牌的最佳方法是什么?我可以输入它们 - 或者我可以创建一个for loop来调用Card构造函数52次,但有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

只是为了好玩,因为我只是有点奇怪,我建立了一个创建卡片的小javascript,然后以随机顺序显示它们。我确实使用过jQuery,但没有必要

首先定义将存储卡片的套装,卡号和卡片阵列。 count变量用于跟踪接下来在屏幕上显示的卡片。

var suits = ["H","S","C","D"];
var numbers = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"];
var cards = [];
var count = 0;

添加随机播放和绘制按钮以及显示卡片的位置

<button id="shuffle">Shuffle</button>
<button id="draw">Draw</button>

<div id="cards"></div>

现在功能的核心,生成和洗牌

在随机播放按钮的点击事件中,我运行两个for循环,生成卡片并为卡片分配一个随机数。创建的卡片对象,存储套装,数字和1到5200之间的随机数。我选择了一个大数字来最小化获得重复数字的可能性

$("#shuffle").click(function() {
    count = 0
    cards = [];
    $("#cards").html("");
    for(s in suits) {
        var suit = suits[s];
        for(n in numbers) {
            var num = numbers[n]
            var card = {
              suit: suit,
              number: num,
              order: Math.floor(Math.random() * 5200) + 1   
            };
            cards.push(card);   
        }
    }

要对卡片进行排序,您可以使用自定义排序功能。

    cards = cards.sort(function(a,b) {
        return (a.order < b.order ? -1 : 1)
    });

最后,显示甲板上的前四个

    for(var i = 0;i < 4;i++) {
        count++;
        dispCard(i);
    }
});

我使用了一个名为dispCard的功能来显示卡

function dispCard(cardNum) {
    var i = cardNum
    var count = cardNum + 1;
    var card = cards[i];
    $("#cards").append(count + " - " + card.number + card.suit + "<br/>");   
}

绘图按钮只占用下一张卡,如果数字为52

则不执行任何操作
$("#draw").click(function() {
    if(count < 52) {
        dispCard(count);
        count++;
    }
    return false;
});

这里是working fiddle