テラリウム徹底攻略ガイド生物テンプレートの詳細(1)デジタルアドバンテージ2002/05/18 |
生物テンプレートの詳細
ここまでの解説を読んでいただければ、「Terrarium 生物テンプレート」にある、生物テンプレートのプログラムはだいぶ読めるようになっているはずだ。
ここからは、生物テンプレート・プログラムを見ながら、解説が必要と思われるいくつかの点について見ていく。なお、生物テンプレートには草食動物と肉食動物(と植物)があるが、ここではあえて、Ecosystemで活気のない肉食動物の方を取り上げることにする。
■属性の設定
プログラムの先頭部分では、「属性」により、種に固有の定数が埋め込まれている。始めにこれを順番に見ていこう。
|
|
属性により、まずクラス名と、作者の名前、メール・アドレスを設定する |
最初のOrganismClass属性では自分が記述した生物のクラス名を指定する。このクラスはAnimalクラスを継承したクラスとして記述する。
コメントにあるように、AuthorInformation属性では、自分の名前と、メール・アドレスを記述しておく。両方とも半角英数字で記述することに注意が必要だ。名前部分には全角漢字を埋め込んでもコンパイルには成功するが、Ecosystemランキングでは“??”となって表示されない。
また、メール・アドレスはコンテストで入賞したときの唯一の連絡経路となるので、賞品が欲しければ正しいものを記述しておかなければならない。ただし、プログラムに埋め込まれるこのメール・アドレスは、生物プログラムであるDLLファイルを.NETの逆アセンブル・ツールであるildasm.exeなどで中身をのぞけば、簡単に調べることができる。このためテラリウム・サーバに接続しているユーザーはだれでも、Ecosystemに登録されている生物の作者のメール・アドレスを知ることができるので、公にしたくないメール・アドレスの使用は控えるべきだ。
続く3つの属性のうち、MatureSize属性には、生物が成熟したときの大きさ(直径)を指定する。ここには25から48までの値を設定することができる。
|
|
動物の種類(肉食、草食)、成熟時のサイズ、外見を設定する |
最後のAnimalSkin属性では動物の外見を指定する。動物の外見は6種類から選べるが、それぞれが実際にどのような外見かは、第1回目で示した図をもう1度、掲載しておこう。
AnimalSkin属性で指定可能な生物のスキン |
左から順に、アリ(Ant)、甲虫(Beetle)、しゃくとり虫(Inchworm)、サソリ(Scorpion)、クモ(Spider) |
続く7つの属性は、種の性質を決定する重要な値だ。これらの属性には合計で100ポイントを分配して割り当てる。「第 4 章 生物の能力の制御」には「6つの不変属性」となっているが、これは「7つ」の間違いだ。
|
|
7つの属性で種の性質を決定する |
また、現在のテラリウムの設定では、
- AttackDamagePoints属性は4の倍数
- DefendDamagePoints属性は4の倍数
- EyesightPoints属性は10の倍数
でなければならず、そうでない場合には端数は切り捨てられてしまう。テンプレートの設定では、DefendDamagePoints属性は10になっており、そのままIntroduceするとワーニングが表示されるのはこのためだ。
MatureSize属性と、これら7つの属性の値の配分は、決定がなかなか難しい。取りあえずは適当な値で生物をIntroduceして、その動作を見ながら地道に調節していくのが妥当なやり方だろう。
ildasm.exeを使用して生物プログラムのDLLファイルをのぞけば、その生物の属性値を見ることができる。まずはランキング上位の生物のものをまねてみるのも手だ。
■生物テンプレートの骨格
属性の設定を除けば、生物テンプレートにはAnimalクラスを継承した“MyCreature”クラスがあるだけだ。まずはこのクラスの全体を見てみよう。次に示したリストは、生物の行動ロジックを除いて、クラス全体の骨組みが分かるようにしたものだ。
|
|
生物テンプレートの骨組み |
生物プログラムで最低限必要となる最初の処理は、イベント・ハンドラの設定だ。まずこれを行わないことには、発生するイベントを受け取ることができない。なぜか「Terrariumオブジェクト・モデル」には記載されていないが、この設定は、生物がフィールドにIntroduceされるときに1度だけ呼び出される“Initialize”メソッドで記述する。このメソッドは、Organismクラスで定義されている仮想メソッドをオーバーライドして記述する。生物テンプレートでは、LoadイベントとIdleイベントの2つだけに対応しているのが分かる。
SerializeAnimalメソッドとDeserializeAnimalメソッドは、生物がテレポートされるとき、あるいはテラリウム・アプリケーションが終了され、次に再開されるときに、それぞれ呼び出されるメソッドで、生物で独自に蓄積したデータをテレポート後や、次回の起動時にも使用したい場合には、これらのタイミングでデータをストリームへ読み書きすることができる。持ち越すようなデータがない場合には、メソッドを空にしておけばよい。この2つのメソッドはAnimalクラスで抽象メソッドとして宣言されているため、オーバーライドしておかなければコンパイル・エラーとなる。
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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|