テラリウム徹底攻略ガイド(改訂版)

生物テンプレートの詳細(1)

デジタルアドバンテージ
2003/05/10
Page1 Page2 Page3 Page4

生物テンプレートの詳細

 ここまでの解説を読んでいただければ、「Terrarium 生物テンプレート」にある、生物テンプレートのプログラムはだいぶ読めるようになっているはずだ。

 ここからは、生物テンプレート・プログラムを見ながら、解説が必要と思われるいくつかの点について見ていく。なお、生物テンプレートには草食動物と肉食動物(と植物)があるが、ここではあえて、Ecosystemで活気のない肉食動物の方を取り上げることにする。

■属性の設定

 プログラムの先頭部分では、「属性」により、種に固有の定数が埋め込まれている。始めにこれを順番に見ていこう。

// ビルドするためには最低限、開発環境からの参照設定および、
// 当ソースコード内の名前およびメールアドレスの設定が必要です


[assembly: OrganismClass("MyCreature")]    // 生物のクラス
[assembly: AuthorInformation("名前", "メールアドレス")]
// 名前(匿名可)およびメールアドレスを入力(必ず両方とも半角英数字)
属性により、まずクラス名と、作者の名前、メール・アドレスを設定する

 最初のOrganismClass属性では自分が記述した生物のクラス名を指定する。このクラスはAnimalクラスを継承したクラスとして記述する。

 コメントにあるように、AuthorInformation属性では、自分の名前と、メール・アドレスを記述しておく。両方とも半角英数字で記述することに注意が必要だ。名前部分には全角漢字を埋め込んでもビルドには成功するが、Ecosystemランキングでは“??”となって表示されない。

 また、メール・アドレスはコンテストで入賞したときの唯一の連絡経路となるので、賞品が欲しければ正しいものを記述しておかなければならない。ただし、プログラムに埋め込まれるこのメール・アドレスは、生物プログラムであるDLLファイルを.NETの逆アセンブル・ツールであるildasm.exeなどで中身をのぞけば、簡単に調べることができる。このためテラリウム・サーバに接続しているユーザーはだれでも、Ecosystemに登録されている生物の作者のメール・アドレスを知ることができるので、公にしたくないメール・アドレスの使用は控えるべきだ。

 続く3つの属性のうち、MatureSize属性には、生物が成熟したときの大きさ(直径)を指定する。ここには25から48までの値を設定することができる。

[CarnivoreAttribute(true)]      // 肉食動物は"true"
[MatureSize(30)]                // 動物のサイズ
[AnimalSkin(AnimalSkinFamilyEnum.Scorpion)]    // 動物の外見"Scorpion" = サソリ
動物の種類(肉食、草食)、成熟時のサイズ、外見を設定する

 最後のAnimalSkin属性では動物の外見を指定する。動物の外見は5種類から選べるが、それぞれが実際にどのような外見かは、第1回目で示した図をもう1度、掲載しておこう。

AnimalSkin属性で指定可能な生物のスキン
左から順に、アリ(Ant)、甲虫(Beetle)、しゃくとり虫(Inchworm)、サソリ(Scorpion)、クモ(Spider)

 続く7つの属性は、種の性質を決定する重要な値だ。これらの属性には合計で100ポイントを分配して割り当てる。「第 4 章 生物の能力の制御」には「6つの不変属性」となっているが、これは「7つ」の間違いだ。

// ベース ポイントの属性
// 合計100ポイントを下記のいずれかに割り振ります。

[MaximumEnergyPoints(0)]  // 体力
[EatingSpeedPoints(0)]    // 動物を食べる速さ
[AttackDamagePoints(20)]  // 攻撃力
[DefendDamagePoints(10)]  // 防御力
[MaximumSpeedPoints(0)]   // 移動の速度
[CamouflagePoints(30)]    // 偽装(身を隠す)能力
[EyesightPoints(40)]      // 視野の広さ
7つの属性で種の性質を決定する

 また、現在のテラリウムの設定では、

  • AttackDamagePoints属性は4の倍数
  • DefendDamagePoints属性は4の倍数
  • EyesightPoints属性は10の倍数

でなければならず、そうでない場合には端数は切り捨てられてしまう。テンプレートの設定では、DefendDamagePoints属性は10になっており、そのままIntroduceするとワーニングが表示されるのはこのためだ。

 MatureSize属性と、これら7つの属性の値の配分は、決定がなかなか難しい。取りあえずは適当な値で生物をIntroduceして、その動作を見ながら地道に調節していくのが妥当なやり方だろう。

 ildasm.exeを使用して生物プログラムのDLLファイルをのぞけば、その生物の属性値を見ることができる。まずはランキング上位の生物のものをまねてみるのも手だ。

■生物テンプレートの骨格

 属性の設定を除けば、生物テンプレートにはAnimalクラスを継承した“MyCreature”クラスがあるだけだ。まずはこのクラスの全体を見てみよう。次に示したリストは、生物の行動ロジックを除いて、クラス全体の骨組みが分かるようにしたものだ。

public class MyCreature : Animal
{
  // イベントハンドラの登録
  protected override void Initialize()
  {
    Load += new LoadEventHandler(LoadEvent);       // ロード時
    Idle += new IdleEventHandler(IdleEvent);       // アイドル時
  }

  // ロード時最初に実行されるイベントハンドラ
  void LoadEvent(object sender, LoadEventArgs e)
  {
    ・・・・
  }

  // 定期的に呼び出されるアイドル時のイベントハンドラ
  void IdleEvent(object sender, IdleEventArgs e)
  {
    ・・・・
  }

  // ここより下はテラリウムを中断および再開させる際に実行されます
  // 個々の状態を維持しなければならない場合などに利用します

  public override void SerializeAnimal(MemoryStream m)
  {
  }

  public override void DeserializeAnimal(MemoryStream m)
  {
  }
}
生物テンプレートの骨組み

 生物プログラムで最低限必要となる最初の処理は、イベント・ハンドラの設定だ。まずこれを行わないことには、発生するイベントを受け取ることができない。なぜか「Terrariumオブジェクト・モデル」には記載されていないが、この設定は、生物がフィールドにIntroduceされるときに1度だけ呼び出される“Initialize”メソッドで記述する。このメソッドは、Organismクラスで定義されている仮想メソッドをオーバーライドして記述する。生物テンプレートでは、LoadイベントとIdleイベントの2つだけに対応しているのが分かる。

 SerializeAnimalメソッドとDeserializeAnimalメソッドは、生物がテレポートされるとき、あるいはテラリウム・アプリケーションが終了され、次に再開されるときに、それぞれ呼び出されるメソッドで、生物で独自に蓄積したデータをテレポート後や、次回の起動時にも使用したい場合には、これらのタイミングでデータをストリームへ読み書きすることができる。持ち越すようなデータがない場合には、メソッドを空にしておけばよい。この2つのメソッドはAnimalクラスで抽象メソッドとして宣言されているため、オーバーライドしておかなければコンパイル・エラーとなる。


 INDEX
  テラリウム徹底攻略ガイド(改訂版)
  第3回 オブジェクト・モデルと生物テンプレート
     テラリウムのオブジェクト・モデル概要
     オブジェクト・モデルのクラス構造
   生物テンプレートの詳細(1)
     生物テンプレートの詳細(2)
 
インデックス・ページヘ  「テラリウム徹底攻略ガイド(改訂版)」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間