2026-10-04 ・ 使い方
ゼロサム検証、麻雀の点数移動、ポーカーのUndoとサイドポットでミスを減らすPointPia実戦運用
スコア管理では、機能の多さより「間違えたときに検知できるか」「実卓と数字がずれたときに戻せるか」が重要です。今回は既存の日曜記事で扱った機能一覧や2台運用とは切り口を変え、PointPiaに実装されている入力検証・訂正・確定処理を中心に紹介します。
1. 通常モードとゼロサムモードを使い分ける
PointPiaのゲームモードにはnormalとzero-sumがあります。得点合計が0になるゲームではzero-sumを選び、通常の加点型ゲームと入力ルールを分けられます。
2. マイナス値と小数を含むスコアを入力できる
通常スコアの入力は数値へ変換され、マイナス値や小数も扱えます。収支型ゲームや細かい得点計算でも、整数だけに制限せず記録できます。
3. ゼロサムでは合計0を検証する
zero-sumモード向けの判定では、入力値の合計が0かを確認する処理があります。浮動小数点の誤差を考慮して0.001以内を0として扱うため、単純な厳密一致より実用的です。
4. ラウンド単位でコメントを残す
Roundデータにはcommentがあり、各ラウンドに補足を保存できます。「誰がボーナスを取った」「特別ルールを適用した」といった記録を数字と一緒に残せます。
5. 間違えた通常ラウンドを削除できる
ラウンド削除APIが実装されており、誤って登録したラウンドを削除できます。合計値がおかしいと気付いたときに、追加ラウンドで帳尻を合わせず原因のレコードを取り除けます。
6. 麻雀は点数移動をfrom・to・amountで記録する
麻雀では単純な4人分の増減値だけでなく、誰から誰へ何点移動したかをMahjongTransferとして扱います。支払い関係をデータとして残せるため、ロンやツモの流れを追いやすくなります。
7. 麻雀の点数移動は不正値を保存前に弾く
点数移動は、存在するプレイヤー同士であること、支払者と受取者が同一人物でないこと、点数が正の整数であることを検証します。空配列や壊れた行も無効扱いになります。
8. 麻雀の移動結果は自動でプラス・マイナスへ変換する
点数移動を入力すると、支払者をマイナス、受取者をプラスとして各プレイヤーのスコアへ展開します。手作業で片方だけ入力して総点がずれる事故を減らせます。
9. 三麻と四麻で初期設定を分ける
三麻の初期値は35000点・返し40000点・オカ15、四麻は25000点・返し30000点・オカ20として別々のデフォルトが実装されています。人数変更時に同じ設定を使い回すミスを避けられます。
10. ウマの人数不一致を正規化する
ウマはプレイヤー人数と配列長が一致し、すべて有限数である場合だけ採用されます。不正な設定が来た場合はモードごとのデフォルトへ戻すため、壊れた設定をそのまま計算に使いません。
11. 麻雀の席順は重複を除いて正規化する
席順設定は重複を取り除き、実際の参加者だけを残して必要人数までに制限します。参加者変更後に古い名前が残るなど、設定と実データのずれを抑えます。
12. 麻雀は終了後に再オープンできる
麻雀ゲームにはfinishとreopenの操作があります。誤って対局終了にした場合でも再オープンできるため、確定操作を完全な一方通行にしない設計です。
13. ポーカーでは現在のアクター以外の操作を拒否する
ポーカーエンジンはcurrentActorIdと操作プレイヤーを照合し、手番外の操作をInvalid actorとして拒否します。複数端末で操作しても、順番を飛ばしたアクションを状態へ混ぜにくくしています。
14. CHECK・CALL・BET・RAISEを状況に応じて検証する
ベットに直面しているのにCHECKする、ベットがないのにCALLする、ベットに直面しているのにBETする、といった不正操作はエラーになります。合法アクションを状態から計算しているため、UIだけにルール判定を依存しません。
15. ディーラーは直前アクションをUndoできる
ポーカーにはディーラー専用のUndo処理があります。各アクション前の状態を保存し、入力ミスに気付いたときは直前の状態へ戻せます。
16. Undo履歴は最大50状態に制限する
ポーカーエンジンのundoStackは直近50状態までに制限されています。無制限に履歴を持ち続けず、訂正に必要な範囲を確保しつつ状態肥大化を抑えます。
17. トップアップは正の金額だけ受け付ける
ポーカーのチップ追加は0以下を拒否します。また、ハンド進行中なら即時にスタックへ加えずpendingRebuyとして保留し、次のハンド開始時に反映します。
18. メインポットとサイドポットを分けて管理する
PokerPotにはMAINとSIDEの区別があります。オールインで拠出額が異なる場合でも、単一ポットへ無理にまとめず参加資格の違うポットを分離できます。
19. ショーダウンでは各ポットの勝者資格を検証する
ポット配分時は、そのポットのeligiblePlayerIdsに含まれないプレイヤーを勝者として指定するとエラーになります。フォールド済みなど本来受け取れないプレイヤーへの誤配分を防ぎます。
20. 複数勝者には余りチップまで決定的に配分する
複数人が同じポットを分ける場合は整数除算で均等配分し、割り切れない余りはプレイヤー順に1チップずつ配ります。同じ入力なら同じ結果になるため、端数処理を人の判断に任せません。
まとめ
PointPiaの訂正機能は、単に「戻るボタンがある」というだけではありません。ゼロサム検証、麻雀の点数移動検証、ポーカーの合法アクション判定、Undo、トップアップ保留、サイドポット資格確認など、モードごとに起こりやすいミスをデータ層で防ぐ仕組みがあります。
スコアがずれたときに追加の数字で無理に合わせるのではなく、どの操作が原因かを確認して、そのモードに用意された訂正手段を使う運用にすると履歴をきれいに保てます。