henrybobo

Lv.1 初心者
管理成員
管理員
註冊
2022-08-27
文章
271
評分
65
聲望
0
這裡先上CODE : (直接複製即可使用)

JavaScript:
var playerCards = [];
var dealerCards = [];
var playerTotal = 0;
var dealerTotal = 0;

function start() {
    // 初始化玩家和莊家的牌
    playerCards.push(getRandomCard());
    playerCards.push(getRandomCard());
    dealerCards.push(getRandomCard());
    dealerCards.push(getRandomCard());

    // 計算玩家和莊家的牌點數
    playerTotal = calculateTotal(playerCards);
    dealerTotal = calculateTotal(dealerCards);

    // 顯示玩家的牌和牌點數
    cm.sendSimple("你的牌是: " + getCardsString(playerCards) + " (點數: " + playerTotal + ")\r\n莊家的牌是: " + getCardsString(dealerCards, false) + "\r\n\r\n#b#L0#抽牌#l\r\n#L1#停止抽牌#l");
}

function action(mode, type, selection) {
    if (mode == 1) {
        if (selection == 0) {
            // 抽牌
            playerCards.push(getRandomCard());
            // 計算玩家的牌點數
            playerTotal = calculateTotal(playerCards);

            // 檢查是否爆牌
            if (playerTotal > 21) {
                cm.sendOk("你爆牌了! 你的牌點數是: " + playerTotal + "\r\n莊家的牌點數是: " + dealerTotal);
                cm.dispose();
                return;
            }

            // 顯示玩家的牌和牌點數
            cm.sendSimple("你的牌是: " + getCardsString(playerCards) + " (點數: " + playerTotal + ")\r\n莊家的牌是: " + getCardsString(dealerCards, false) + "\r\n\r\n#b#L0#抽牌#l\r\n#L1#停止抽牌#l");
        } else if (selection == 1) {
            // 停止抽牌
            while (dealerTotal < 17) {
                dealerCards.push(getRandomCard());
                dealerTotal = calculateTotal(dealerCards);
            }
            // 比較玩家和莊家的牌點數
            if (playerTotal > dealerTotal || dealerTotal > 21) {
                cm.sendOk("你贏了! 你的牌點數是: " + playerTotal + "\r\n莊家的牌點數是: " + dealerTotal);
            } else if (playerTotal == dealerTotal) {
                cm.sendOk("平局! 你和莊家的牌點數都是: " + playerTotal);
            } else {
                cm.sendOk("你輸了! 你的牌點數是: " + playerTotal + "\r\n莊家的牌點數是: " + dealerTotal);
            }

            cm.dispose();
        }
    }
}

function getRandomCard() {
    var card = Math.floor(Math.random() * 13) + 1;
    if (card > 10) {
        card = 10;
    }
    return card;
}

function calculateTotal(cards) {
    var total = 0;
    var aceCount = 0;

    for (var i = 0; i < cards.length; i++) {
        var card = cards[i];
        total += card;

        if (card == 1) {
            aceCount++;
        }
    }

    while (total > 21 && aceCount > 0) {
        total -= 10;
        aceCount--;
    }

    return total;
}


function getCardsString(cards, showFirstCard) {
    var cardsString = "";

    for (var i = 0; i < cards.length; i++) {
        if (!showFirstCard && i == 0) {
            cardsString += "X, ";
        } else {
            cardsString += cards[i] + ", ";
        }
    }

    return cardsString.substring(0, cardsString.length - 2);
}


教學說明:

這個程式碼只是一個範例,可以作為你開發自己的 MapleStory 腳本的參考。您還需要將它包裝到適當的 NPC 腳本中並將遊戲的邏輯添加到適當的位置。

首先,它定義了一些全局變量,用於存儲玩家的牌、莊家的牌和牌點數。

然後是一個 action() 函數,它是 MapleStory 腳本的主要執行部分。它首先檢查玩家是否點擊了“開始遊戲”的按鈕。如果是,則給玩家和莊家各抽兩張牌。

然後,它會檢查玩家是否點擊了“抽牌”按鈕。如果是,則給玩家再抽一張牌,並檢查玩家是否爆牌。如果爆牌,則顯示消息並結束遊戲。

如果玩家點擊了“停止抽牌”按鈕,則給莊家抽牌,直到莊家的牌點數大於等於 17。然後,它會使用 calculateTotal() 函數計算玩家和莊家的牌點數。

最後,它使用 getCardsString() 函數將玩家和莊家的牌顯示為字符串。並使用 if else 比較玩家和莊家的牌點數,並顯示結果。

還有 getRandomCard() 函數用於隨機獲取一張牌。

calculateTotal() 函數用於計算牌點數。

getCardsString() 函數用於將牌轉換為字符串。


變數:
  • playerCards: 儲存玩家的牌的陣列。
  • dealerCards: 儲存莊家的牌的陣列。
  • playerTotal: 儲存玩家牌點數的變數。
  • dealerTotal: 儲存莊家牌點數的變數。
函數:
  • action(): 這是主要的執行部分,當玩家點擊遊戲中的按鈕時,將執行不同的操作。
  • calculateTotal(): 計算牌點數。
  • getCardsString(): 將牌轉換為字符串。
  • getRandomCard(): 隨機獲取一張牌。
  • startNewGame(): 開始新遊戲。
  • playerDrawCard(): 玩家抽牌。
  • dealerDrawCard(): 莊家抽牌。
  • checkBust(): 檢查玩家是否爆牌。
  • checkWin(): 檢查玩家是否贏得遊戲。