クリック画像の実寸表示

段ボール箱を机にした猫 ファイルメーカー(filemaker)のちらしの裏のメモ書き

TOP  >  FileMakerでカードゲームを楽しもう!(3)
作成日:2025年02月24日

FileMakerでカードゲームを楽しもう!(3)

イメージイラスト
にゃん太

どうも、にゃん太です

FileMakerでカードゲームを楽しもう!(2)の続きです

前回は「ハイアンドロー」を作りました

今回は、カードゲーム第二弾として「ブラックジャック」を作っていきましょう


ブラックジャックってどんなゲーム?

ブラックジャック(BlackJack)はトランプを使用したカジノゲームの1種です
カードの点数を21を超えない範囲でディーラーと競います
複数プレイヤーが同時に参加する場合もありますが、プレイヤー同士が競う事はありませんので、ゲームとしてはあくまで1対1の勝負となります

基本ルール

ブラックジャックは、プレイヤーとディーラーの1対1の対戦ゲームです
カードの合計点数の高い方が勝利となりますが、21を超えてはいけません
使用するカードはジョーカーを除く52枚となります
2~10までの数字カードはそのままの数字が点数になります
J、Q、Kはすべて10点として計算します
Aは1点もしくは11点の好きな方で計算する事ができます
カード2枚で21点になる場合を「ブラックジャック」と呼び、3枚以上で21点になった場合より強いと判定します
プレイヤーが勝利した場合、ベット額と同額をディーラーから受け取ります
逆にディーラーが勝利した場合は、ベット額は没収されます
また、プレイヤーがブラックジャックとなった場合は、ベット額の1.5倍を受け取る事ができます

ゲームの進行

では、ブラックジャックのゲームの流れです
色々なやり方がある様ですが、今回は下記の通りとします
  1. 初めに、プレイヤーがベット(掛け金)を決める
  2. ディーラーはプレイヤーとディーラーに2枚ずつカードを配る
  3. ディーラーに配ったカードは1枚は伏せる
  4. プレイヤーはHit(カードを追加で1枚引く)かStand(勝負をする)かを指定
  5. Hitした場合はディーラーはプレイヤーにカードを1枚配る
  6. Hitは何枚でも行う事ができるが、点数が21を超えた場合はBustとなり負け
  7. 21を超えずにStandした場合は、ディーラーは伏せカードを表に向ける
  8. ディーラーは点数が17を超えるまでHitする
  9. 21を超えたらBustとなりプレイヤーの勝ち
  10. 17を超えたらStandする
  11. 双方の点数を比較し、大きい方が勝ち(同点は引き分け)

特殊ルール

ブラックジャックにはいくつかの特殊ルールが存在しています
今回は下記の特殊ルールのみ対応します

Double(ダブル)

BET額を倍にすることができます

プレイヤーは1枚だけHitし、その点数に関わらずディーラーに手番が移ります

カードが2枚の初期状態から、1枚だけ引く事を条件に掛け金を倍にできます
Split(スプリット)

最初の2枚が同数値の場合に、掛け金を同額追加する事で2手に分けて勝負ができます

但し、Aの場合はHitはそれぞれ1枚しかできません

Insurance(インシュランス)

ディーラーがブラックジャックの可能性が高い場合の保険です

BET額の半分を追加で支払う事で、ディーラーがブラックジャックになった場合に保険額の3倍を獲得できます

Surrender(サレンダー)

手札から負ける可能性が高いと判断した場合には降参できます

この場合、BET額の半分を返してもらうことができます


レイアウトの作成

では、画面レイアウトを作成していきましょう
画面内で必要な要素をピックアップします
これらの要素を組み込んでレイアウトを作成してみます

BET時の画面
BET画面
DEAL時の画面
DEAL画面
便宜上2つに分けていますが、実際にはこれらのレイアウトをまとめて1画面で設計します
他には、メッセージ表示用にいくつかウインドウを用意します

COIN不足を示す画面
残高不足画面
汎用の通知画面
通知画面
汎用の選択画面
選択画面
自分の点数がBUSTしたことを示す画面
BUST画面
COINが0になった場合の画面
敗北画面

スクリプトの作成

では、スクリプトを書いていきます
右側の6つのボタンを押して動作させます
BET時もDEAL時も同じ位置のボタンを使用しますので、進行管理で分岐させる様に記述します
Button1~6と命名して、順番に書いていきましょう

Button1

# ################################################## # Button1の押下処理 # ################################################## If [Exact ( $$phase; "BET" )] # BET額決定phase If [global::rest > 0] # 残高ありならBET加算&残高減算 フィールド設定 [global::point; global::point + 1] フィールド設定 [global::rest; global::rest - 1] Else # 残高なし 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「残高不足」] End If Else If [Exact ( $$phase; "noHit" ) or Exact ( $$phase; "Hit" )] # phase管理 変数を設定 [$$phase; 値: "wait"] # 点数計算 スクリプト実行 [指定:一覧から; 「sub_点数計算」; 引数: ] 変数を設定 [$$point[$$target]; 値: Get ( スクリプトの結果 )] If [$$target = 1] # SPLITしているなら次に進む 変数を設定 [$$target; 値: 2] ウインドウ内容の再表示 [] Else 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_ディーラー表」; 間隔: .1] End If End If

Button2

# ################################################## # Button2の押下処理 # ################################################## ウインドウの固定 If [Exact ( $$phase; "BET" )] # BET額決定phase If [global::point > 0] # BET額があればBET減算&残高加算 フィールド設定 [global::point; global::point - 1] フィールド設定 [global::rest; global::rest + 1] End If Else If [Exact ( $$phase; "noHit" ) or Exact ( $$phase; "Hit" )] # phase管理 変数を設定 [$$phase; 値: "wait"] # 追加カードを置く位置 変数を設定 [$$position; 値: ValueCount ( $$card[$$target] ) + 3] # 次のカード レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了:オン] フィールド設定 [global::key; card::key] 変数を設定 [$$card[$$target]; 値: $$card[$$target] & ¶ & card::cardNo] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] # Hit実行 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_Hit」; 間隔: .1] End If

Button3

# ################################################## # Button3の押下処理 # ################################################## If [Exact ( $$phase; "BET" )] # BET額決定phase If [global::rest >= 10] # 残高10以上ならBET加算&残高減算 フィールド設定 [global::point; global::point + 10] フィールド設定 [global::rest; global::rest - 10] Else # 残高なし 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「残高不足」] End If Else If [Exact ( $$phase; "noHit" )] # 未Hit If [global::point > global::rest] # Doubleの為の追加BET額が不足 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「残高不足」] Else 変数を設定 [$$action; 値: "Double"] フィールド設定 [global::message[2]; "倍賭"] フィールド設定 [global::message[3]; "カード1枚追加して勝負する代わりにBET額を倍にします"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「選択」] End If Else If [Exact ( $$phase; "Hit" )] # 1枚以上Hit済み フィールド設定 [global::message[2]; "選択不可"] フィールド設定 [global::message[3]; "この宣言はHit前に行う必要があります"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] End If

Button4

# ################################################## # Button4の押下処理 # ################################################## If [Exact ( $$phase; "BET" )] # BET額決定phase If [global::point >= 10] # BET10以上ならBET減算&残高加算 フィールド設定 [global::point; global::point - 10] フィールド設定 [global::rest; global::rest + 10] Else If [global::point > 0] # BETあり フィールド設定 [global::rest; global::rest + global::point] フィールド設定 [global::point; 0] End If Else If [Exact ( $$phase; "noHit" )] # 未Hit 変数を設定 [$card1; 値: GetAsNumber ( GetValue ( $$card[2]; 1 ) )] 変数を設定 [$card2; 値: GetAsNumber ( GetValue ( $$card[2]; 2 ) )] If [$card1 <> $card2 and ( $card1 < 10 or $card2 < 10 )] # カードが同じでない フィールド設定 [global::message[2]; "選択不可"] フィールド設定 [global::message[3]; "同じ点数のカードの場合のみ実行できます"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] Else If [global::point > global::rest] # 追加BET額が不足 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「残高不足」] Else 変数を設定 [$$action; 値: "Split"] フィールド設定 [global::message[2]; "分割"] フィールド設定 [global::message[3]; "BET額と同額を追加で支払い、カードを分割して勝負できます"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「選択」] End If Else If [Exact ( $$phase; "Hit" )] # 1枚以上Hit済み フィールド設定 [global::message[2]; "選択不可"] フィールド設定 [global::message[3]; "この宣言はHit前に行う必要があります"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] End If

Button5

# ################################################## # Button5の押下処理 # ################################################## If [Exact ( $$phase; "BET" )] # BET額決定phase Else If [Exact ( $$phase; "noHit" )] # 未Hit If [Exact ( global::point[2] > 0 )] # 既に保険済 フィールド設定 [global::message[2]; "選択不可"] フィールド設定 [global::message[3]; "同じ点数のカードの場合のみ実行できます"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] Else If [Int ( global::point / 2 ) > global::rest] # 保険額が不足 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「残高不足」] Else 変数を設定 [$$action; 値: "Insurance"] フィールド設定 [global::message[2]; "保険"] フィールド設定 [global::message[3]; "BETの半額を支払い、ディーラーがBJの場合に返金を得られます"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「選択」] End If Else If [Exact ( $$phase; "Hit" )] # 1枚以上Hit済み フィールド設定 [global::message[2]; "保険適用済"] フィールド設定 [global::message[3]; "既に保険は適用されています"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] End If

Button6

# ################################################## # Button6の押下処理 # ################################################## ウインドウの固定 If [Exact ( $$phase; "BET" )] # BET額決定phase If [global::point > 0] # BETされていればフェーズを進め、初期カードを配る 変数を設定 [$$phase; 値: "start"] # メッセージの設定 フィールド設定 [global::message; "カードを配布します..."] # カードの初期化 変数を設定 [$$card; 値: ""] 変数を設定 [$$card[2]; 値: ""] 変数を設定 [$$card[3]; 値: ""] # カードの使用状況を初期化 レイアウト切り替え [「card」(card); アニメーション:なし] 検索モードに切り替え [一時停止:オフ] フィールド設定 [card::cardNo; "1...13"] エラー処理 [オン] 検索実行 [] エラー処理 [オフ] フィールド内容の全置換 [ダイアログあり:オフ; card::used: ""] # カードの取得順番を決定 フィールド内容の全置換 [ダイアログあり:オフ; card::holder: Random] レコードのソート [記憶する; ダイアログあり:オフ] レコード/検索条件/ページへ移動 [最初の] フィールド設定 [global::key; card::key] 変数を設定 [$$card[2]; 値: card::cardNo] レイアウト切り替え [「BlackJack画面」(global);アニメーション:なし] 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_初期カード」; 間隔: .1] Else カスタムダイアログを表示 ["no BET"; "BETされていません"] End If Else If [Exact ( $$phase; "noHit" )] #未Hit 変数を設定 [$$action; 値: "Surrender"] フィールド設定 [global::message[2]; "降参"] フィールド設定 [global::message[3]; "勝負前に負けを確定することで、BET額の半分が返ってきます"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「選択」] Else If [Exact ( $$phase; "Hit" )] # 1枚以上Hit済み フィールド設定 [global::message[2]; "保険適用済"] フィールド設定 [global::message[3]; "既に保険は適用されています"] 新規ウインドウ [スタイル: カード; 使用するレイアウト: 「通知」] End If

timer_初期カード

# ################################################## # 初期カードを配る # ################################################## ウインドウの固定 変数を設定 [$$timer; 値: $$timer + 1] If [$$timer = 1] # カード画像の取得 フィールド設定 [global::card4; card:cardImage] Else If [$$timer = 2] フィールド設定 [global::card4; ""] フィールド設定 [global::card4[2]; card:cardImage] Else If [$$timer = 3] # 1枚目決定 フィールド設定 [global::card4[2]; ""] フィールド設定 [global::card2[3]; card:cardImage] Else If [$$timer = 4] # 2枚目カード画像の取得 レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了:オン] フィールド設定 [global::key; card:key] 変数を設定 [$$card[2]; 値: $$card[2] & ¶ & card::cardNo] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] フィールド設定 [global::card4; card:cardImage] Else If [$$timer = 5] フィールド設定 [global::card4; ""] フィールド設定 [global::card4[2]; card:cardImage] Else If [$$timer = 6] フィールド設定 [global::card4[2]; ""] フィールド設定 [global::card4[3]; card:cardImage] Else If [$$timer = 7] # 2枚目決定 フィールド設定 [global::card4[3]; ""] フィールド設定 [global::card2[4]; card:cardImage] Else If [$$timer = 8] Else If [$$timer = 9] # ディーラー1枚目カード画像の取得 レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了:オン] フィールド設定 [global::key; card:key] 変数を設定 [$$card[3]; 値: card::cardNo] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] フィールド設定 [global::card6; card:cardImage] Else If [$$timer = 10] フィールド設定 [global::card6; ""] フィールド設定 [global::card6[2]; card:cardImage] Else If [$$timer = 11] # ディーラー1枚目決定 フィールド設定 [global::card6[2]; ""] フィールド設定 [global::card5[3]; card:cardImage] フィールド設定 [global::key; "back"] Else If [$$timer = 12] フィールド設定 [global::card6; card:cardImage] Else If [$$timer = 13] フィールド設定 [global::card6; ""] フィールド設定 [global::card6[2]; card:cardImage] Else If [$$timer = 14] フィールド設定 [global::card6[2]; ""] フィールド設定 [global::card6[3]; card:cardImage] Else If [$$timer = 15] # ディーラー2枚目設置 フィールド設定 [global::card6[3]; ""] フィールド設定 [global::card5[4]; card:cardImage] OnTimerスクリプトをインストール [] # メッセージの設定 フィールド設定 [global::message; "宣言を行なってください"] # フェーズを進める 変数を設定 [$$phase; 値: "noHit"] # ターゲット 変数を設定 [$$target; 値: 2] End If

action実行

# ################################################## # 選択ウインドウでYes選択時の動作 # ################################################## ウインドウを閉じる [現在のウインドウ] If [Exact ( $$action; "Double" )] # フェーズをHitに変更 変数を設定 [$$phase; 値: "Hit"] # Doubleフラグ 変数を設定 [$$double; 値: 1] # 追加カードを置く位置 変数を設定 [$$position; 値: ValueCount ( $$card[$$target] ) + 3] # 掛け金処理 フィールド設定 [global::rest; global::rest - global::point] フィールド設定 [global::point; global::point * 2] # 次のカード レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了:オン] フィールド設定 [global::key; card::key] 変数を設定 [$$card[$$target]; 値: $$card[$$card[$$target] & ¶ & card::cardNo]] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] # Hit実行 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_Hit」; 間隔: .1] Else If [Exact ($$action: "Split")] # フェーズをHitに変更 変数を設定 [$$phase; 値: "Hit"] # 分割 フィールド設定 [global::card1[3]; global::card2[4]] フィールド設定 [global::card2[4]; ""] 変数を設定 [$$card; 値: GetValue ( $$card[2]; 2 )] 変数を設定 [$$card[2]; 値: GetValue ( $$card[2]; 1 )] # COIN支払 フィールド設定 [global::rest; global::rest - global::point] # SPLITフラグのせtt例 変数を設定 [$$split; 値: 1] # ターゲット変更(1→2で処理する) 変数を設定 [$$target; 値: 1] Else If [Exact ($$action; "Insurance" )] # 保険適用 変数を設定 [$$insurance; 値: Int ( global::point / 2 )] フィールド設定 [global::point[2]; $insurance] フィールド設定 [global::rest; global::rest - $insurance] Else If [Exact ($$action; "Insurance" )] # 降参 フィールド設定 [global::rest; global::rest + Int ( global::point / 2 )] スクリプト実行 [指定:一覧から; 「初期化」; 引数: ] End If

timer_Hit

# ################################################## # 追加カードを配る # ################################################## ウインドウの固定 変数を設定 [$$timer; 値: $$timer + 1] If [$$timer = 1] # カード画像の取得 フィールドを名前で設定 ["global::card" & ( $$target + 2 ) & "[" & $$timer & "]"; card::cardImage] Else If [$$timer = $$position] フィールドを名前で設定 ["global::card" & ( $$target + 2 ) & "[" & $$timer - 1 & "]"; ""] フィールドを名前で設定 ["global::card" & $$target & "[" & $$timer & "]"; card::cardImage] OnTimerスクリプトをインストール [] # 点数計算 スクリプト実行 [指定:一覧から; 「sub_点数計算」; 引数: ] 変数を設定 [$$point[$$target]; 値: Get ( スクリプトの結果 )] # 21を超えていたらBUSTで負け If [$$point[$$target] > 21] 新規ウインドウ [スタイル: カード; 使用するレイアウト:「BUST」(global)] Else If [$$double] # 保険適用しているならディーラーの確認 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_ディーラー表」; 間隔: .1] Else # フェーズをHitに変更 変数を設定 [$$phase; 値: "Hit"] End If Else フィールドを名前で設定 ["global::card" & ( $$target + 2 ) & "[" & $$timer - 1 & "]"; ""] フィールドを名前で設定 ["global::card" & ( $$target + 2 ) & "[" & $$timer & "]"; card::cardImage] End If

btn_BUST

# ################################################## # BUSTウインドウのOKボタン押下時の処理 # ################################################## ウインドウを閉じる [現在のウインドウ] If [$$target = 1] # SPLITしている場合は次に進む 変数を設定 [$$target; 値: 2] ウインドウ内容の再表示 [] Else If [global::point[2] > 0] # 保険適用しているならディーラーの確認 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_ディーラー表」; 間隔: .1] Else スクリプト実行 [指定:一覧から; 「初期化」; 引数: ] End If

timer_ディーラー表

# ################################################## # ディーラーの伏せカードをめくる # ################################################## 変数を設定 [$$timer; $$timer + 1] If [$$timer = 1] # カード画像の取得 フィールド設定 [global::key; "back"] フィールド設定 [global::card5[4]; ""] フィールド設定 [global::card7; card::cardImage] Else If [$$timer = 10] フィールド設定 [global::card7; ""] フィールド設定 [global::card5[4]; card::cardImage] # 点数計算 変数を設定 [$$target: 値: 3] スクリプト実行 [指定:一覧から; 「sub_点数計算」; 引数: ] 変数を設定 [$$point[3]: 値: Get ( スクリプトの結果 )] If [$$point[3] >= 17] # ディーラーの点数が17以上ならHit終了 OnTimerスクリプトをインストール [] スクリプト実行 [指定:一覧から; 「sub_勝敗判定」; 引数: ] Else 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_ディーラーHit」; 間隔: .1] End If Else If [$$timer > 5] フィールド設定 [global::card7[11 - $$timer]; ""] フィールド設定 [global::card7[10 - $$timer]; card::cardImage] Else If [$$timer = 5] フィールド設定 [global::card7[$$timer - 1]; ""] # 次のカードを取得 ウインドウの固定 レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了: オン] フィールド設定 [global::key; card::key] 変数を設定 [$$card[3]; 値: $$card::key] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] Else If [$$timer < 5] フィールド設定 [global::card7[$$timer - 1]; ""] フィールド設定 [global::card7[$$timer]; card::cardImage]

timer_ディーラーHit

# ################################################## # ディーラーのカード取得 # ################################################## ウインドウの固定 変数を設定 [$$timer; $$timer + 1] If [$$timer = 1] # 次のカード レイアウト切り替え [「card」(card); アニメーション:なし] レコード/検索条件/ページへ移動 [次の; 最後まできたら終了: オン] フィールド設定 [global::key; card::key] 変数を設定 [$$card[3]; 値: $$card::key] レイアウト切り替え [「BlackJack画面」(global); アニメーション:なし] # 追加カードを置く位置 変数を設定 [$$position; 値: ValueCount ( $$card[3] ) + 2] # カード画像の取得 フィールド設定 [global::card6; card::cardImage] Else If [$$timer = $$position] フィールド設定 [global::card6[$$timer - 1]; ""] フィールド設定 [global::card6[$$timer]; card::cardImage] # 点数計算 変数を設定 [$$target; 値: 3] スクリプト実行 [指定: 一覧から; 「sub_点数計算」; 引数: ] 変数を設定 [$$point[3]; 値: Get ( スクリプトの結果 )] If [$$point[3] >= 17] # ディーラーの点数が17以上ならHit終了 OnTimerスクリプトをインストール [] スクリプト実行 [指定:一覧から; 「sub_勝敗判定」; 引数: ] Else 変数を設定 [$$timer; 値: 0] OnTimerスクリプトをインストール [「timer_ディーラーHit」; 間隔: .1] End If Else フィールド設定 [global::card6[$$timer - 1]; ""] フィールド設定 [global::card6[$$timer]; card::cardImage] End If

sub_点数計算

# ################################################## # 点数の計算 # ################################################## ウインドウの固定 変数を設定 [$i; 値: 1] 変数を設定 [$count; 値: ValueCount ( $$card[$$target] )] Loop [フラッシュ:常に] 変数を設定 [$card; 値: GetAsNumber ( GetValue ( $$card[$$target]; $i ) )] 変数を設定 [$A; 値: If ( $card = 1; 1; $A )] 変数を設定 [$point; 値: $point + If ( $card > 10; 10; $card )] 変数を設定 [$i; 値: $i + 1] Exit Loop If [$i > $count] End Loop 現在のスクリプト終了 [テキスト結果: Case ( $A and ( $point + 10 ) <= 21; $point + 10; $point)]

sub_勝敗判定

# ################################################## # 勝敗の判定とCOINの取得 # ################################################## ウインドウの固定 # 通常分の勝敗判定 If [$$point[2] = 21 and ValueCount ( $$card[2] ) = 2] If [$$point[3] = 21 and ValueCount ( $$card[3] ) = 2] # BJ同士で引き分け フィールド設定 [global::rest; global::rest + global::point] 変数を設定 [$message; 値: "BJ : BJで引分(払戻:" & global::point & ")"] Else # それ以外はBETの2.5倍払い戻し フィールド設定 [global::rest; global::rest + Int ( global::point * 2.5 )] 変数を設定 [$message; 値: "BJ : " & $$point[3] & " で勝ち(払戻:" & Int ( global::point * 2.5 ) & ")"] End If Else If [$$point[3] = 21 and ValueCount ( $$CARD[3] ) = 2] # ディーラーだけがBJの場合は負け 変数を設定 [$message; 値: $$point[2] & " : BJ で負け"] Else If [$$point[2] > 21] # プレイヤーBUSTは負け 変数を設定 [$message; 値: "BUSTで負け"] Else If [$$point[3] > 21] # ディーラーBUSTは勝ち フィールド設定 [global::rest; global::rest + global::point * 2] 変数を設定 [$message; 値: "ディーラーBUSTで勝ち(払戻:" & global::point * 2 & ")"] Else If [$$point[2] > $$point[3]] # プレイヤー勝利でBETの2倍払い戻し フィールド設定 [global::rest; global::rest + global::point * 2] 変数を設定 [$message; 値: $$point[2] & " : " & $$point[3] & " で勝ち(払戻:" & global::point * 2 & ")"] Else If [$$point[2] = $$point[3]] # 引き分け(BET額戻し) フィールド設定 [global::rest; global::rest + global::point] 変数を設定 [$message; 値: $$point[2] & " : " & $$point[3] & " で引分(払戻:" & global::point & ")"] Else 変数を設定 [$message; 値: $$point[2] & " : " & $$point[3] & " で負け"] End If # SPLIT分の勝敗判定 If [$$split] If [$$point[1] = 21 and ValueCount ( $$card[1] ) = 2] If [$$point[3] = 21 and ValueCount ( $$card[3] ) = 2] # BJ同士で引き分け フィールド設定 [global::rest; global::rest + global::point] 変数を設定 [$message; 値: "BJ : BJで引分(払戻:" & global::point & ")"] Else # それ以外はBETの2.5倍払い戻し フィールド設定 [global::rest; global::rest + Int ( global::point * 2.5 )] 変数を設定 [$message; 値: "BJ : " & $$point[3] & " で勝ち(払戻:" & Int ( global::point * 2.5 ) & ")"] End If Else If [$$point[3] = 21 and ValueCount ( $$CARD[3] ) = 2] # ディーラーだけがBJの場合は負け 変数を設定 [$message; 値: $$point[1] & " : BJ で負け"] Else If [$$point[1] > 21] # プレイヤーBUSTは負け 変数を設定 [$message; 値: "BUSTで負け"] Else If [$$point[3] > 21] # ディーラーBUSTは勝ち フィールド設定 [global::rest; global::rest + global::point * 2] 変数を設定 [$message; 値: "ディーラーBUSTで勝ち(払戻:" & global::point * 2 & ")"] Else If [$$point[1] > $$point[3]] # プレイヤー勝利でBETの2倍払い戻し フィールド設定 [global::rest; global::rest + global::point * 2] 変数を設定 [$message; 値: $$point[1] & " : " & $$point[3] & " で勝ち(払戻:" & global::point * 2 & ")"] Else If [$$point[1] = $$point[3]] # 引き分け(BET額戻し) フィールド設定 [global::rest; global::rest + global::point] 変数を設定 [$message; 値: $$point[1] & " : " & $$point[3] & " で引分(払戻:" & global::point & ")"] Else 変数を設定 [$message; 値: $$point[1] & " : " & $$point[3] & " で負け"] End If End If # 保険適用時の払い戻し If [global::point[2] > 0] If [$$point[3] = 21 and ValueCount ( $$card[3] ) = 2] # ディーラーがBJなら、保険額の3倍払い戻し フィールド設定 [global::rest; global::rest + global::point[2] * 3] 変数を設定 [$message; 値: $message & ¶ & "保険認定(払戻:" & GetAsText ( global::point[2] * 3 ) & ")"] End If End If If [global::rest > 0] フィールド設定 [global::message[2]; "勝敗"] フィールド設定 [global::message[3]; $message] 新規ウインドウ [スタイル: カード; 使用するレイアウト:「通知」(global)] Else フィールド設定 [global::message[3]; "COINがなくなりました。¶またの挑戦をお待ちしています。"] レイアウト切り替え [「敗北」(global); アニメーション:右からスライドイン] End If

以上です
もうちょっと効率的な記述もできそうですが、とりあえず動いているので良しとします

BlackJack完成

これで、ブラックジャックは完成です
動作確認も、、、うん、問題なく動きますね
オブジェクトの疑似アニメーション処理はそこそこ重いので、スペックの低いPCではカクツキが目立ってしまうので、実際にはWEBビューアで作成するのが良いのでしょう
一応、完成品を公開していますので、ご興味がありましたら是非こちらからダウンロードしてご確認ください

メモ書き終了の案内イラスト

以上で今日のメモ書きは終了です

内容はいかがでしたか?

もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください

ご連絡フォーム