How to Write an Asynchronous, Multi User, Platform-Independent Application
我が家の家計簿は Cocoa ベースのナイスな UI つきアプリケーションで入力
して、awk で統計処理してから MONGO で可視化して、紙への出力は家電制御
向け OS で一発なんザマスのよオホホホホ。
という、ごくありがちな家庭のネットワーク環境を利用して、家族みんなでラ
リーXをプレイしたくなった時にはこれを読めば完璧。
ラリーXを知らない読者へ
カエレ!
遊んでやるからやり方教えろという読者へ
これをもってゆくがよい。
そんで展開して遊ぶがよい。
- server を 1 つと client 人数ぶんを起動します。一人で遊ぶなら 1 台
のマシンで server と client を 1 個ずつ起動しても OK。
- スペースバーでゲーム開始。
- カーソルキーで移動。スペースバーで煙幕。
- フラグ全部とると面クリア。
- 青:自分の車、赤:他のプレイヤの車、白:サーバが制御してる車
- s でゲーム一時停止。q でゲーム終了。
- コースマップはテキストファイルとして ./data 以下に置いてあるので
現状のコースに飽きたらいじって遊んでください。
N 面のマップは ./data/mapN というファイルです。各面のス
タート時にサーバがこのファイルをロードします。
ソースパクらせろという読者へ
ほらよ (なぜか ZIP 形式)。Linux の人は展開し
て make すると実行形式ができます。Win の人は ./server と ./client に
Visual C++ のワークスペースがあるのでそれでビルドしましょう。Mac OS-X
の人は make -f Makefile.macosx しましょう。Mac 以外の人は事前に GLUT
をインストールしておく必要があるます屋。
これまでのあらすじ
通信は Berkley socket で、画面描画は OpenGL (GLUT) でやってます。プラッ
トフォーム依存な部分がちょっとだけあります。そういうとこは #define で
場合分けしてあります。原始的ですね。
ムカつくんだよてめへ、あらいやだ、私としたことがお下劣
Windows 上では WinSock とかいうラッパを使いましたが、いろいろ重要な機
能がサポートされていなくてムカつきました。特に、受信用のキューにデータ
が来ているかどうかをブロックせずにチェックするところで苦労しました。
recv() を MSG_DONTWAIT で使おうとしたらそんなフラグはねぇよって言いや
がられましたのがムカつきました。結局 ioctlsocket() ていうのを使うこと
にしました。
Mac OS-X 上ではほとんどそのままでコンパイル通りました。ただし GLUT の
ヘッダのありかが <GLUT/glut.h> なのと、リンカに
"-framework" "GLUT" "-framework" "OpenGL" "-framework" "Foundation"
を渡さなくてはならないのを知らなくてハマってムカつきました。それから
G4 とか G5 は big endian なので送受信するデータのバイトオーダを真面目
に考えないと動かないのでムカつきました。htonl() とか ntohl() とかを使
いました。
既知のバグ:
- 8人まで同時に遊べるはずですが、試していません。
- 1 面の迷路やフラグ、岩の位置は本物と同じですが、スペシャルフラグ
やラッキーフラグの位置がランダムではなく固定です。エネミーカーのアルゴ
リズムも本物に似せたけど完全ではありません。
- 自分の吐いた煙幕に触れると自分もスピンするとか、お花畑が無いとか、
本物と違う点がいろいろあります。
- 面倒なのでマップは1面ぶんしか入力していません。だれか4面まで入力
して下さい。迷路データはこの辺とかに
あります。
- namco にチクらないで下さい。
参考文献:
- ALL ABOUT namco Vol.1, 電波新聞社 (1985) p62
- ナムコミュージアム Vol.1, namco (1995)
- UNIX ネットワークプログラミング入門, 技術評論社 (2003)
How to Top
おれんち
ためしにこんなんつけてみた。どうか? プライバシー侵害? うへへへへ