MASATOの開発日記


前の開発日記 次の開発日記 一覧

2002/12/28

ただいま、実家に帰っております。実家は開発環境が無いので、 だらだらと駄文を書いて過ごすのみです。

ゲームのアーキテクチャ失敗例その1

今まで、私は何度かゲームのアーキテクチャを設計したが、 今現在、それらが良いアーキテクチャだったとはちょっと思えません。
そこで、SVGの練習を兼ね、今までどんなアーキテクチャで、どんな点が失敗だと思ったのか 説明して行きます。

まず最初に、結構昔使っていたアーキテクチャとその問題点を説明します。例としてRPGを使います。
UMLのクラス図で書くと、こんなクラス構成となっておりました。 なお、これは抽象的な図であり、正確に書いたものでは有りません。

ざっと説明しますと、Stateパターンが中核となっています。 ユーザの入力等により、Gameクラスの状態が、Title,Field,Battleのどれかを取ります。
Titleはゲームの状態がタイトル、すなわちタイトル画面制御用のクラスで、 Fieldは、フィールド画面制御用のクラスで、Battleは戦闘画面制御用のクラスです。 フィールド画面をうろついていると、突然戦闘画面に切り替わるようなゲームだったと思って下さい。
Title,Field,Battleはそれぞれ複数のGameObjectを持っていて、これらが画面上のキャラクタやマップやテキスト等を表します。 Title,Field,Battleは、自身が所有しているGameObjectを全て行動させたり、表示させたりすることによりゲームを進めます。 ある特定のGameObjectが、ある特定の状態になったら、Gameのstateが他のものに切り替わります。例えば、こんなときです。

しかし、この構成には、次のような問題点がありました。

これらの問題は、結局無理やり実装して解決しました。 グローバル変数のようなものを一つ二つ追加すれば、大概の問題は片がつきます。 その後の保守/修正が面倒になるだけです。

ゲームの開発では、途中で仕様変更はぼこぼこ入りますし、 ソースコードの使いまわしというのもなかなか難しいものです。 よってゲームの全体的な設計を行うときに目指すものは、再利用性ではなく、 実装量を減らせるような設計ではないかと思います。
具体的には、

ということになるのではないかと思います。

(2002/12/29) 細かい点を何点か変更しました。

(2003/01/05) 強調する部分に色を付けました。

前の開発日記 次の開発日記 一覧