moon Gamer

「1846」の資産管理システムもどきを Excel のマクロ(VBA)を使って開発した話は少し前に書いた。以前から「18xx」の管理システムのアイデアは頭の中にもやもやと持っていて、機会があればまとめようとは思っていたので、今回、「1846」のおかげでこれを形することが出来たのたのは大きな前進と言って良い。ひとまず目標は達成したとも言える。

ところで、こいつの開発中にあることに気がついた。

「18xx」では、資金の扱い方が、他でありそうで実はあまり例のないルールによって構成されている。銀行が中立の資金プールとなっているのはよくあるルールだが、総資金額が定められており、資金が銀行から枯渇するとゲーム終了条件を満たす(ただし枯渇した後は資金量に上限がなくなる)。つまりプレイヤーは、有限の資金を取り合うゼロサムゲームを行っているようなものだ。

何が言いたいのかというと、「18xx」において資金とは、何かに付随するプロパティではなくオブジェクトそのものではないかということだ。

具体的には、ゲームで扱うすべての $1 札は個別にオブジェクトとし、各々の「$1 札オブジェクト」の所有名義を参照/更新することで、それら所有者の財産を管理したり計測する処理が簡単に実現する。すなわち「18xx」において収入や支払とは、各 $1 札の所有権を、現在の所有者から別の所有者へ移行することを純粋に意味しているのである。

ただこの方法では、$1 札単位でオブジェクトを管理することになるので、その数(つまりお札の枚数)が多くなるとオブジェクト数(というかインスタンス数)も増大する。総資金量の多い「18xx」だと、初期の銀行資金は2万ドルくらいのオーダーとなるだろう。資金が少しでも動くたびに、平凡に2万回のループを行うというのは、安全ではあるけれども技術者感覚ではあまり美しい実装には思えない。

もっとも、実際のところ総オブジェクト数(インスタンス数)が万のオーダーくらいなら、アルゴリズムを工夫して高速化を図る手法を模索する考え方は決して非現実的でもない。しかしここはもう少し楽をする(あるいは拡張性に柔軟性を持たせる)という意味で、データベースのお世話になれないものか考えることにした。

(つづく)