手続き生成された2次元グラフマップ上を移動しながら、勢力(power)を奪い合って敵ボスを倒すコマンド選択式RPG(開発中)。
- シード値による決定的なマップ自動生成
- 点のランダムサンプリング(最小距離を保証)
- 最小全域木(Prim法)で連結性を保証
- 近傍エッジを追加して有機的なグラフに
- 最遠点ペアのBFSでスタート/ボスノードを配置
- ターン制のゲームループ
- ノード間を移動しながら勢力(
power)を増減させ、敵ボスを倒せばクリア、自分の勢力が尽きればゲームオーバー - 同じシード値を渡すと、マップ生成もゲーム内の乱数もすべて再現される(決定的)
- ノード間を移動しながら勢力(
npm install
npm run build
node dist/index.js [seed]
起動すると生成されたマップのテキスト表示とASCIIスキャッタープロットが出力され、続けてターンループが始まる。
- プロンプトにノードIDを入力するとそのノードへ移動(1ターン経過)
quitと入力すると終了- 隣接していないノードを指定した場合、移動は失敗するがターンは消費される
npm run dev
web/ 以下のVite製アプリが起動し、生成したマップをSVGで表示しながらそのままプレイできる。
- マップ上のノードをクリックするとそのノードへ移動(1ターン経過)
- 現在地と移動可能な隣接ノードがハイライト表示される
- 隣接していないノードをクリックした場合も移動は失敗するがターンは消費される(CLI版と同じ挙動)
- 画面右側のステータス/ログパネルにターン経過・勢力・イベントが表示され、勝敗が決まるとバナーが表示されてクリックを受け付けなくなる
- 「Regenerate」「Random seed」ボタンはマップと同時にゲームも初期化する(やり直し)
ブラウザ版は Cloudflare Workers の Static Assets として配信する(Worker スクリプトなし、dist-web/ をそのまま配信)。設定は wrangler.jsonc。
npx wrangler login # 初回のみ
npm run deploy # build:web → wrangler deploy
GitHub 連携(Workers Builds)で自動デプロイする場合は、ビルドコマンドに npm run build:web、デプロイコマンドに npx wrangler deploy を指定する。Worker 名はダッシュボード側と wrangler.jsonc の name を一致させること。
index.ts— CLIエントリポイント(マップ表示 + 対話的なターンループ)src/map/— マップ生成ロジック(点のサンプリング、MST、近傍エッジ、ノード種別割り当て)src/game/— ターン処理・勢力モデル・戦闘などゲームループのロジックweb/— ブラウザ版(Vite)。マップ表示に加え、クリックでの移動・ターン進行・勝敗表示までプレイ可能docs/specification.md— 設計仕様書
ゲームデザインの詳細は docs/specification.md を参照。勢力の更新式・コマンド体系・戦闘の仕様は現時点では暫定実装であり、今後変更される可能性がある。
現時点ではテストランナー未導入(npm test はスタブ)。