場のカードを入力した瞬間に、ベーシックストラテジーに基づく最適アクション(ヒット/スタンド/ダブル/スプリット/サレンダー)を返す、オフライン完結の判定アプリの設計書。
ブラックジャックの最適解(ベーシックストラテジー)は、自分の手札とディーラーのアップカードの組み合わせだけで機械的に決まる。つまり本質は「状態→アクション」のルックアップであり、リアルタイム性より入力の速さと判定の正確さが価値を決める。PitCall はこの一点に絞ったツールとして設計する。
対応外とする範囲も明確にしておく。ライブディーラー映像の自動認識、複数ハンドの同時管理、賭け金の実運用連携(電子決済等)は初期スコープに含めない。
自宅練習やオンラインカジノのプレイ中に、判断が正しかったかをその場で確認しながら覚える。
店舗・卓ごとにルール(デッキ数、サレンダー可否等)が異なるため、切り替えて即座に正解を引ける状態にする。
プレイヤーの手札(2〜3枚以上)とディーラーのアップカードをタップで入力し、即座に推奨アクションを1つ返す。数字入力ではなくカードランクのボタン選択(A, 2〜10, J/Q/K はまとめて「10」として扱う)にして、入力ミスを構造的に防ぐ。
戦略表は使用ルールによって一部の判定が変わるため、以下を設定画面で切り替え、判定ロジックに反映する。
基本機能とは別のモードとして、Hi-Lo方式のランニングカウント/トゥルーカウントの手動集計を補助する。カードが出るたびにタップでカウントを進め、残りデッキ数から自動でトゥルーカウントを算出し、カウントに応じたベット単位の目安(ベッティングレイシオ)を表示する。
プレイ時間、ハンド数、自分の判断とアプリ推奨が一致したかの正答率を記録し、練習の進捗を可視化する。金銭の勝敗管理は行わない(賭博の実運用支援に踏み込まないためのスコープ制限)。
推奨アクションは色でも即座に判別できるよう、実際のカジノチップの慣習色に寄せた配色を割り当てる。数字(データ)と判断(色)を分離しないことで、判定結果を一瞬で読み取れるようにする。
戦略表は「ハードハンド」「ソフトハンド」「ペア」の3系統のルックアップテーブルとして持ち、ルール設定(§3.2)ごとに差分を適用する構成にする。差分は表全体を複製せず、基本テーブル+条件付き上書きルールとして持たせることで、ルール組み合わせの増加に対してテーブル数が爆発しないようにする。
| Player \ Dealer | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | A |
|---|---|---|---|---|---|---|---|---|---|---|
| 17 | S | S | S | S | S | S | S | S | S | S |
| 16 | S | S | S | S | S | H | H | H | H | H |
| 15 | S | S | S | S | S | H | H | H | H | H |
| 13–14 | S | S | S | S | S | H | H | H | H | H |
| 12 | H | H | S | S | S | H | H | H | H | H |
| 11 | D | D | D | D | D | D | D | D | D | H |
数値の出所: 標準的な6〜8デッキ・S17ルールのベーシックストラテジー(データ構造の説明用の抜粋)。実装時は最終的にWizard of Odds等の一次情報で全マス突合し、ルールバリエーションごとに再検証する。
// hand: プレイヤー手札, upcard: ディーラーのアップカード, rules: §3.2の設定 function getAction(hand, upcard, rules): if isPair(hand) and canSplit(hand, rules): action = pairTable.lookup(hand.rank, upcard) if action is defined: return action if isSoft(hand): action = softTable.lookup(handTotal(hand), upcard) else: action = hardTable.lookup(handTotal(hand), upcard) return applyRuleOverrides(action, hand, rules) // 例: ダブル不可の局面では D → H にフォールバック
判定はテーブル参照のみで完結し、ネットワーク通信もサーバー側の状態も不要。したがってクライアント完結・オフラインファーストを基本方針にする。
戦略表・判定ロジック・画面をすべてクライアント側の静的アプリとして実装し、Service Workerでオフライン動作させる。iOSでの配布が必要になった段階でCapacitor等でラップする。プラットフォーム別に判定ロジックを二重実装しないための選択。
ルール設定・セッション記録は端末内(IndexedDB等)に保持。アカウント登録・サーバー送信は行わず、プレイ履歴という性質上プライバシーを優先する。
このアプリの価値は判定の正確さそのものなので、戦略表は実装後に自動テストで全マス検証する。ハード/ソフト/ペアの各テーブル × 主要ルールバリエーションの組み合わせについて、一次情報の戦略表と1マスずつ突合するテストケースを用意し、CIで回す。手動レビューに頼らない。
6-8デッキ・S17・DAS可の1ルールに固定し、ハンド入力→推奨アクション表示のみを実装。戦略表の正確さの検証を最優先する。
§3.2のルール設定と差分上書きロジックを実装し、複数のルールバリエーションに対応する。
Hi-Loカウント補助とベット目安表示、プレイ記録・正答率の可視化を追加する。