0

私は Java にまったく慣れておらず、ネットワーキングを始めたばかりなので、ばかげた質問をしてしまうことをあらかじめお詫びします。プレーヤー (またはボット) がアイテムを見つけて終了するまでマップ内を移動できる基本的なゲームがありますが、ネットワークを使用して、プレーヤーとボットが同じマップで同時にプレイできるようにしたいと考えています。サーバ。

私は5つのクラスを持っています:

  • GameRules - ゲームのロジック/ルールを制御します
  • マップ - マップが含まれています。
  • Player - プレーヤーを表します。
  • ボット - ボットとしてゲームをプレイします。
  • PlayGame - CLI を介してゲームとの対話を制御します。

GameRules と Map がサーバー側にあり、PlayGame がクライアント側にあると確信していますが、Bot と Player クラスがどこにあるのかわかりません。また、GameRule と Map を 1 つのクラスにマージするか、各クラスにソケットを配置しますか?

どうもありがとう。

4

2 に答える 2

0

ビジネス ロジックの複雑さと必要な同期タイミングに応じて、ほとんどすべてをクライアント レベルに保持し、サーバーを更新のブローカーとして使用することは完全に可能です。2 人用のオンライン チェス ゲームを想像してみてください。ルールは非常に標準的で、タイミングは単純に行ったり来たりするだけなので、このゲームの「サーバー」は、1 人のプレイヤーから別のプレイヤーにそれぞれの動きを前後に渡すだけで済みます。おじいさんのチェスのマッチのメールをソケットに置き換えたようなものです。各 (クライアント) 側は、移動を処理する方法と、どの新しい移動が有効かを正確に認識しています。

于 2013-03-13T08:38:13.440 に答える
0

クライアント サーバー ゲームのほとんどのモデルは、クライアントとサーバーの両方に常駐する必要があります。

  • クライアントには、保持しているデータを視覚化するためのモデルが必要です。
  • サーバーは、ビジネス ロジックに従ってそれらを変更する必要があります。その後、中間結果がクライアントに送信され、モデルが更新されます。サーバーは、ゲームの状態を変更できる唯一のノードであることによって、ゲームの状態の一貫性を維持することがその存在理由であるため、これを行う必要があります。

すべてのモデルをクライアントに保持しようとすることはいつでもできますが、N 個のクライアントでゲームを作成したいときにどのようなコーディングの恐怖に陥るか想像してみてください。それらはすべて一貫した状態を持っている必要があります。1 つのノード (サーバー) が決定を下し、他のノードが指示に従う必要がある方がはるかに安全です。

リアルタイム ゲームなどのより高度な実装では、クライアントはクライアントとサーバーの遅延を隠すためにいくつかの予測動作も実装することに注意してください。これにより、ゲームの状態が一時的に変更されますが、サーバー コマンドは常にクライアントの決定を無効にします。また、サーバーから以前の「移動」の確認をまだ受け取っていない場合でも、クライアントが常にプレイを続けることができるようにクライアントをコーディングすることもできます。サーバーによって拒否されました。

于 2013-03-08T13:40:15.067 に答える