JSFiddle - React, Tailwind, and code Playground

by Tommy Chen

HTML

<button id="start">開始</button>

<div id="deal">
    加牌?
    <button id="yes">是</button>
    <button id="no">否</button>
</div>

<div id="result"></div>

CSS

#deal {
    display: none;
}

JavaScript

var arr = []; // 撲克牌的陣列
var sum_a = 0; // 玩家點數
var sum_b = 0; // 莊家點數
var count = 0; // 已發牌數
var is_start = false; // 遊戲是否已開始

// 初始化牌組
for (var i = 1; i <= 13; i++){
    for (var j = 0; j < 4; j++){
        arr.push(i > 10 ? 10 : i); // J, Q, K 作十點
    }
}

// 陣列元素互換
var swap = function(arr, a, b){
    var tmp = arr[a];
    arr[a] = arr[b];
    arr[b] = tmp;
};

// 產生隨機整數
var rand = function(max){
    return parseInt(Math.random() * max);
};

// 洗牌
var shuffle = function(arr){
    for (var i = 1, len = arr.length; i < len; i++){
        var j = rand(52) % (i + 1);
        swap(arr, i, j);
    }
};

// 發牌(player 參數表示玩家是否加牌)
var deal = function(player){
    if (player){
        // 發牌給玩家
        sum_a += arr[count];
        count++;
        
        $('#result').text(sum_a);
        
        // 玩家爆點
        if (sum_a > 21){
            end('你輸了');
            return;
        }
    }
    
    // 發牌給莊家
    sum_b += arr[count];
    count++;
    
    // 莊家爆點
    if (sum_b > 21){
        end('你贏了');
    // 停止發牌,比較玩家與莊家點數
    } else if (sum_b >= 17){
        if (sum_a > sum_b){
            end('你贏了');
        } else if (sum_a == sum_b){
            end('平手');
        } else {
            end('你輸了');
        }
    }
};

// 開始
var start = function(){
    is_start = true;
    shuffle(arr); // 重新洗牌
    
    // 各發給玩家和莊家一張牌
    sum_a = arr[0];
    sum_b = arr[1];
    count = 2;
    
    $('#result').text(sum_a);
    $('#start').hide();
    $('#deal').show();
};

var end = function(text){
    is_start = false;
    
    $('#result').html(text);
    $('#start').html('重新開始').show();
    $('#deal').hide();
};

$('#start').on('click', start);

$('#yes').on('click', function(){
    deal(true);
});

$('#no').on('click', function(){
    deal(false);
});