フロントエンドプレイアブル
This commit is contained in:
149
README.md
Normal file
149
README.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# KonDiplo Front
|
||||
|
||||
外交ゲーム(Diplomacy)のWebフロントエンドアプリケーション。
|
||||
モダンなUIで、ゲームの作成・参加・命令入力・ターン処理・自動進行管理までをブラウザ上で完結できます。
|
||||
|
||||
## 主な機能
|
||||
|
||||
### 🎮 ゲーム管理
|
||||
|
||||
- **ゲーム作成**: タイトル、メモ、パスワード保護、参加人数などの設定。
|
||||
- **モード**:
|
||||
- **ソロモード**: 1人で全7カ国を操作(テストや練習用)。
|
||||
- **マルチプレイヤーモード**: 複数のユーザーで国を担当。
|
||||
- **国割り当て**: 管理者による手動選択、またはランダム割り当て。
|
||||
|
||||
### ⏱️ ターン進行管理
|
||||
|
||||
- **手動進行**: 全員が命令完了後、管理者がボタンでターンを進める方式。
|
||||
- **自動進行 (Auto Turn)**:
|
||||
- **スケジュール設定**: 毎日決まった時間(例: 0時, 12時, 18時)に自動でターンを進めることが可能。
|
||||
- **デッドライン管理**: 次の更新時間をカウントダウン表示。
|
||||
- **NPC自動処理**: 期限までに命令未提出の国や、プレイヤー不在の国(NPC)は、自動保持(HOLD)またはランダム命令が適用されます。
|
||||
|
||||
### 🗺️ マップ・UI
|
||||
|
||||
- **動的SVGマップ**: ターンごとの戦況を可視化。
|
||||
- **命令入力**: プルダウン形式で直感的に命令を作成(支援・輸送も対応)。日本語訳付き。
|
||||
- **視認性向上**:
|
||||
- **国別カラー**: 地図上の色に近いバッジ(Austria=赤, England=紫, etc.)で国名を表示。
|
||||
- **NPCバッジ**: 人間が操作していない国に🤖アイコンを表示。
|
||||
- **フェーズ表示**: ゲーム一覧で現在の時期(例: 1901年 春)を確認可能。
|
||||
|
||||
### ⚙️ ハウスルール
|
||||
|
||||
- **年数制限**: 指定年数でゲーム終了。
|
||||
- **目標SC数**: 勝利条件となるSC数(デフォルト: 18)を変更可能。
|
||||
- **スコアリング**: SC数ベース、DSS、SoSなど複数の評価方式に対応。
|
||||
- **引き分け投票**: 参加者の過半数の同意で引き分け終了。
|
||||
|
||||
---
|
||||
|
||||
## 技術スタック
|
||||
|
||||
| カテゴリ | 技術 | 解説 |
|
||||
|---|---|---|
|
||||
| **言語** | Ruby 3.x / 4.x | |
|
||||
| **フレームワーク** | Rails 8.1 | 最新のRails機能を活用 |
|
||||
| **フロントエンド** | Hotwire | Turbo + Stimulus によるSPA風体験 |
|
||||
| **CSS** | Tailwind CSS | ユーティリティファーストなスタイリング |
|
||||
| **DB** | SQLite3 / PostgreSQL | 開発はSQLite、本番はPostgreSQL推奨 |
|
||||
| **非同期処理** | **Solid Queue** | データベースベースのジョブキュー(自動ターン処理に使用) |
|
||||
| **API連携** | Faraday | 外部のDiplomacy判定ロジックサーバーと通信 |
|
||||
| **アセット** | Propshaft | 前提アセットパイプライン |
|
||||
|
||||
## アーキテクチャ
|
||||
|
||||
```
|
||||
[ ブラウザ ] ⟷ [ Rails App (KonDiplo Front) ] ⟷ [ Diplomacy API (Python/FastAPI) ]
|
||||
↕ port 8000
|
||||
[ DB (SQLite/Postgres) ]
|
||||
↕
|
||||
[ Solid Queue Worker ]
|
||||
(自動ターン処理ジョブを定期実行)
|
||||
```
|
||||
|
||||
- **Rails App**: フロントエンド表示、ユーザー管理、ゲーム進行管理、自動ターンのスケジューリング。
|
||||
- **Diplomacy API**: ゲームのコアロジック(移動判定、支援カット、撤退判定など)とマップ描画を担当。
|
||||
|
||||
---
|
||||
|
||||
## セットアップ
|
||||
|
||||
### 1. 前提条件
|
||||
|
||||
- Ruby 3.x 以上
|
||||
- Node.js (Tailwind CSS ビルド用)
|
||||
- **Diplomacy API サーバー**: 別途起動が必要です(デフォルト: `http://0.0.0.0:8000`)。
|
||||
|
||||
### 2. インストール
|
||||
|
||||
```bash
|
||||
# リポジトリのクローン
|
||||
git clone <repository_url>
|
||||
cd kondiplo_front
|
||||
|
||||
# 依存関係のインストール
|
||||
bundle install
|
||||
|
||||
# データベースのセットアップ
|
||||
# (Solid Queue 用のテーブルもここで作成されます)
|
||||
bin/rails db:create db:migrate
|
||||
|
||||
# 初期データの投入
|
||||
# ※ db/seeds.rb で管理者ユーザーのメール・パスワードを確認・変更してください
|
||||
bin/rails db:seed
|
||||
```
|
||||
|
||||
### 3. 起動
|
||||
|
||||
開発環境では `bin/dev` を使用します。これにより、Webサーバー、CSSビルド、バックグラウンドワーカーが一括で起動します。
|
||||
|
||||
```bash
|
||||
bin/dev
|
||||
```
|
||||
|
||||
- アクセス: `http://localhost:3000`
|
||||
- **注意**: 自動ターン処理を機能させるには、`bin/dev` で起動し、Solid Queueのワーカーが動いている必要があります。
|
||||
|
||||
---
|
||||
|
||||
## 使い方ガイド
|
||||
|
||||
### 自動ターン進行の設定
|
||||
|
||||
1. ゲーム作成または編集画面の「ターン進行方式」セクションへ移動。
|
||||
2. プリセットから選択するか、「カスタム」を選んで時間を入力(例: `0,12,18` = 毎日0時・12時・18時に更新)。
|
||||
3. ゲームが開始されると、設定された時刻に自動で判定処理が走ります。
|
||||
|
||||
### NPC(非参加国)の挙動
|
||||
|
||||
- 「自動処理モード」で設定可能です。
|
||||
- **HOLD**: 何もしない(全ユニット維持)。
|
||||
- **Random**: ランダムに移動・支援・輸送命令を生成して実行。
|
||||
|
||||
---
|
||||
|
||||
## トラブルシューティング
|
||||
|
||||
### サーバーが起動しない / Solid Queue エラー
|
||||
|
||||
- `relation "solid_queue_jobs" does not exist` などのエラーが出る場合は、マイグレーションが不足しています。
|
||||
|
||||
```bash
|
||||
bin/rails db:migrate
|
||||
```
|
||||
|
||||
を実行してテーブルを作成してください。
|
||||
|
||||
### 自動ターンが進まない
|
||||
|
||||
- `bin/dev` コンソールのログを確認してください。
|
||||
- `AutoTurnProcessJob` が定期的に(1分毎)実行されているか確認してください。
|
||||
- Solid Queue のワーカープロセスが立ち上がっているか確認してください(`bin/dev` で `worker` プロセスが表示されているはずです)。
|
||||
|
||||
---
|
||||
|
||||
## ライセンス
|
||||
|
||||
Private
|
||||
Reference in New Issue
Block a user