xrx

xrxはlibcookaiのサンプルコードです。 簡単なzoneの切り分けと、共有を行っています。

必要なもの

作り方

xrx は上記の外部ライブラリを必要とします。あらかじめ導入しておいてください。

pastry-like の compile

まず最初にに pastry-like を compile する必要があります。
config.h./configure になったつもりで書き換えます。 Makefile 内部の CFLAGS あたりのコメントアウトされたものを、必要に応じて外します。 (既知のOSでの書き換え方例)
準備が整ったら、make と打ちます。

libcookai の compile

次に、libcookai を compile します。
pastry-like の時と同じように、Makefile を適当に書き換え、make します。

xrx の compile

次に、xrx を compile します。
pastry-like の時と同じように、Makefile を適当に書き換え、make します。 (既知のOSでの書き換え方例)

遊び方

遊ぶといっても、まだ、走れるだけですが…

stand alone で遊ぶには

% ./xrallyx
と打ちます。./ なのには意味があって、画像を compile された directory から読み込んでいるため、 compile されたところで実行しないと動作しません。

multi player で遊ぶには

% ./xrallyx -m 自分のIPaddr:待ち受けるport番号 [-r 相手のIPaddr:待ち受けているport番号]
と打ちます。 (例: ./xrallyx -m 203.178.159.46:8472 -r 203.178.158.52:2521) 一番最初の初期ノードになる人以外は、-r を使って、ゲームに参加する時の最初のノードを指定する必要があります。

操作方法

カーソルキーを押すと、その方向に走り出します。 Enter を押すと多分止まります。 q を押すとゲームを終了します。

画面説明

しくみ

xrx は libcookai を用いてゲーム空間を共有して動いています。 libcookai では、ゲーム空間を zone という単位に分けて管理することを提案しています。
zone には、ある程度の関連性を持ったゲーム内のデータのひとかたまり(zone)が保存されています。 これらの zone のデータは、すべての参加ノードで共有できる空間である DHT に保存されます。 また、これらの zone それぞれにおいて、その zone のデータを必要とするノードがいます。 これらの zone のデータを必要とするノードのうち、唯一ひとつのノードが、この zone のデータを管理する zone owner となることができます。 その他の zone のデータを必要とするノードを zone member と呼びます。 zone member は zone owner と直接接続を持ち、zone のデータの変更依頼や、実際に変更されたデータを即座に受け渡すことができます。 libcookai は、ゲームという性質からくる、latency面 でのチューニングを主眼に作成されています。

xrallyx においての zone は以下のようになっています。

/rally-X/map%d,%d
16x16 ブロックのデータが入っています。%d,%d の部分は 16x16マス を一つのブロックとした、 x,y 座標が格納されます。
/rally-X/car
車の位置情報が入っています。map と同じような 16x16マス を一つのブロックとして実装されたversionは速度面での問題をかかえているため、保留されています。
/rally-X/obj
旗やおならを管理する zone になるはずですが、/rally-X/car/rarry-X/map%d,%d/car へと移行する時に同様に map%d,%d の下に移動される予定であり、現在はこの zone を管理する zone owner になる node が実装されていません。
/rally-X/map%d,%d の zone は、その zone の data が存在しない場合には新しく作られます。 このため、この distributed-rally-X では、参加node のメモリの許すかぎり、マップは拡大を続けます。 また、残念なことに、現状の実装では /rally-X/car を管理する node に処理が集中してしまっているので、 只の server-centric model と同じような形で動作してしまっています。

これから

メモ

既知のOSでの config.h, Makefile の書き換え方例

FreeBSD
Makefile 内部の
#LOPTIONS += -lmd # for FreeBSD
の部分の頭の # を外す
MacOS X
Makefile 内部の
#LOPTIONS += -lcrypto # for openssl/sha.h systems
の頭の # を外す
NetBSD
書き換える必要はありません