ゲームのモデリング


目次

ゲームのモデリング

1.はじめに

今回は、ゲームというシステムのモデリングを行い、ゲームとはそもそも何であるか、
ということを考えてみたいと思います。

なお、モデリングツールとしてUMLというものを使用しますが、
ふ〜んそういうものがあるんだー、というレベルで充分だと思います。

ただ、モデリングというものは人によって差があるので、
これが全て正しいとはいえません。

ゲームの一つの考え方、という風に受け止めてもらえれば、と思います。

2.ゲームモデルの表現

ゲームをユースケースというもので表現すると以下のようになります。
http://www5f.biglobe.ne.jp/~kenmo/wiki/object1.png
プレイヤーはゲームをする人です。
ゲームをする人は、ゲーム画面(タイトル画面/メインゲーム画面/結果画面)を通して、ゲームをするわけです。

ここでは、この3つの画面がプレイヤーの入力を受け取る画面である、
ということを示しています。

その中でも一番重要なのが、メインゲーム画面です。
これがないと話になりません。
ゲームバブル時代には、タイトル画面だけ作って、
ゲーム完成間近!
などと発表していたゲームメーカーもあったそうです(´〜`;)

ゲーム開発の流れとしては、メインゲーム部分がしっかりできてから、タイトル部分を作りこむのが普通ですから、
それでは、一生発売できませんよね。。。


このユースケース図をもう少し細かく分析したのが、次のユースケース図です。
http://www5f.biglobe.ne.jp/~kenmo/wiki/object2.png
実は、ちょっと実装寄りの図になっているのですが、
タイトル画面はタイトル管理に、
メインゲーム画面はメインゲーム管理に、
結果画面はスコア管理になっています。

ゲーム画面は、プレイヤーの入力を受け取り、フラグにより「管理」を切り替えることで、画面遷移を行ないます。
また、「管理」は結果データを「ゲーム画面」に返し、「ゲーム画面」が描画処理を行います。
たとえば、シューティングゲームにおいて、現在ゲーム画面がメインゲーム状態であれば、
「ゲーム画面」は「メインゲーム管理」にプレイヤーからの入力(弾発射命令など)を渡してキックします。
「メインゲーム管理」で、座標の移動/当たり判定などを行ない、敵を倒したなどの情報を「ゲーム画面」に返します。
「ゲーム画面」は、その情報を元に描画処理を行うわけです。

「Windowsメッセージループ」を考慮した実装を想定しているので、
知らない人にはちょっと難しかったでしょうか。

まあ、そういう設計はともかく、この図で分かってもらいたいことは、
ゲームに必要なデータは、プレイヤーデータ/敵データ/スコアデータということです。

ゲームである以上、なんらかのプレイヤーを操作するので、プレイヤーデータが必要となります。
そして、プレイヤーが戦う相手(システム)が敵データです。
ただ、それだけでは面白くありません。
プレイヤーは、ゲームをプレイした結果を残したいという欲求がある(はず)です。
結果データとなるのがスコアです。
RPGなどでは通常はスコアという直接的なものでなく、プレイヤーキャラのLVなどがスコアといえます。



3.ゲームモデルの表現

なるほど。ゲームのインターフェース(入力を受け取るところ)は、タイトル画面/ゲームメイン画面/結果画面の3つで、
データは、プレイヤーデータと敵データとスコアなんだね、、、
でも、それが分かったところでなんの役に立つのさ!
とご立腹の方も多いでしょう。。。(たぶん)

なんの役に立つのかというと、、、このモデルはゲームの基本的な部分なのです。
つまり、このモデルを発展させることで、全てのゲームを設計することができるのです。(ホントに?)

たとえば、私の作ったゲームのダンジョンキーパーをモデリングしてみます。
(※ゲーム説明:ダンジョンを歩き回って、最下層にいるダンジョンキーパーというボスを倒すRPGです) http://www5f.biglobe.ne.jp/~kenmo/wiki/object3.png
メインゲーム管理の先に、移動管理と戦闘管理があります。
移動管理とは、ダンジョンを歩き回っている状態を管理します。
戦闘管理とは、敵に遭遇して戦闘状態となっているものを管理します。

前の図と見比べてください。
基本は同じではないでしょうか。

ちょっと待った!移動状態では、ダンジョンというデータがいるよ!
これは、敵データではないのでは?
と、気づかれたあなたは鋭いです。

ダンジョンには、敵やトラップが仕掛けられています。
ですから、プレイヤーは、ダンジョンという敵と戦っているともいえます。
(こじつけですか。そうですか。スミマセン...)


さて、ここで、町で買い物できるように機能を拡張するとします。
その場合には、メインゲーム管理の下に町管理を追加します。
敵データとしては、町データとなります。(;´Д`)

どうでしょうか。
このようにモデルを定義しておくと、機能を拡張したい場合に、
どの部分に対して変更を加えればよいかが明確になります。
変更が明確であれば、あれやこれやと無駄に考える必要がなくなり開発が楽になります。


余裕があればこのモデルを使って、他のゲームを考えてみてください。
もちろん、このゲームモデルを自分で構築してみるのもアリだと思います。
…人の数だけモデリングは存在しますから…。

以上、.1064でした。