連載テラリウム徹底攻略ガイド 第3回 オブジェクト・モデルと生物テンプレート |
|
|
テラリウムサロン
テラリウムに関するご質問やご意見はこちらへ |
前回の最後に予告したように、今回はまず、生物プログラムのフレームワークであるオブジェクト・モデルの概要について解説する。そして後半では、前回でコンパイルとテストの手順説明に用いた生物テンプレートで記述されているプログラムの内容を見ながら、生物プログラムの処理手順について学ぶ。
テラリウムのオブジェクト・モデル概要
実際にテラリウム生物のプログラミングを始めると、最も頻繁に参照することになるのが、テラリウムのAPIマニュアルであるオブジェクト・モデルの解説である。これはテラリウムのオフィシャル・サイトにある、
から参照することができる。
テラリウムのオブジェクト・モデルの解説ページ |
テラリウムのプログラミングを始めると、何かにつけてこのページを参照することになるだろう。 |
ここで定義されている要素は、すべて1つのライブラリ・ファイルにまとめられている。前回解説したように、生物プログラムのコンパイル時に参照設定が必要となる「organismbase.dll」がそのファイルである。
さて、このページを熟読して、記述されている内容をすべてマスターしていれば本稿の前半部分は不要だが、このページはボリュームがあるうえにあまり整理されておらず、初心者プログラマにとっては非常に分かりづらいものとなっている。もちろん詳細な情報については同ページの各項目にある解説を参照していただくしかないが、今回は生物プログラミングを始めるにあたって、まずは知っておく必要のある項目について解説しよう。
なお、Ecosystemで生き残れる生物を作るには「Terrarium 開発ガイド」にも目を通しておく必要があるだろう。この開発ガイドには、Ecosystemで生き残るためのさまざまな技術情報が、プログラム・コード付きでまとめられている。本稿ではなるべくこれに記載されていないポイントについて見ていくつもりだ。
ここではまず、上記のページにある各カテゴリが何を示しているのかを、例を挙げながら簡単に説明しよう。
■Classes(クラス)
各クラスには、生物が行動をする際に呼び出すことのできるメソッドや、生物の状態を取得するためのプロパティなどが定義されている。植物プログラムを作成する場合にはPlantクラスを、動物プログラムを作成する場合にはAnimalクラスを継承して、自分のクラスを定義し、その中に処理を記述することになる。ここに列挙されているクラスとその構造については次の項で説明する。
■Events(イベント)
テラリウムのプログラミング・モデルは、発生したイベントに応答して処理を行うイベント・ドリブンなモデルである。すなわち、生物プログラムはいつでも行動を起こせるわけではなく、イベントの発生時に呼び出されるイベント・ハンドラとしてあらかじめメソッドを設定しておき、そのメソッドの処理としてのみ行動を起こすことができる。このため、どのようなイベントがどのようなタイミングで発生するかを理解していなければならない。
例えば、生物が移動を完了した場合には“MoveCompleted”イベントが発生する。ここでいう「移動の完了」とは、あらかじめ指定した目的地に到着した場合や、移動中に障害物(植物やほかの生物)にぶつかった場合である。そこで、このイベントに対するイベント・ハンドラとして、移動完了後の次の行動を記述したメソッドを設定するわけだ。なお正確には、ここに列挙されている“〜EventHandler”はイベントではなく、いずれもイベント・ハンドラを設定するためのデリゲートである。イベントの発生に関しても、別の項で詳しく説明する。
■Event Arguments(イベント引数)
この“Event Arguments”は、あるイベントが発生し登録したメソッド呼ばれる際に、そのメソッドのパラメータとして与えられるオブジェクトのクラスを一覧したものだ。このパラメータは、発生したイベントの種類によって異なってくる。例えば、上記の“MoveCompleted”イベントが発生し、MoveCompletedEventHandlerで登録されたメソッドが呼び出される場合には、そのメソッドのパラメータとして、MoveCompletedEventArgsオブジェクトが与えられる。このオブジェクトのプロパティ(Reasonプロパティ)からは、目的地に達したのか、障害物にぶつかったのかを知ることができる。
■Attributes(属性)
属性は.NET Frameworkで導入された便利な機能の1つで、これを利用してソース・コードに静的な(実行時に変更されない)情報を埋め込むことができる。テラリウムで使用される属性については、本稿の後半で用いる生物テンプレートのプログラム・リストを見ればすぐに理解できるだろう。
■Exceptions(例外)
ここでは、テラリウムのクラス・ライブラリにあるメソッドを呼び出す場合にスローされる可能性がある例外が列挙されている。例えば、死んでいない動物を食べようとすると、“NotDeadException”例外がスローされる。ただし通常は、動物を食べる前に、その動物が死んでいるかを確認するようにプログラミングする。同様に、ほかの例外についても、それがスローされないようにプログラミングしていくのが普通だ。しかし予期していない例外が発生して、それを処理していない場合は、生物がシステムにより即刻殺されてしまうので、イベント・ハンドラとして記述するメソッドは、すべて“try〜catch”構文により例外処理を行っておくと安全だ。
■Interfaces(インターフェイス)
テラリウムにおいては、インターフェイスは、「種」に関する基本的な情報を取得するためのまさに「インターフェイス」として使用されている(自分で定義したクラスにこれらのインターフェイスを実装するような使い方はしない)。これらの情報から得られる値は、種が同じであれば、つまり1つの生物プログラムから生成された生物では、すべて同じである。さらにいえば、これらの値は上記の属性を元に算出されるため、種が異なっても、すべての属性の値が同じであれば、すべて同じ値となる。すでにEcosystemにIntroduceされている動物によっては、これを利用して自分の作成した生物同士では争わないようにしているものもあるようだ。
■Enums(列挙)
Enumsには、名前が付けられた定数を定義した列挙型が一覧されている。例えば、先ほどの移動が完了した理由を示すMoveCompletedEventArgsオブジェクトのReasonプロパティには、ReasonForStop列挙型で定義された値が入っている。この列挙型の値には、
- ReasonForStop.Blocked :障害物にブロックされた
- ReasonForStop.DestinationReached :目的地に到着
の2つの定数がある。
INDEX | ||
[連載]テラリウム徹底攻略ガイド | ||
第3回 オブジェクト・モデルと生物テンプレート | ||
テラリウムのオブジェクト・モデル概要 | ||
オブジェクト・モデルのクラス構造 | ||
生物テンプレートの詳細(1) | ||
生物テンプレートの詳細(2) | ||
「連載 テラリウム徹底攻略ガイド」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|