編集どのくらい大規模なマルチプレイヤー ゲームになりますか?
シリルさん、こんにちは。
お気づきのように、2 つの主な考慮事項が 2 つあります。
サーバーに送信される情報
クライアントに送信される情報
サーバーに送信される情報は、ユーザー入力の1種類だけです。そうしないと、不正なクライアントが偽のデータをサーバーに送信しようとしたときに、頭痛の種に遭遇することになります ( 「私の戦車は現在 100 000 000 の装甲を持っています」など)。
次に、クライアントに何を送信するかはあなた次第ですが、他のプレイヤーの入力のみをクライアントに送信することは完全に可能です。これは、帯域幅の使用を可能な限り最小限に抑える方法です。Blizzard のWarcraft 3のようなゲームがそうしています。おまけに、これにより小さなリプレイ ファイルが作成されます (ゲームをリプレイできるようにするために必要なのは、各プレイヤーの入力が発生した時間 (および入力) だけだからです)。
他のプレイヤーの入力のみをクライアントに送信することの欠点の 1 つは、すべてのゲームのロジックがすべてのクライアントに存在することを意味することです。一部のゲームでは、ゲームをリバース エンジニアリングして欠陥を見つけてチートを行う人がいる可能性があるため、これが問題になる場合があります。この問題は、慎重に制御されたランダム化によって軽減できます (入力 + 時間に加えて、入力 + 時間 +ランダム性を送信し、クライアントが事前にランダム性を推測できない場合。
それを行う別の方法は、サーバー側で論理計算を行うことです。次に、明らかに、サーバーの計算結果をクライアントに送信する必要があります。正しく行われれば、チートを防ぎ、不正な著作権侵害が不可能になるという利点があります (たとえば、偽のライセンス キーを使用して、実体経済 (つまり、実際の Blizzard サーバー) で World of Warcraft をプレイできた人は誰もいません)。
電話ターン ベースのゲーム サーバーについて: 最も売れているターン ベースのゲームの 1 つを見てください。Uniwar を例にとると、iPhone と Android で動作します。ゲームサーバーは「もちろん」Javaで書かれています。
理解しておくべきことの 1 つは、作成しようとしているようなゲームは完全に決定論的であるということです。リプレーヤーを簡単にコーディングできない場合や、ロジック バグにつながるシナリオを簡単に再現できない場合は、間違っている。
決定論的であるということは、ランダム性のように見えるものをプレーヤーに追加できないという意味ではないことに注意してください。単純に、ランダム性も決定論的でなければならないということです (たとえば、ゲームごとに異なるシードを使用するだけでなく、プレーヤーの入力が行われる時間偽のランダム ソースとして作成)。