ネットワークゲーム作成入門
文章:.1064
日付:2004/11/14

目次
1.はじめに
2.IPアドレスとポート番号
3.ネットワークシステム
4.セッション






1.はじめに
今回はネットワークゲームについて解説します。

参考ページ
「エイバース」(メニューからLecture→過去の講座→ネットワークゲーム技術)
「SMITH PROJECT」(メニューからHSP TECH→ネットワークゲーム製作講座)
「DirectX ネットワークゲーム入門」




2.IPアドレスとポート番号
ネットワークにつなぐ、というとなんとなく難しそうなイメージがあります。
でも、実は「IPアドレス」と「ポート番号」を指定するだけなのです。

それが何か分からないという人のために、簡単に説明をしておきます。

IPアドレスというのは、「ネットワーク上の住所」です。
ネットワーク上には無数のコンピュータがあるため、どのコンピュータにつなぐのかを特定しなければいけません。
それがIPアドレスです。

ここで実験(というほどのものではないけど...)をしてみましょう。
2000/XPであればコマンドプロンプト、9xであればDOSプロンプトを開いてみてください。
(Windowsメニューから、ファイル名を指定して実行で、「cmd」または「command」を入力)

真っ黒な画面が立ち上がったら、「ipconfig」と入力してみてください。
ネットワークに接続していれば、どこかに「IP Address. . . . :」とあり、その先に3桁の数字が「.」区切りで表示されます。(例えば、192.168.1.1)
それが世界に一つしかないIPアドレスです。
これをもとに接続を行うわけです。

次にポート番号です。
通常、パソコンでは複数のプログラムが立ち上がります。
その中から目的のプログラムを探し出すためにポート番号が必要となります。
(正確にはこの場合のプログラムは「サービス」といいます)

ポートがどうなっているかを調べるにはコマンドプロンプトから、「netstat -n 1」と入力します。
1秒ごとにネットワーク状態を表示します。
Local Addressの項目に、自分のコンピュータのIPアドレスとポート番号が「:」区切りで表示されます。
Foreign Addressには、接続先の情報が表示されます。
例えば、この状態で、IEなどWebブラウザでgoogleに接続すると、
Foreign Addressに、「66.102.7.104:80」と表示されます。
66.102.7.104がgoogleのIPアドレスで、ポート番号80に接続しているわけです。

netstatの状態を終了するには、Ctrl+Cを押します。「exit」と入力して、コマンドプロンプトを終了します。




3.ネットワークシステム
IPアドレスとポート番号について分かったところで、
次はネットワークゲームのシステムです。

ネットワークゲームシステムには、以下の3つの方法が考えられます。
 ・P2P
ピア・ツー・ピア
接続されているコンピュータ同士で、直接通信を行う方法です。
図では、2台のコンピュータとなっていますが、接続台数を3台、4台…n台、と増やすことが可能です。
ただし、n-1台分のコンピュータと常に接続を行う必要があります。

 ・C/S
サーバー・クライアント
ピア・ツー・ピアでの接続台数が多くなったときの負荷を解決する方法が、C/Sです。
これにより、個々のクライアントはサーバと接続するだけでよいので、負荷が少なくなります。
また、サーバーがアイテムなどの情報を一元管理できるので、ゲーム管理が楽になります。

 ・Webアプリケーションモデル
これは、クライアントがWebブラウザである、C/Sです。
Webブラウザであるため、クライアントは特別なソフトのインストールが必要ありません。

実装の難易度としては、
Web<P2P<C/S
となります。

Webアプリケーションモデルが簡単なのは、サーバはCGIであり、クライアントはWebブラウザなので、
CGIの作成に専念すればよいからです。
C/Sが難しいのは、クライアントとサーバーで別のプログラムを作成しなければならないからです。
また、サーバーの管理などを考えると個人で運営するのは、ちょっと大変です。
P2Pはその点楽なのですが、不特定多数の人と接続するばあいに、直接IPアドレスを交換する必要があるため、
ロビーというIP交換場所をCGIなどで作成する必要があります。

各モデルの特徴をまとめておきます。
Webアプリケーション リアルタイムでやり取りしないゲーム向き。(RPG/SLGなど)
プレイヤーは自由に参加でき、自由に終了することができるため、気軽にできる。
P2P 少人数が参加するゲーム向き。
C/S 大規模なゲーム向き。
※個人的には、Webアプリケーションタイプのゲームが未来型のゲームという気がしないでもないです。
プレイヤーは特別な環境が必要ないですし、好きなときに参加できるのもいいです。
さらにFlashのようなリッチクライアントと連携を行えば、動きのあるゲームを作成することができますし。




4.セッション
最初に、「IPアドレス」と「ポート番号」さえあればつなぐことができる、と書きましたが、
ゲームに関しては、「セッション」の情報も必要となります。

セッションとは、ゲームが始まっている部屋のようなものです。
例えば、DirectXのネットワーク機能であるDirectPlayでは、最初にセッションを作成し、
プレイヤーの参加メッセージが飛んできたら、DPNIDというプレイヤー識別子を発行し、
これをキーに相手を認識します。



今回はネットワークゲーム作成の概要について解説をしました。
実装となると、エイバースさんのところで書かれているように、
いかに送信データを少なくするかというところが重要になってくると思います。
ブロードバンドが進んできたとはいえ、未だネットワークはリアルタイムのゲームに
充分に耐えられる環境にはなっていませんので。。。

以上、1064でした。