このレポジトリに含まれるファイルは、書籍『オンラインゲームを支える技術』
(中嶋謙互著、技術評論社、2011)の本文、第4章、第5章用の参考/補助資料です。
本文解説中では紙幅の都合で一部仮想コードを使用している部分もありますので、
参考までに実際に動くサンプルゲームを用意しました。
サンプルゲームは、MMOタイプ(C/S MMO)とMOタイプ(P2P MO)の2種類です。
ソースコードは、あくまでプログラミング手法の理解を助けるためのものとして、
動作イメージや本書掲載コード例の参考に使用してください。
- README.md :本ファイル
- VCE-License.txt :通信ミドルウェアVCEの使用条件/利用規約
- mmo :第4章関連。MMOタイプのサンプルゲーム類の収録フォルダ
- mo :第5章関連。MOタイプのサンプルゲーム類の収録フォルダ
- ※上記以外は、下記で別途説明しています
上記サンプルゲームプログラムの使用にあたっては、
必ず、下記「通信ミドルウェア『VCE』およびVCEバイナリの起動時間について」
「使用に関するご注意」をお読みいただき、ご了承のうえ、ご使用ください。
上記のサンプルゲームで使用している通信ミドルウェア「VCE」の、著作権を含む
知的財産権・所有権は、㈱スクウェア・エニックスに帰属します。
書籍『オンラインゲームを支える技術』では業界の技術水準の向上と振興のためとして、
本書ご購入の読者の方に限り、特別にライセンス提供を受けているものです。
なお、本サンプルゲームプログラムのアーカイブに格納しているVCEバイナリは、
プログラムを開始して一定時間内(本アーカイブ公開時点で、1回の起動あたり最長1時間)
には通信ができなくなる試用版です。VCEを使用することによるあらゆる損害に関して、
㈱スクウェア・エニックス、著者、㈱技術評論社は一切の責任を負いません。あらかじめご承知おきください。
より簡単に動作イメージを確認できるゲームのプレイ動画は、以下から参照いただけます。
- サンプルゲームプログラムのアーカイブに同梱しているデータ、プログラムは、
『オンラインゲームを支える技術』の本文解説に関する参考/補助資料として
使用いただくことのみを目的として提供しております。 - 同アーカイブに収録しているプログラムおよびデータを使用して発生した障害、問題などに関して、
プログラムおよびデータの作者、開発元/提供元、筆者および㈱技術評論社は一切の責任を負いません。
使用はご自身の責任で行ってください。 - 同アーカイブに収録している通信ミドルウェアVCE(技術評論社経由提供版)については、
技術評論社Webサイトにて本アーカイブダウンロード前に確認/同意いただいた利用規約に基づき、使用してください。
VCEの使用条件/利用規約は本アーカイブにも同梱しているVCE-License.txtで参照いただけます。
その他、本ファイルを含むアーカイブに同梱しているプログラムの著作権は一般的に、
その作者あるいは開発元/提供元が所有します。いずれの著作物もライセンスを確認の上、ご自身の責任で使用してください。 - 同アーカイブの収録物のうち、サンプルゲームのプログラム本体ソースコードについてのみパブリックドメインとし、
一切の許諾なしに自由に使用してかまいません。 - 収録物、プログラムの内容および使用方法、OSの基本操作等に関して、
電話やメールでのお問い合わせを含むサポート業務は一切お受けしておりません。 あらかじめご了承の上ご使用ください。
MMOタイプのゲーム内容は、
- 広いフィールド内に敵がランダムにポップ(突然出現する)
- それをキーボード操作で追いかけて、カーソルキーを連打することで「攻撃」しダメージをあたえる
- 一定のダメージを与えることで撃破し、経験値を稼ぎ、レベルを上げ、強くしていく
というMMORPGの典型的な内容を極端に単純化して模倣しています。
ゲームの難易度は非常にやさしく、「ぷちぷち」をずっとつぶし続けるように、のんびり遊ぶことができます。
サンプルプログラムの見所は、すべてのゲーム進行を管理する専用のサーバプログラム(gmsv)が動作していて、
クライアントプログラムは純粋にそれを表示するだけという「ブラウザ型」の動作をするところです。
プレイ動画でも、2つ同時に起動しているクライアント同士で、ほぼ同じ画面状態になっています。
2つの画面が大きく異なっているMOタイプのプレイ動画と比べると、両者の違いがよくわかります。
MOタイプのゲーム内容は、
- わき出てくる敵が弾を撃ってくる
- それをキーボード(上/下/左/右の矢印キーまたはW/A/S/Dキー)操作で避けつつ
- マウスで弾を撃って撃退していく
で、ゾンビハンティングタイプのTPS(Third Person Shooting Game、Third-Person Shooter)です。
経験値を稼いでexpを100にするごとにレベルが上がります。
ゲームの難易度は70年代のアメリカゲーム的なもので、
今のゲームと比べると当たり判定などは、十分に工夫の余地があるでしょう。
テストしてみたところ、レベル3にするためにはコツが必要かもしれません。
ソースコードの見所は、SyncValueクラスの使い方です。
本アーカイブに収録しているサンプルゲームの使用にあたっては、UNIX系OSの基本的な使用法をはじめ基礎知識が必要となります。
以下の文面は、それらを前提知識として説明を行っていますので、UNIX系OSを使用したことがない方は、
あらかじめ関連文献などを参照してください。
本書サンプルゲームの動作確認には、以下の環境を使用しました。
いずれのソフトウェアもライセンス等を確認の上、ご自身の責任でご使用ください。
また、以下の環境と異なるソフトウェア/バージョンを使用する場合は、ご自身の判断で行ってください。
-
Mac OS X v10.6(Snow Leopard)以降
-
Xcode
-
通信ミドルウェアVCE ※vceディレクトリにあるVCEバイナリ。必ず、使用条件/利用規約に基づき、使用してください
-
gcc 4.2.1 ※Xcode 3.2に収録されているものを使用
-
Python 2.6.1 ※Snow Leopardにプリインストールのものを使用
-
Boost 1.41.0 ※本アーカイブに必要な部分のみ展開の上、収録。ライセンス
-
SDL 1.2.14 ※本アーカイブのSDL-1.2.14ディレクトリに収録(-arch x86_64バイナリを含むビルドをすること)ライセンスについて
-
MySQL 5 14.14, distrib: 5.1.40
-
MacPorts ※MySQLインストールなどに使用 参考情報
-
Django 1.1.1 ※ソースからインストールするのが確実 参考情報
MMOタイプのサンプルゲームの動作確認は、下準備&ビルド(dbsv→gmsv→cliの順にビルド)をした後、
サーバを起動し、autocliとcliでいう流れになります。
以下の手順は、あくまで参考としてお読みください。
同じソフトウェアを使用いただいたとしても、コンピュータの使用状況が異なることにより動作確認ができない場合もあり、
以降の説明は読者の方のコンピュータにおける動作を保証するものではありません。
*下準備&ビルドの例: (1)MacPortsでMySQLをインストール&下準備 % sudo /opt/local/bin/port insall mysql5 ※依存関係など個別環境の必要に応じてmysql5-devel、mysql5-server-develの追加インストール、/opt/local/var/run/mysql5/mysqld.sockで待ち受け設定など行ってみてください (2)SDL-1.2.14のあるフォルダに移動し、ビルド&インストール % ./configure && make % sudo make install (3)Djangoをソースコードからインストール http://www.djangoproject.com/download/からDjango-1.1.1.tar.gzから入手 % tar zx Django-1.1.1.tar.gz % cd Django-1.1.1 % sudo setup.py install (4)サンプルコードをビルド -(a)dbsvに移動 -(b)make -(c)gmsvに移動 -(d)make -(e)cliに移動 -(f)make (5)MySQLの下準備 % sudo -u mysql mysql_install_db5 % sudo /opt/local/share/mysql5/mysql/mysql.server start % mysql5 -u root mysql> grant all on *.* to storage@localhost % mysqladmin5 -u storage reload ※下記サーバの起動時にエラーが出た場合、エラーメッセージに従う。たとえば、必要に応じて以下の手順で手動でデータベース"k"を作成など行う % mysql5 -u root mysql> create database k; *サーバの起動例: (1)dbsvに移動(ビルドが終わっている状態で移動する) (2)make tblを実行して必要なテーブルを生成 (3)./dbsvを起動 (4)./dbclを起動してテスト。止まらず走り続けている限り成功し続けている (5)gmsvに移動 (6)./gmsv 0を起動。0はゾーンサーバID。 29000番からはじまるポートで待ち受けます。 *サーバの起動例: (1)dbsvに移動(ビルドが終わっている状態で移動する) (2)make tblを実行して必要なテーブルを生成 (3)./dbsvを起動 (4)./dbclを起動してテスト。止まらず走り続けている限り成功し続けている (5)gmsvに移動 (6)./gmsv 0を起動。0はゾーンサーバID。 29000番からはじまるポートで待ち受けます。 *autocli&cliの実行例: (1)./autocliを起動してボットクライアントテスト! ※autocliを実行後、"assertion failure"などエラーが出てもタイミングによることも多いので、autocliを再実行してみるか、エラーが出た箇所をコメントアウトしたり元に戻したりしてみる (2)cliディレクトリのcliを実行! (3)数十秒間テストを行い、"bot test success!"と表示されたら成功!!
MOタイプのサンプルゲームの動作確認は、基本的にクライアントプログラム本体cliを起動するだけです(上記MMOタイプでSDLなど導入済みなら、以下の2ステップのみで遊べます)。
*動作確認の例: (1)./cliとして引数無しで、ホストとして起動! TCP 29900番ポートで待ち受けます。 (2)./cli localhostとして1個引数としてホストのアドレスを与えることで、自身はゲストとして起動してアドレスに接続する。接続できなければ終了