← トップページに戻る

異世界シューティングの記録
— ドキュメント・デプロイ・全画面・異世界ポイント連携

テスト環境向け縦スクロールシューティング「異世界シューティング」について、仕様ドキュメントと変更記録の相互リンクデプロイに含まれる範囲全画面レイアウトに加え、ゲーム終了時の得点を異世界ポイント(保有・累計)へ反映し、既存のポイントランキングに載せる実装までを本記事でまとめます。ルール・定数の一覧はリポジトリ内 test/game-isekai-shooting/README.md を正とします。

1. ドキュメントの役割分担と相互リンク

次の3つが役割を分け、Markdown 同士で行き来できるようにしてあります。

  • test/game-isekai-shooting/README.md … 仕様・実装メモ(URL・ルート、操作、敵/障害物/ボス、主要定数、ポイント API・環境変数、関連ファイル一覧など)。
  • docs/isekai-shooting-fullscreen-record.md … 全画面ボタン、黒背景、#isekai-fs-target とヘッダー DOM の分離、resize と Fullscreen API の扱いなど。
  • test/README.md … テストフォルダ索引として、上記 README と全画面記録へのリンク。

本番サイト上ではリポジトリパスをそのまま開けないため、開発用ワークスペースで該当ファイルを参照してください。デプロイバンドルに docs/ が含まれる場合は、サーバー上の Markdown も読めます。

2. デプロイ(build_deploy_bundle.ps1)に含まれるもの

プレイとポイント連携に必要な実装はデプロイ対象に含めます。

  • app.py/test/game-isekai-shooting/ および /test/game-isekai-shooting/api/award-points(POST)。
  • templates/game_isekai_shooting.html(加算 API 用のスクリプト変数を含む)。
  • static/js/isekai-shooting.js … ゲームオーバー時の得点送信(ログイン時のみ)。
  • static/css/main-layout.css … レイアウト集約方針に沿ったスタイル。
  • test/card-assetstest/game-card-mobile … カード画像参照。
  • users_storage.pyadd_fantasy_points および累計取得ヘルパ(異世界衰弱と共用)。

test/game-isekai-shooting/README.md だけのフォルダがバンドルに明示コピーされていない場合は、サーバーに仕様書の Markdown だけ置きたいときにバンドル手順の追加が必要です。ゲームの実行自体には直接は影響しません。

3. 全画面・レイアウトの要点(要約)

  • 全画面ボタンはゲーム枠内・右上に重ね、キャンバス高さ計算とずれにくくしている。
  • requestFullscreen の対象は #isekai-fs-target。ページ用ヘッダーは全画面レイヤに乗らないよう分離(詳細は docs/isekai-shooting-fullscreen-record.md)。
  • 見た目の集約は main-layout.css を主とする。

4. 異世界ポイント・ランキング連携

ゲームオーバー時、ログイン済みの場合のみクライアントが POST /test/game-isekai-shooting/api/award-points に JSON {"score": <整数>} を送ります。サーバーは users_storage.add_fantasy_points により、保有ポイントfantasy_points)と累計獲得fantasy_points_earned_total)の両方に同じ加算量を反映します(異世界衰弱の試合終了時加算と同じストア)。

ランキング表示は既存の ポイントランキングget_fantasy_ranking)をそのまま利用します。シューティング由来の付与も、衰弱由来と合算された値が表示されます。

5. サーバー換算と軽い濫用対策

付与量はクライアントが直接「最終ポイント」を指定できないよう、サーバー側で次のように決めます(詳細は README の表)。

  • 換算 … 生スコアに ISEKAI_SHOOTING_POINT_RATE(既定 1)を掛け、ISEKAI_SHOOTING_MAX_SCORE_PER_RUN1 回あたりの加算上限。
  • クールダウン … 加算成功後、同一ユーザーは ISEKAI_SHOOTING_COOLDOWN_SEC 秒(既定 3)のあいだ再付与しない。連打・再送の抑制。
  • 日次上限(UTC)ISEKAI_SHOOTING_DAILY_POINTS_CAP で、ユーザーごと・UTC の日付ごとにシューティング API 経由の加算合計を制限。

これらはプロセス内メモリで保持するため、サーバー再起動でリセットされ、複数ワーカーでは共有されません。「やらないよりマシ」程度の前提です。

改ざんについて … 換算をサーバーに置いても、生スコアそのものを偽装して送る行為は別問題です。換算だけで「大幅に防げる」わけではなく、本記事では教育目的で「換算と上限・レート」の組み合わせに留めています。厳密なプレイ証明にはサーバー権威のゲーム状態などが必要になり、別レイヤの話になります。

6. サイト内での遊び方・ランキング

ゲームは左メニュー「テスト環境」→「異世界シューティング」(/test/game-isekai-shooting/)。

ポイントランキングは ポイントランキング を参照してください(保有/累計の表示形式は既存どおりです)。

7. 本記事の位置づけ

左メニュー「サイト」の「異世界シューティングの記録」は、ドキュメント・デプロイ・全画面に加え、異世界ポイント連携とサーバー側の換算・軽い制限をまとめた記事です。細かな定数・環境変数の一覧は test/game-isekai-shooting/README.md を正として更新します。

8. 追記(追加履歴)

【追記】2026-03-23(異世界ポイント連携・サーバー換算・考察の整理)

  • ランキングへの反映 — ゲームオーバー時にログイン済みユーザーへ、シューティングの得点をそのまま換算対象として add_fantasy_points し、保有・累計の両方へ加算。ランキングは /test/game-card-fantasybattle/ranking.html の既存実装を利用。
  • サーバー換算ISEKAI_SHOOTING_POINT_RATEISEKAI_SHOOTING_MAX_SCORE_PER_RUN で付与量をサーバーだけが決定。レスポンスに raw_score / points_from_server / added を含め、実際に加算されたのは added
  • クールダウン・日次上限ISEKAI_SHOOTING_COOLDOWN_SECISEKAI_SHOOTING_DAILY_POINTS_CAP(UTC 日付)。プロセス内メモリのため再起動でリセット。
  • 改ざん対策の位置づけ(説明) — 換算式をサーバーに置くことは「付与ルールの統一」には効くが、偽の生スコア送信そのものは別問題である旨を、サイト記事として整理した。

【追記】2026-03-24(ページ分離・ランキング導線・敵サイズ・ボス体力スケール・記録ドキュメント)

  • 異世界衰弱ページとの分離 — 異世界衰弱のテンプレート(game_fantasybattle.html)下部にあった異世界シューティングの埋め込み(キャンバス・isekai-shooting.js)を削除。シューティングは専用ページ/test/game-isekai-shooting/)のみでプレイする方針に統一。衰弱ページ専用だった main-layout.css の埋め込み用セレクタも削除。
  • ポイントランキングへの導線 — 異世界衰弱ロビー行のリンク文言を「ポイントランキング」に揃えた。異世界シューティング専用ページのメイン行右端にも、同じ lobby-ranking-link スタイルで「ポイントランキング →」(url_for('test_fantasy_battle_ranking_page'))を配置(lobby-status-row--ranking-only で右寄せ)。
  • ランキングページの戻る操作 — ランキング表示ページの先頭リンクを、特定ゲーム URL ではなく history.back() とし、表示は「← 前のページに戻る」(button.back-link)。
  • 敵(クローバー/スペード)のサイズ — 自弾が当たる敵カードは中・大の2段階のみ。中は自機ヘッドと同じ表示幅、大はその 1.5 倍。ハートアイテムのスケールは従来どおり。詳細は test/game-isekai-shooting/README.md の敵の行と定数一覧。
  • デバッグ計装の削除isekai-shooting.js にあったレイアウト用 HTTP ingest およびスポーン計測用の一時 fetch を削除済み。
  • ボス戦の体力スケール — 出現間隔はスコア 500 点ごとBOSS_INTERVAL_SCORE)のまま。撃破に必要な自弾ヒット数は 1 体目 500、2 体目 700、3 体目 900 … と、出現回数に応じて前回比 +200BOSS_HP_BASE + bossWaveIndex × BOSS_HP_PER_WAVE_INCREMENT)。
  • セッション記録(Markdown) — 上記の経緯を docs/session-changes-2026-03-23-fantasy-isekai-nav-and-split.md に整理。test/game-isekai-shooting/README.md および docs/isekai-shooting-fullscreen-record.md から相互参照可能。

← 立ち上げストーリー
← プログラム構築の記録
← デプロイの記録
← ボタン1つデプロイの記録
← デプロイでまたハマった話
← ログイン設定の記録
← 改善記録
← ファイル紹介の使い方
← OGP・SEOの記録
← 統合ログインの設計・経緯
← Search Console・サイトマップ
← 環境変数・.env の管理
← Git 入門・インストール
← インストール後に Git で行う設定
← カード神経衰弱の記録
← 異世界シューティングの難易度
← 異世界戦記(全画面・迷路レイアウト)の記録
← 複数人でのゲーム進行
← 異世界衰弱(不具合の修正)
← 異世界衰弱(機能別フローチャート)
← 異世界ポイントの活用について
← 異世界ポイント市場の実装記録