SOURCE

//每个玩家直接发17张  最后3张为底牌
//炸弹组合
var cards = {
    1:[1,2,3,4],                //A
    2:[5,6,7,8],                //2
    3:[9,10,11,12],             //3
    4:[13,14,15,16],            //4
    5:[17,18,19,20],            //5
    6:[21,22,23,24],            //6
    7:[25,26,27,28],            //7
    8:[29,30,31,32],            //8
    9:[33,34,35,36],            //9
    10:[37,38,39,40],           //10
    11:[41,42,43,44],           //j
    12:[45,46,47,48],           //q
    13:[49,50,51,52],           //k
    14:[53,54]                  //大小王
}

//每个玩家最多4个炸弹
var cardA = [];             //A玩家的牌
var cardB = [];             //B玩家的牌
var cardC = [];             //C玩家的牌
var randKey = [];           //标记哪些key已经随机过了

// console.log("A玩家的牌=============22===================="+ JSON.stringify(cards[5]));
// console.log("A玩家的牌=============33===================="+ cards[5].length);
//第一个玩家随机炸弹概率
var AzhanDanRand = Math.floor(Math.random() * (3 - 1 + 1)) + 1;
console.log(AzhanDanRand);
for(var i = 0;i < AzhanDanRand;i++)
{
    var randNum = Math.floor(Math.random() * (14 - 1 + 1)) + 1;   
    //console.log(randNum);    
    if(randKey.indexOf(randNum) == -1)
    {
        randKey.push(randNum);
        for(var j = 0;j < cards[randNum].length;j++)
        {
            cardA.push(cards[randNum][j]);
        }
    }
    else
    {

        while(1)
        {
            var randNum_ = Math.floor(Math.random() * (14 - 1 + 1)) + 1;
            if(randKey.indexOf(randNum_) == -1)
            {

                randKey.push(randNum_);
                for(var k = 0;k < cards[randNum_].length;k++)
                {
                    cardA.push(cards[randNum_][k]);
                }
                break;
            }
        }
    }
}

console.log("A玩家的牌================================="+ JSON.stringify(cardA));
var BzhanDanRand = Math.floor(Math.random() * (3 - 1 + 1)) + 1;
console.log("BzhanDanRand========================"+BzhanDanRand);
for(var i = 0;i < BzhanDanRand;i++)
{
    var randNum = Math.floor(Math.random() * (14 - 1 + 1)) + 1;   
    //console.log(randNum);    
    if(randKey.indexOf(randNum) == -1)
    {
        randKey.push(randNum);
        for(var j = 0;j < cards[randNum].length;j++)
        {
            cardB.push(cards[randNum][j]);
        }
    }
    else
    {
        while(1)
        {
             var randNum_ = Math.floor(Math.random() * (14 - 1 + 1)) + 1;
            if(randKey.indexOf(randNum_) == -1)
            {

                randKey.push(randNum_);
                for(var k = 0;k < cards[randNum_].length;k++)
                {
                    cardB.push(cards[randNum_][k]);
                }
                break;
            }
        }
    }
}
console.log("B玩家的牌================================="+ JSON.stringify(cardB));

var CzhanDanRand = Math.floor(Math.random() * (3 - 1 + 1)) + 1;
console.log("CzhanDanRand========================"+CzhanDanRand);
for(var i = 0;i < CzhanDanRand;i++)
{
    var randNum = Math.floor(Math.random() * (14 - 1 + 1)) + 1;   
   // console.log(randNum);    
    if(randKey.indexOf(randNum) == -1)
    {
        randKey.push(randNum);
        for(var j = 0;j < cards[randNum].length;j++)
        {
            cardC.push(cards[randNum][j]);
        }
    }
    else
    {
        while(1)
        {
            var randNum_ = Math.floor(Math.random() * (14 - 1 + 1)) + 1;
            if(randKey.indexOf(randNum_) == -1)
            {
                randKey.push(randNum_);
                for(var k = 0;k < cards[randNum_].length;k++)
                {
                    cardC.push(cards[randNum_][k]);
                }
                break;
            }
        }
    }
}
console.log("C玩家的牌================================="+ JSON.stringify(cardC));
var disCountA = 17 - cardA.length;
var disCountB = 17 - cardB.length;
var disCountC = 17 - cardC.length;
console.log("disCountA---------------------------------"+ disCountA);
console.log("disCountB---------------------------------"+ disCountB);
console.log("disCountC---------------------------------"+ disCountC);
console.log("三个玩家总炸弹牌个数---------------------------"+ ( cardA.length + cardB.length + cardC.length));

var tmpCard = [];
for(var i = 1;i <= 14;i ++)
{
    if(randKey.indexOf(i) == -1)
    {
        for(var k = 0;k < cards[i].length;k++)
        {
            tmpCard.push(cards[i][k]);
        }
    }
}

for (var i = 0; i < tmpCard.length - 2; i +=2 ){
    var randIndex = i + Math.floor(Math.random() * (tmpCard.length - i));
    var temp = tmpCard[i];
    tmpCard[i] = tmpCard[randIndex];
    tmpCard[randIndex] = temp;
}

console.log("tmpCard=================1================"+ JSON.stringify(tmpCard));
console.log("tmpCard=================2================"+ tmpCard.length);
var tmpCardsNew = [];
var idx = 0;
//塞A的牌
for(var i = 0; i < cardA.length;i++)
{
    tmpCardsNew.push(cardA[i]);
}
//补齐A的差牌
for(var i = 0; i <disCountA;i++)
{
    tmpCardsNew.push(tmpCard[idx]);
    idx++;
}

//B玩家的牌
for(var i = 0; i < cardB.length;i++)
{
    tmpCardsNew.push(cardB[i]);
}

//补齐B的差牌
for(var i = 0; i <disCountB;i++)
{
    tmpCardsNew.push(tmpCard[idx]);
    idx++;
}

//c玩家的牌
for(var i = 0; i < cardC.length;i++)
{
    tmpCardsNew.push(cardC[i]);
}

//补齐C的差牌
for(var i = 0; i <disCountC;i++)
{
    tmpCardsNew.push(tmpCard[idx]);
    idx++;
}

tmpCardsNew.push(tmpCard[tmpCard.length -1]);
tmpCardsNew.push(tmpCard[tmpCard.length -2]);
tmpCardsNew.push(tmpCard[tmpCard.length -3]);
console.log("tmpCardsNew=================1================"+ JSON.stringify(tmpCardsNew));
console.log("tmpCardsNew=================2================"+ tmpCardsNew.length);







console 命令行工具 X clear

                    
>
console