1

私は単純なマルチプレイヤー 2D ゲーム、正確には 4 プレイヤー Pong を書いています。

ゲームの開始時 ゲームをホストするか参加するかを選択できる開始メニューがあります。4 人のプレイヤーのうちの 1 人がホストしなければならず、残りの 3 人が参加します。部屋の向こう側にいる他の 3 人の仲間に大声で叫び、私の IP とポート番号を伝えることができますが、代わりにホストを検索する方法があるかどうか疑問に思っています。私には不可能に思えます。インターネット上には何百万ものコンピューターがあり、私の電話を待っている 1 台のコンピューターをどうやって見つけることができるでしょうか。StarCraft が 90 年代半ばにそれを行っていたことを知っています。

どうすればこれを達成できるかについて、私は1つの理論を持っています。それは、SQL のようなデータベースを使用して、現在誰がホスティングしているかを追跡することです。ユーザー統計などを保持していないため、これがデータベースの唯一の使用方法です。

これを行うより良い方法はありますか?

4

4 に答える 4

3

LAN 上にいると仮定すると、UDP を使用してクライアントを検出できます。

クライアントがホストとして機能している場合、クライアントは UDP データグラムをリッスンします。検出要求を含むものを受信すると、IP、ポート、およびクライアントが必要とするその他の情報で応答します。(接続しているプレイヤー数などを含めることができます)

クライアントがクライアントとして機能している場合、「ゲームに参加」画面で検出データグラムを送信します。ホストが応答すると、選択リストに追加されます。

ユーザーがサーバーを選択したら、検出応答で受け取った IP とポートを使用して既に行っているように、IP 経由で接続します。

Lidgren ネットワーク ライブラリは、役立つ可能性のある優れた Discovery 機能を提供します。

LAN に接続していない場合は、グローバルにアクセスできる何らかの中央ディレクトリが必要になります (おそらく Web サイト上)。誰かが新しいゲームを開始すると、クライアントは IP などをディレクトリに登録します。次に、クライアントはそのサイトをポーリングしてサーバーのリストを取得し、それを使用して「ゲームに参加」画面を表示します。

サーバー/ディレクトリのアプローチは、LAN 環境でもインターネット上でも同じように機能することに注意してください。UDP は、クライアントがディレクトリ プロバイダーの知識を持っている必要がないという点で、より柔軟です。

于 2012-06-21T18:28:40.263 に答える
2

ホスティングしているブローカーと参加しているブローカーを識別するための中央ブローカーが必要です。

また、ポートを開いたり、他のファイアウォールの背後にあるリモートコンピュータ間で直接トラフィックを通過させたりすることには多くの問題があるため、ゲームトラフィックも同じホストを通過させることをお勧めします。また、トラフィックを集中管理する場合は、いくつかのチェックと不正行為に対するバランスで。

于 2012-06-21T18:23:57.917 に答える
1

これがLAN専用の場合、各クライアントがUDPブロードキャストをネットワークサブネットのブロードキャストアドレスに送信することが可能になります。

ホスト(または他のクライアント)は同じUDPポートでリッスンします。

于 2012-06-21T18:25:17.737 に答える
1

ファイルを書き込むことができるインターネット上のある種のサーバー (web/ftp) を使用します。ゲームをホストしている場合は、IP とポートをファイルに書き込みます。クライアントがゲームに参加したい場合、関数はファイルをチェックして読み取ることができます。これは頭​​に浮かぶ最初のことです。

于 2012-06-21T18:20:30.950 に答える