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

ブラックジャックってどんなゲーム?
ブラックジャック(BlackJack)はトランプを使用したカジノゲームの1種です
カードの点数を21を超えない範囲でディーラーと競います
複数プレイヤーが同時に参加する場合もありますが、プレイヤー同士が競う事はありませんので、ゲームとしてはあくまで1対1の勝負となります
基本ルール
ブラックジャックは、プレイヤーとディーラーの1対1の対戦ゲームです
カードの合計点数の高い方が勝利となりますが、21を超えてはいけません
使用するカードはジョーカーを除く52枚となります
2~10までの数字カードはそのままの数字が点数になります
J、Q、Kはすべて10点として計算します
Aは1点もしくは11点の好きな方で計算する事ができます
カード2枚で21点になる場合を「ブラックジャック」と呼び、3枚以上で21点になった場合より強いと判定します
プレイヤーが勝利した場合、ベット額と同額をディーラーから受け取ります
逆にディーラーが勝利した場合は、ベット額は没収されます
また、プレイヤーがブラックジャックとなった場合は、ベット額の1.5倍を受け取る事ができます
ゲームの進行
では、ブラックジャックのゲームの流れです
色々なやり方がある様ですが、今回は下記の通りとします
- 初めに、プレイヤーがベット(掛け金)を決める
- ディーラーはプレイヤーとディーラーに2枚ずつカードを配る
- ディーラーに配ったカードは1枚は伏せる
- プレイヤーはHit(カードを追加で1枚引く)かStand(勝負をする)かを指定
- Hitした場合はディーラーはプレイヤーにカードを1枚配る
- Hitは何枚でも行う事ができるが、点数が21を超えた場合はBustとなり負け
- 21を超えずにStandした場合は、ディーラーは伏せカードを表に向ける
- ディーラーは点数が17を超えるまでHitする
- 21を超えたらBustとなりプレイヤーの勝ち
- 17を超えたらStandする
- 双方の点数を比較し、大きい方が勝ち(同点は引き分け)
特殊ルール
ブラックジャックにはいくつかの特殊ルールが存在しています
今回は下記の特殊ルールのみ対応します
- Double(ダブル)
-
BET額を倍にすることができます
プレイヤーは1枚だけHitし、その点数に関わらずディーラーに手番が移ります
- カードが2枚の初期状態から、1枚だけ引く事を条件に掛け金を倍にできます
- Split(スプリット)
-
最初の2枚が同数値の場合に、掛け金を同額追加する事で2手に分けて勝負ができます
但し、Aの場合はHitはそれぞれ1枚しかできません
- Insurance(インシュランス)
-
ディーラーがブラックジャックの可能性が高い場合の保険です
BET額の半分を追加で支払う事で、ディーラーがブラックジャックになった場合に保険額の3倍を獲得できます
- Surrender(サレンダー)
-
手札から負ける可能性が高いと判断した場合には降参できます
この場合、BET額の半分を返してもらうことができます
レイアウトの作成
では、画面レイアウトを作成していきましょう
画面内で必要な要素をピックアップします
- Coin保有数の表示
- Bet額の表示
- 次のアクションを示すメッセージ
- Playerの手札
- Splitした場合の手札
- Dealerの手札
- 手札を配るアニメーション用オブジェクト
- Splitした場合に、PlayerがHitする山を示すマーク
- 各種宣言をするボタン
- Betするボタン
- Insuranceしたことを示すメッセージ
これらの要素を組み込んでレイアウトを作成してみます
BET時の画面

DEAL時の画面

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

汎用の通知画面

汎用の選択画面

自分の点数が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ビューアで作成するのが良いのでしょう
一応、完成品を公開していますので、ご興味がありましたら是非こちらからダウンロードしてご確認ください

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください