RPGツクールMZブラックジャック

RPGツクールMZ素材トランプを使って作ったブラックジャックです。

ブラックジャックのルールと大体同じですが、スプリットなどの特別なルールはありません。

【ブラックジャックの作り方】
Image

1ページ目のカードをシャッフルして変数に入れるのは、RPGツクールMZ素材トランプの1ページ目スクリプトと同じです。

Image

2ページ目でプレイヤーに2枚カードを配ります。

// デッキを読み込む
const deck = $gameVariables.value(変数ID);
let playerTotal = 0;

// カードの値を取得する関数
const getCardValue = (card, currentTotal) => {
if (["J", "Q", "K"].includes(card.value)) return 10;
if (card.value === "A") return currentTotal <= 10 ? 11 : 1;
return parseInt(card.value);
};

// 2枚のカードを配る
for (let i = 0; i < 2; i++) {
const card = deck.pop();
playerTotal += getCardValue(card, playerTotal);

// カードの画像を表示
$gameScreen.showPicture(i + 番号, card.suit + card.value, 0, x座標 + (50 * i), y座標, 100, 100, 255, 0);
}

// 結果を表示し、変数を更新
$gameMessage.add("プレイヤーの合計は " + playerTotal + " です。");
$gameVariables.setValue(変数ID, deck);
$gameVariables.setValue(変数ID, playerTotal);

ブラックジャックのルールに基づいてJ~Qは数値を10にし、Aは合計で10を超えない場合は11、超える場合は1の数値にします。

Image

プリシア(ディーラー)のスクリプトもプレイヤーと同じです。
変数や座標、画像の番号を変えているだけです。

Image

ここまでのプレイでどちらかが合計が21になっていたら終了処理をします。
21になっていなかったらカードを引いた数を変数ID4に入れて3ページ目に飛ばします。

Image
3ページ目の最初にバースト処理を入れて、もう1枚カードを引くかどうかを問います。
(ヒットやスタンドにあたります)

Image

「はい」を選択した場合、カードを引いた回数を+1してプレイヤーにカードを1枚配ります。

// 変数の読み込み
const drawnCardCount = $gameVariables.value(変数ID);
let playerTotal = $gameVariables.value(変数ID);
const deck = $gameVariables.value(変数ID);

// カードの値を取得する関数
const getCardValue = (card, currentTotal) => {
if (["J", "Q", "K"].includes(card.value)) return 10;
if (card.value === "A") return currentTotal <= 10 ? 11 : 1;
return parseInt(card.value);
};

// カードを引く
const card = deck.pop();
playerTotal += getCardValue(card, playerTotal);

// カードの画像を表示
$gameScreen.showPicture(1+drawnCardCount,card.suit + card.value,0,x座標+(50*drawnCardCount),y座標,100,100,255,0);

// 合計点数を表示
$gameMessage.add("プレイヤーの合計は " + playerTotal + " です。");

// 更新したデッキ、合計点数を保存
$gameVariables.setValue(変数ID, deck);
$gameVariables.setValue(変数ID, playerTotal);

2ページ目のスクリプトとほとんど変わりません。

Image

プリシアは合計が17以下の場合にスクリプトを実行します。

Image

「いいえ」を選択した場合、プレイヤーのスクリプト実行はありませんが、プリシアは合計が17以下の場合にスクリプトを実行します。

Image

最後に判定処理をします。

// 合計点数を読み込む
let playerTotal = $gameVariables.value(変数ID);
let dealerTotal = $gameVariables.value(変数ID);

// 結果を入れる変数
let result;

if (playerTotal > 21) {
result = "プレイヤーがバースト";
} else if (dealerTotal > 21) {
result = "ディーラーがバースト";
} else if (playerTotal > dealerTotal) {
result = "プレイヤーの勝利";
} else if (playerTotal < dealerTotal) {
result = "ディーラーの勝利";
} else {
result = "引き分け";
}

// 結果を保存
$gameVariables.setValue(変数ID, result);

結果を変数IDに入れて、後でイベントコマンドで出すと楽と言うことに気付きました…!

これで大まかなブラックジャックが作れるかと思います。

もっと細かいルールなどがあるのであとはお好みで調整ください。

コメント