1. サーバーが権威を持つ
プレイヤーの位置、弾、HP、衝突判定はサーバー側が管理します。 クライアントは入力を送るだけで、最終状態はサーバーの `state` を受け取って描画します。
Overview
プレイヤーの位置、弾、HP、衝突判定はサーバー側が管理します。 クライアントは入力を送るだけで、最終状態はサーバーの `state` を受け取って描画します。
物理更新は `game_loop()` で 60Hz で回り、移動、衝突、画面外削除を処理します。 状態配信は `MOBA_STATE_SEND_INTERVAL_MS` で間引きできます。
クライアントは `join`、`input`、`clear_participants`、`set_speed`、`set_auto_move` の JSON メッセージを送信します。サーバーは `joined` と `state` を返します。
Flow
HTML と JavaScript のクライアントを `http.server` で配信します。
クライアントが `ws://localhost:8888` に接続し、プレイヤー参加を送ります。
入力を反映し、移動、弾の生成、衝突判定、画面外削除を行います。
Canvas に三角形のプレイヤー、弾、HP、プレイヤー一覧を表示します。
How To Run
cd /home/oosawak/Workspace/gameserver/game/MOBA
cargo run --release --bin moba-server
待ち受け先は `0.0.0.0:8888` です。ブラウザ側の WebSocket もこのポートに接続します。
cd /home/oosawak/Workspace/gameserver/game/MOBA/www
python3 -m http.server 8889
ブラウザで `http://localhost:8889` を開きます。
MOBA_PLAYER_SPEED - 自機の速度MOBA_STATE_SEND_INTERVAL_MS - 状態送信間隔Controls
Demo
この動画は `docs/GAMESERVER001.mp4` を使用しています。GitHub Pages でも同じパスで公開できます。