0

マルチプレイヤーゲームを作り始めたのですが、経験がないのでいろいろ試してみたのですが、何かがおかしいと感じました。そのため、どのプラットフォーム/ツール/言語/技術を使用するのが最適かについてのアドバイスが本当に必要です。Photon、AppWrap、Skiller、Gamooga などは信じていません。私は、それらが大きくスケールし、価格が高すぎたり、私のニーズに対して大きすぎたりするとは思わない.

最初に、単純化されたゲーム セッション プロセスについて説明します。

  1. ゲーム セッションを開始する 3 人のプレーヤー
  2. 各プレイヤーは質問を受け取り、10 秒以内に回答する必要があります。
  3. プレイヤーが答えたとき、彼は他のプレイヤーによってすでに与えられた答えを見ることができるべきであり(もしあれば)、与えられたらすぐに答えを見ることができるべきです。基本的に、他のクライアントはリアルタイムで回答を受け取る必要がありますが、それは私たちが回答した後でのみです (チートを避けるため)。タイムアウトになった場合、答えなかった人はスコアを獲得せず、次の質問に進みます。
  4. 勝者を決定し、次の質問に進みます。N ラウンド後にゲーム セッションを終了します。

次に、考慮したいくつかの要件について説明します。

  • ゲームは iOS/Android/Web で実行する必要があります。これはHTTPベースにするしかありません。
  • 私は本当に楽しかった Google Cloud Endpoints を探しました。iOS/Android/JS SDK があり、Google Cloud Platform には Google BigQuery があり、その他多くの優れた機能があります。しかし、リアルタイムの回答配信が必要なため、それが適切かどうかはわかりません (Channel API はありますが、iOS 用のクライアント SDK はありません。人々はそれほど良くないと言っています)。
  • Then I looked for Node.js and long polling (AFNetworking on client side) but it is so hard to manage. I need to serve game state updates to clients (and I need to send deltas). That way I need to track all changes individually for each player. And when player connects I should check if there any changes already; if it is then send right away; if it isn't then listen for 'change' event and then send. In the end code looks so awkward and hard to understand and I don't know how to make it right. There is socket.io which should make things better on the server side but again no iOS SDK for client.

I don't know where to go from here. Any help would be very appreciated.

4

2 に答える 2

4

ターンベースのアーキテクチャは実際にはそれほど複雑ではありません。ラグは実際には大きな問題ではなく、データは常に送信されているわけではないからです。

2 つの Web サービスを作成します。1 つはマッチメイキング用で、もう 1 つは実際のゲームを処理するためです。

マッチメイキングは単純にプレイヤーをキューに入れ、マッチに十分な人数が揃うと、サービスはプレイヤーのグループを選択してセッション ID を割り当て、プレイヤーをゲーム サービスに渡します。

ゲームサービスでは、クライアントとサービスで扱えるものを区別することが重要です。

ゲーム サービスは、クライアントを含む各セッション ID のすべてのゲーム情報を保存します。これにより、1 つのサービスで数百のゲームを一度に簡単に管理できるようになります。プレーヤーが質問に答えると、セッション ID を使用してサーバーに要求が送信されます。サーバーは、セッション内のクライアントを繰り返し処理し、情報をクライアントに送信します。

クライアントは、ユーザーが回答するまで質問を隠すことができます。(ハッキングが心配な場合は、他の質問情報を暗号化することもできます)。

サーバーはセッションのタイマーも追跡し、タイマーが期限切れになると、すべてのクライアントに応答を送信し、それ以降の応答を無視します。過去の質問に対する回答を区別するために、丸め整数をセッションに格納し、sessionID との通信でラップすることができます。クライアントに予測用のタイマーを設定することもできますが、チートを避けるために、サーバーはタイマーに対する権限を持つ必要があります。

于 2013-05-12T16:24:01.433 に答える