4

インターネットを介して通信する単純な 2 プレーヤー ゲームを作成するにはどうすればよいですか?

次の問題を解決する必要があります。

  • ルックアップまたはランデブー - 2 人のプレーヤーがお互いを見つけたいと考えています。

  • 進行中のコミュニケーション。どちらのプレイヤーも、適度に短い時間枠 (電子メール タイプのレイテンシではなく、IM タイプのレイテンシ) で、反対側に情報を配信する必要があるアクションを開始できます。

この点で、私はそれが双方向のチャットに相当すると思います。そこでは、人々はお互いを見つけ、ペアになったら相互にコミュニケーションできるようにしたいと考えています。

その他の要件:

  1. ここでは、エンドポイントが比較的最近の Windows OS であると仮定します。

  2. どちらのエンドポイント マシンもインターネットから直接アクセスできないと仮定します。これらはクライアント マシンであり、着信要求をブロックするファイアウォールの背後に隠されていると仮定します。マシンはアウトバウンド要求を行うことができます。(たとえば、HTTP経由ですが、TCPでも問題ありません)

  3. 通信は非公開にする必要があります。簡単にするために、共有シークレットが既に配置されており、エンドポイントが AES を実行できるとします。これが意味することは、仲介者がメッセージパケットを復号化する必要がないということだと思います. 復号化はエンドポイントでのみ行われます。

  4. すべてのカスタム コードは、クライアント PC でのみ実行する必要があります。

  5. 私の管理下にあるインターネットにはサーバーがないと仮定します。

  6. 無料である限り、IM サーバーなどの相互通信を促進するためにサードパーティのサーバーを喜んで使用します。カスタム コードをインストールする必要はありません。


この設計を容易にするために利用できる API は何ですか?

IM API でこれを行うことはできますか? WCF? Windows Messenger 用の WCF チャネルはありますか?

何のプロトコル?HTTP? 私はこれを「ピアツーピア」とタグ付けしましたが、事実上それを意味します。正式な p2p プロトコルに対する厳しい要件はありません。

どのメッセージ形式を使用しますか?


編集

サーバーに関する要件を明確にするために、私が望むのは NO SERVER UNDER MY CONTROL です。そして、どのサーバーにも私のカスタムコードはありません。それは「サーバーなし」と同じではありません。

このように考えてみてください。送信側と受信側で記述したカスタム コードを使用して、SMTP 経由で電子メールを送信できます。私のカスタム コードは、無料の SMTP サーバー仲介を介して接続できます。これにより、SMTP サーバーにコードをインストールする必要がなくなります。これは私が望んでいるもののようなものですが、待ち時間のために SMTP は受け入れられません。

EDIT2
これも見つけました: libpurpleのようなインスタントメッセージング用のライブラリですが、C#で書かれています


答え

IM フレームワークのライブラリを使用して、やりたいことを実行できます。Windows Live Messenger を使用してこれを行う簡単な方法の 1 つは、Messenger Activity SDKを使用することです。これは概念を証明していますが、実際には一般的な解決策ではありません。ただし、libpurple などのさまざまなメッセンジャー システムの IM ライブラリを使用したり、IRC チャネルのライブラリを使用したりすることで、同様のことが実現できます。これらすべての場合において、IM サーバーは、ファイアウォールを通過する通信インフラストラクチャとして機能します。

4

7 に答える 7

3

すべての 2 プレイヤー ゲームには、少なくとも 2 人のクライアント/プレイヤー間で通信する必要があるという基本的なニーズにより、何らかの種類のサーバー環境が必要です。各クライアント/プレーヤーは、リンクされた他のクライアントと通信するための独自のサーバーとしても機能できることに注意してください。しかし、常にすべてのクライアント/プレーヤーを監視する必要があり、他のクライアント/プレーヤーの検索を容易にする必要があるため、最初にある種のサーバー環境が必要になります。

于 2010-01-27T03:03:01.940 に答える
3

IM は間違ったツールです。代わりに、IRC チャット ルームを使用してください。

IRC チャット ルームでは、クライアントがチャット ルームに「ログイン」し、それがあなたの「プレゼンス」に使用されます。チャット ルーム内の誰でもゲームをプレイできるようになります。

それが完了すると、ゲーム インスタンスはチャット ルームを介して相互に通信します。ゲーム トラフィックには、グローバル チャネルまたは単にプライベート IRC チャネルを使用できます。

解決すべき問題:

  • まず、すべてのゲーム ステートがクライアントで共有されます。多くのゲームがこれを行っています (RTS は Age of Empires のようで、RPG は Diablo のようです)。しかし、クライアント状態はハッキングや不正行為の影響を受けやすい. それはただの真実です。ゲームが人気がある場合、ハッキングされます。

  • Ping トラフィック。基本的にはルームにログインする流れで、クライアントは「プレイ可能」モードになっています。次に、他の全員にpingを送信して、プレイできるかどうかを確認します。これは、クライアントがチャット ルームに「サインイン」するたびに発生します。その後、「フランクは新しいゲームの準備ができています」、「フランクはジョーとゲームを開始しました」などのブロードキャスト イベントにパブリック ルームを使用できます。部屋、「こんにちは、ボブです。何をしているのですか」となります。したがって、それを管理する必要があります。

  • 交通量。IRC ルームは大量のトラフィックを処理できますが、大量のトラフィックは処理できません。ほとんどは「スパム」や「フラッド」などを防ぐように設計されているため、ゲーム プレイのレートが制限される可能性があります。「チェッカー」にとっては問題ではありませんが、40 人のレイド中の「World of Warcraft」にとってはなおさらです。それはゲームデザインの問題です。

  • 利用規約。IRC プロバイダーは、「いや、それは私たちのサービスではできません」と言うかもしれません。調べていないのでわかりませんが、何か問題があるのか​​もしれません。

それ以外では、IRC は非常に適しています。多くの IRC ボット コードがネット上に出回っていますが、私はそれを使用したことがありません。

于 2010-01-27T04:53:35.760 に答える
1

libpurpleとともに、otrそのようなアプリケーションが必要とする IM 上のプライバシーを提供できます。

于 2010-01-27T03:01:31.837 に答える
0

相反する要件がたくさんあります。ファイアウォールの背後にある両方のクライアントが着信要求をブロックしているということは、どちらのマシンもサーバーとして機能できないため、ピアツーピアを実行できないことを意味します。中央にトランスポートサーバーを配置して、各クライアントにメッセージをルーティングする必要があります。現在、サーバー要件がないため、要求していることはほとんど不可能です。

于 2010-01-27T03:06:13.667 に答える
0

無料の掲示板サーバーの1つに掲示板を設定して、プレーヤーがお互いを見つけられるようにすることができます。おそらく、プライベートメッセージを使用してIPアドレスを交換するように勧めたいと思うでしょう。次に、IPアドレスを使用して接続するプロトコルを使用します。それで頑張ってください。ファイアウォールはそれを苦痛にします。

次に、もちろん、ペアの一方のマシンがサーバーとして機能し、もう一方のマシンがクライアントとして機能する必要があります。ソフトウェアには、両方のコードセットが含まれている必要があります。私はそのようなゲームを書きましたが、通信コードが少し混乱していることがわかります。

コミュニケーションを促進するためのWebサービスを作成した場合、あなたは人生ではるかに幸せになるだろうと今あなたに言うことができます。ただし、そのためのサーバーが必要になります。

幸運を。あなたはそれを必要とするでしょう。

または、MicrosoftMessengerなどのIMクライアント用のゲームを作成することもできます。私はそのゲームを見たことがあるので、それができることを知っています。

于 2010-01-27T03:14:30.037 に答える
0

ファイアウォールの制約により、ピア ツー ピアが無効になっています。いずれにしても、これはディレクトリ サービスでは簡単には機能しません。

私が使用する次の最も簡単な方法は、非常に単純な CGI サーバー スクリプトを、非常に安価な多数の Web ホスティング サイトの 1 つに配置することです。あなたはこの道を行きたくないようです。何か特別な理由がありますか?100 行のコードと非常に安価なサーバーで、求めているすべての機能とそれ以上の機能が得られます。

ある種のサードパーティのチャット ライブラリに接続できると思います。現在の IM プロトコルについてはわかりませんが、古き良き IRC とゲーム用の別のチャネルが機能します。FTP を使用して何かをまとめることができます。無料のブログ サイトの BLOG コメントも機能します。問題はなぜですか?

これらはすべてクラッジです。彼らは鈍く、洗練されておらず、スケーリングが不十分な方法で仕事を成し遂げます。

Web サーバー ソリューションを再考することをお勧めします。

于 2010-01-27T04:08:53.770 に答える
0

誰かが言ったように、2 人のプレイヤーの間に仲介サーバーがない場合、まだそうすることができないかもしれません。サード パーティのサーバーを使用してもよろしいので、 Google App Engine + XMPP over HTTPを使用してシステムを構築することをお勧めします。インターネット上およびファイアウォールの背後でうまく機能します。それでも無料です (システムが GAE クォータを超えない限り)。

于 2010-01-27T03:30:45.477 に答える