Skip to content

[js] 第448天 用函数实现扑克牌排序 #2610

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第448天 用函数实现扑克牌排序

作者:webVueBlog

3+1官网

我也要出题

Activity

Voyzz

Voyzz commented on Jan 28, 2021

@Voyzz

$(function() {
var cardCase = new Array();
var handsCadr =new Array();

var cardColor = new Array("黑桃","红心","梅花","方块");
var cardValue = new Array("A","2","3","4","5","6","7","8","9","10","J","Q","K");

var spade = new Array();
var heart = new Array();
var club = new Array();
var diamond = new Array();

//洗牌,根据花色和牌值生成纸牌,再打乱顺序
function shuffle(cardColor,cardValue) {
    for(var i = 0; i < cardColor.length; i++){
        var number = 0;
        for (var x = 0; x < cardValue.length; x++) {
            number += 1;
            cardCase[i*cardValue.length + x] = {"color": cardColor[i],
                                                "value": cardValue[x],
                                                "number": number};
        }
    };

    cardCase = cardCase.sort(function() {
        return Math.random()>0.5?-1:1;
    });

    return cardCase;
};

//第一种排序方式:根据花色和牌面值直接将牌放入对应位置
function drawCard1(cardCase) {
    for (var y = 0; y < cardCase.length; y++) {
        switch (cardCase[y].color)
        {
        case "黑桃":
            handsCadr[cardCase[y].number-1] = cardCase[y];
            break;
        case "红心":
            handsCadr[cardCase[y].number + 12] = cardCase[y];
            break;
        case "梅花":
            handsCadr[cardCase[y].number + 25] = cardCase[y];
            break;
        case "方块":
            handsCadr[cardCase[y].number + 38] = cardCase[y];
            break;
        }
    }
};

//排序函数
function cardSort(cardNumber){
    return function(object1, object2){
        var value1 = object1[cardNumber];
        var value2 = object2[cardNumber];
        if (value1 < value2)
        {
            return -1;
        } else if (value1 > value2)
        {
            return 1;
        } else {
            return 0;
        }
    }
}

//第二种排序方式,将纸牌按照花色放入对应的数组中,再分别给每个数组排序,然后组合这些数组
function drawCard2(cardCase) {
    for (var y = 0; y < cardCase.length; y++) {
        switch (cardCase[y].color)
        {
        case "黑桃":
            spade.push(cardCase[y]);
            break
        case "红心":
            heart.push(cardCase[y]);
            break
        case "梅花":
            club.push(cardCase[y]);
            break
        case "方块":
            diamond.push(cardCase[y]);
            break
        }
    }

    spade.sort(cardSort("number"));
    heart.sort(cardSort("number"));
    club.sort(cardSort("number"));
    diamond.sort(cardSort("number"));
    handsCadr = spade.concat(heart,club,diamond);
};

//打印,在页面中输入排列好的顺序
function print() {
    for (var z = 0; z < 52; z++) {
        document.write(handsCadr[z].color + handsCadr[z].value + "<br/>");
    }
};

$(".shuffle1").click(function() {
    shuffle(cardColor,cardValue);
    drawCard1(cardCase);
    print();
});

$(".shuffle2").click(function() {
    shuffle(cardColor,cardValue);
    drawCard2(cardCase);
    print();
});

});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@Voyzz

        Issue actions

          [js] 第448天 用函数实现扑克牌排序 · Issue #2610 · haizlin/fe-interview