GameServer Docs

MOBA サーバーの仕組みと使い方

Rust の WebSocket サーバーとブラウザクライアントで動く、シンプルなリアルタイム対戦ゲームです。 このページでは、起動方法、通信の流れ、操作方法、そして動画デモをまとめています。

Overview

サーバーの仕組み

1. サーバーが権威を持つ

プレイヤーの位置、弾、HP、衝突判定はサーバー側が管理します。 クライアントは入力を送るだけで、最終状態はサーバーの `state` を受け取って描画します。

2. 60Hz のゲームループ

物理更新は `game_loop()` で 60Hz で回り、移動、衝突、画面外削除を処理します。 状態配信は `MOBA_STATE_SEND_INTERVAL_MS` で間引きできます。

3. WebSocket で同期

クライアントは `join`、`input`、`clear_participants`、`set_speed`、`set_auto_move` の JSON メッセージを送信します。サーバーは `joined` と `state` を返します。

Flow

処理の流れ

01

ブラウザ起動

HTML と JavaScript のクライアントを `http.server` で配信します。

02

WebSocket 接続

クライアントが `ws://localhost:8888` に接続し、プレイヤー参加を送ります。

03

サーバーが状態更新

入力を反映し、移動、弾の生成、衝突判定、画面外削除を行います。

04

クライアントが描画

Canvas に三角形のプレイヤー、弾、HP、プレイヤー一覧を表示します。

How To Run

起動方法

1. ゲームサーバーを起動

cd /home/oosawak/Workspace/gameserver/game/MOBA
cargo run --release --bin moba-server

待ち受け先は `0.0.0.0:8888` です。ブラウザ側の WebSocket もこのポートに接続します。

2. HTTP サーバーを起動

cd /home/oosawak/Workspace/gameserver/game/MOBA/www
python3 -m http.server 8889

ブラウザで `http://localhost:8889` を開きます。

3. プレイ開始

  • プレイヤー名を入力して「参加」を押します。
  • WASD または カーソルキーで移動できます。
  • SPACE で弾を撃ちます。

ポート一覧

  • 8888 - WebSocket ゲームサーバー
  • 8889 - ブラウザ用 HTTP サーバー

環境変数

  • MOBA_PLAYER_SPEED - 自機の速度
  • MOBA_STATE_SEND_INTERVAL_MS - 状態送信間隔

Controls

画面の使い方

プレイヤー操作

  • WASD / 矢印キー: 移動
  • SPACE: シュート
  • 自分の向きは三角形の先端で確認できます

画面右の設定

  • 入力送信間隔を調整できます
  • UI 更新間隔を調整できます
  • 自機スピードを変更できます
  • プレイヤーごとの自動移動を切り替えられます
  • 参加者クリアで全員を消せます

Demo

動画デモ

この動画は `docs/GAMESERVER001.mp4` を使用しています。GitHub Pages でも同じパスで公開できます。