7

私は現在 iPhone ゲームをプログラミングしており、オンライン マルチプレイヤー モードを作成したいと考えています。将来、このアプリは Android 端末に移植される予定なので、ゲームサーバーをどのように作成するのだろうか?

まず、どの言語を選択すればよいですか?Objective-C と Java で書かれたプログラムの両方とサーバーが通信できるようにするにはどうすればよいですか?

では、どうすれば効果的か?クライアントでソケットを開くとよいでしょうか (2 つあります)。サーバーにはどのような情報を送信すればよいですか? クライアントに?

御時間ありがとうございます。

4

2 に答える 2

8

編集どのくらい大規模なマルチプレイヤー ゲームになりますか?

シリルさん、こんにちは。

お気づきのように、2 つの主な考慮事項が 2 つあります。

  1. サーバーに送信される情報

  2. クライアントに送信される情報

サーバーに送信される情報は、ユーザー入力の1種類だけです。そうしないと、不正なクライアントが偽のデータをサーバーに送信しようとしたときに、頭痛の種に遭遇することになります ( 「私の戦車は現在 100 000 000 の装甲を持っています」など)。

次に、クライアントに何を送信するかはあなた次第ですが、他のプレイヤーの入力のみをクライアントに送信することは完全に可能です。これは、帯域幅の使用を可能な限り最小限に抑える方法です。Blizzard のWarcraft 3のようなゲームがそうしています。おまけに、これにより小さなリプレイ ファイルが作成されます (ゲームをリプレイできるようにするために必要なのは、各プレイヤーの入力が発生した時間 (および入力) だけだからです)。

他のプレイヤーの入力のみをクライアントに送信することの欠点の 1 つは、すべてのゲームのロジックがすべてのクライアントに存在することを意味することです。一部のゲームでは、ゲームをリバース エンジニアリングして欠陥を見つけてチートを行う人がいる可能性があるため、これが問題になる場合があります。この問題は、慎重に制御されたランダム化によって軽減できます (入力 + 時間に加えて、入力 + 時間 +ランダム性を送信し、クライアントが事前にランダム性を推測できない場合。

それを行う別の方法は、サーバー側で論理計算を行うことです。次に、明らかに、サーバーの計算結果をクライアントに送信する必要があります。正しく行われれば、チート防ぎ、不正な著作権侵害が不可能になるという利点があります (たとえば、偽のライセンス キーを使用して、実体経済 (つまり、実際の Blizzard サーバー) で World of Warcraft をプレイできた人は誰もいません)。

電話ターン ベースのゲーム サーバーについて: 最も売れているターン ベースのゲームの 1 つを見てください。Uniwar を例にとると、iPhone と Android で動作します。ゲームサーバーは「もちろん」Javaで書かれています。

理解しておくべきことの 1 つは、作成しようとしているようなゲームは完全に決定論的であるということです。リプレーヤーを簡単にコーディングできない場合や、ロジック バグにつながるシナリオを簡単に再現できない場合は、間違っている。

決定論的であるということは、ランダム性のように見えるものをプレーヤーに追加できないという意味ではないことに注意してください。単純に、ランダム性も決定論的でなければならないということです (たとえば、ゲームごとに異なるシードを使用するだけでなく、プレーヤーの入力が行われる時間偽のランダム ソースとして作成)。

于 2011-02-12T17:49:48.690 に答える
3

これは、尋ねられた質問に対する少し横方向の解決策です。オプションの 1 つは、Gamooga ( http://www.gamooga.com/ ) を使用することです。これにより、サーバー側、ソケット、トランスポート ロジックなどについて心配する必要がなくなります。ゲーム ロジックに集中して開発することができます。それは必要なシステムのものよりも。

Gamooga は、ゲームで使用するリアルタイム通信プラットフォームを提供します。サーバー側のメッセージ処理スクリプトを Gamooga のクラスターにアップロードし、その iOS API をアプリで使用して、サーバー側との間でメッセージを送受信できます。サーバー側は自動スケーリングされ、Gamooga によって管理されます。SDK をダウンロードして、SDK でデモを開始できます。

開示:私はGamoogaの創設者であり、質問に関連しているためだけに返信します.

于 2012-03-12T13:16:05.493 に答える