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

テラリウム 1.1 最新情報

海津智宏+デジタルアドバンテージ
2003/05/10

 ここでは、以前のテラリウム1.0と、今回の1.1の違いや、新しいコンテスト情報についてまとめる。今回初めてテラリウムに触れる人にとっては唐突ではあるが、オリジナル記事を読んだ読者が効率よく最新情報を読めるように、1.0と1.1の違いについてはこのページに集約することにした。テラリウム初心者の方は、以後の記事を読み進んでから、もう一度このページをお読みいただけばよいだろう。

コンテスト情報

 生物を作成してテラリウムのエコシステムに放ち、繁殖した個体数を競うという点では、今回のコンテストも前回のコンテストも同じである。ただし今回は、開催期間や参加資格が前回から変更されている。

■開催期間
 前回のコンテストは、1回のみの開催だったが、今回は2週間ごと、2回に分けて対戦が行われることになった。このうち第1戦は5月9日〜5月24日まで、第2戦は5月30日〜6月14日まで行われる。第1戦と第2戦はまったく同じシステムで行われ、第1戦中に作成したコードも第2戦でそのまま投入することができる。この場合でも、順位付けなどではそれぞれが独立したものとして扱われる。ただし、第1戦の上位5位までの入賞者は、第2戦の入賞選考からは除外される。

■参加資格
 昨年のコンテストでは、参加者の制限は特になかったが、今年は基本的に学生のみがコンテストの対象とされている。学生以外の人が生物を投入すること自体は可能だが、こちらは「OB/OG戦」として、現役学生とは別に順位が付けられる。また、これとは別に、MSDNアカデミック・アライアンス会員である学科や研究所、ゼミなどに所属している学生は、通常の個人戦に参加すると同時に、ほかの学生と5人でチームを組む「団体戦」に参加することもできる(5人が個人戦に登録した後で、さらに団体登録を行う)。

■入賞商品
 個人戦、団体戦、OB/OG戦のそれぞれについて、上位に入賞すると、マイクロソフトから賞品が贈られる。最も豪華な賞品は、個人戦の上位2名に与えられるPocketPCである。

 今回特徴的なのは、上位者入賞者だけでなく、特別賞(第1戦の17位と、第2戦の8位)が用意されており、いずれもXboxを獲得できる点だ。テラリウムに初めてトライする人や、.NETプログラミングに慣れていない人にとっては、上位入賞は少々困難かもしれない。しかし、とりあえず参加して生物が全滅しないようにしておけば、周りの状況にもよるが、初心者でも十分狙える順位だと思われる。

 ちなみにこれ以外では、マイクロソフト製マウス(ワイヤレス、オプティカルなど)、USBフラッシュ・メモリなどがある。詳しくは以下のマイクロソフトの解説ページを参照されたい。

テラリウムのインストールとセッティング

 テラリウム 1.1のインストールと設定に関しては、特に以前と変わっている点はない。インストールと設定の具体的な手順についてはすぐ次で述べる。

 ただし今回テストしたところでは、テラリウムの初回起動時に「DLLのバージョンが一致していない」というエラー(下の画面参照)が表示されることがあるようだ。このエラー表示は無視して起動しても、特に問題なくテラリウムは利用できるようなので、そのまま[いいえ]を選んでおけばよい。

テラリウム起動時に表示されるエラー
原因は不明だが、このようなエラーが発生する場合がある。ただし、テストしたかぎりでは問題はないようなので、[いいえ]をクリックして先に進んでよい。

テラリウム1.1とテラリウム1.0の違い

 新しいテラリウム1.1(アセンブリのバージョンは1.0.21)は、従来のテラリウム1.0(同1.0.20)とほぼ同じものであり、昨年作ったコードが手元に残っているならば、それをそのままコンパイルし直すだけで、テラリウム1.1でも動かすことができる(コンパイル時に1.1用のorganismbase.dllを使用する必要があるので、プログラムの再コンパイルは必要である)。

 しかしテラリウム1.1では、いくつかの点で機能の追加・変更が行われている。具体的には「Antennasプロパティ」による生物同士の通信、肉食動物が病気にかからなくなったこと、デバッグ機能が強化されたこと、の3点である。以下、これらについてそれぞれ詳しく説明しよう。

Antennasプロパティによる通信機能の追加

 テラリウム1.0では、同じ種の生物間でも情報をやりとりする標準的な手段は用意されていなかった(このためオリジナルの連載では、生物間の通信機能を独自に実装した)。これに対しテラリウム1.1では、Animal、AnimalStateの各クラスにAntennasプロパティ(AntennaStateクラス。antenna=アンテナ=触角)が追加され、動物(肉食動物あるいは草食動物)同士で通信ができるようになった。

 AntennaStateクラスにはAntennaValue、LeftAntenna、RightAntennaの3つのプロパティがあり、それぞれの生物が設定した値をAnimalState経由で読み取ることによって生物間での通信が可能となる。なお、AnimalStateクラスのプロパティには、値は設定できないので注意が必要である(AnimalStateクラスは、ほかの生物の状態を確認する目的にのみ使われる)。値を設定する場合はAnimalクラスのAntennasプロパティを使わなければならない。

■AntennaPositionによる通信

 Animalクラスでは、Antennas.LeftAntenna、Antennas.RightAntennaの2つのプロパティにアクセス可能で、それぞれにAntennaPosition列挙体で定義された次の10個の値の中から1つをセットすることができる。

名前 数値
Left 0
Right 1
Top 2
Bottom 3
UpperLeft 4
UpperRight 5
BottomLeft 6
BottomRight 7
Forward 8
Backward 9
AntennaPosition列挙体の値

 つまり、すべての生物(植物を除く)には2本の触覚が生えており、それぞれの触覚を独立して10通りの方向に向けることができるわけだ。よって、合計で100通りの状態をほかの生物に伝えることができるようになっている。

■AntennaValue による通信

AntennaPositionに加えて、Antennas.AntennaValueにも、0〜99の値をセットすることができる。これはLeftAntennaやRightAntennaとは独立に設定可能で、以上すべてを組み合わせれば、最大1万通りの状態を通信できることになる。

Antennasプロパティ
このプロパティを使えば、仲間同士の通信が可能である。

 この通信機能を使えば、動物間で連携して敵を攻撃したり、逆に攻撃から身を守ったりできるようになるだろう。応用のアイデアについては、各人で工夫していただきたい。

生存力バランスの調整

 テラリウム1.0では、肉食動物は成長に草食動物の2倍の時間を必要とするにもかかわらず同じ確率で病気になるなど、草食動物よりかなり不利な状況にあった 。実際、昨年のコンテストの順位を見ると、上位はほとんど草食動物で占められている。そこで、テラリウム1.1では、病気発生のアルゴリズムを変更することで、肉食動物が不利にならないように調整されている。

 テラリウムでは、クライアントの処理速度が追いつかなくなると、病気を発生させて生物を減らすようになっている。これはテラリウム1.0からある機能である。病気にかかる生物は次のように決定される。

  1. 個体数が10より多い種を選び、その中の1匹を病死させる。
  2. 1.を繰り返してもまだ生物の数が多いとき は、個体数が10以下の種もランダムに選び、その中の1匹を病死させる。

 テラリウム1.1では、このアルゴリズムが肉食動物には適用されないことになった。すなわち、肉食動物は病気にはまったくかからなくなった。前述したとおり、これにより肉食動物はテラリウム1.0のときよりも有利になる。このような変更を行っても、草食動物が減れば自然と肉食動物も減るはずなので(肉食動物の食物が減るため)、特に問題はないのだろう。

デバッグ環境の強化

 テラリウムの世界では、生物はグリッド単位の一定領域を占め、生物同士の衝突などもグリッド単位で判定されている(グリッドの詳細については、後述する第5回 KAnimalクラスを使った肉食動物の作成の「KAnimalクラスのGetBypassメソッド」を参照)。テラリウム1.0ではグリッドの概念がやや分かりづらく、障害物回避の設計などが困難だったが、テラリウム1.1では、このグリッド線を画面に表示する機能などが追加された。これらを表示させるには、Game Settingsの[Graphics]ページで設定を行う。

設定項目 内容
Game View ゲーム画面の表示。これを消すと何も表示されなくなる
Bounding Boxes 生物が占有するグリッドを表示する
Background Grid 画面全体にグリッド線を表示する
Destination Lines 生物の行き先目標を線で表示する

 これらの表示をオンにすることで、自分の作成したコードが期待どおりに動いているのかどうかがより分かりやすくなり、デバッグも容易になる。例えばBounding Boxesを表示すると、生物同士が接触しているかどうかがはっきり分かるようになり、接触条件によって生物の動作が変わることを目で確認することができるし、Destination Linesを表示すれば、その生物が今どこをターゲットとして動いているのかが把握できる。テラリウム1.0では分かりづらかったグリッドだが、これらのオプションをオンにしてゲーム画面を眺めれば、ゲームがグリッド単位で制御されているということがよりはっきりと分かるようになるだろう。

強化されたデバッグモード
それぞれの生物の占める領域や移動目標を確認できる。

 また、WriteTraceメソッドによるデバッグ用メッセージは、これまでテラリウムのTraceWindowにしか出力されなかったが、テラリウム1.1では、Visual Studio .NET(以下VS.NET)の「出力ウィンドウ」など、外部のデバッグ・ツールへの出力も可能になった。これにより、より柔軟なデバッグ、開発作業が行えるようになるだろう。

 この機能は、Game Settingsダイアログの[Performance]にある[Enable Animal Trace Logging for use with DBMon]の項目で[Selected Only]もしくは[Full]を選ぶことにより使用可能となる。[Selected Only]はゲーム画面上で選択された生物のWriteTraceの出力のみを表示する。[Full]はすべての生物に関してWriteTraceの出力結果を表示する。なお、TraceWindowでは出力が逆順に表示される(つまり新しい出力ほど上に表示される)が、外部出力では正順に出力される。

外部デバッグ・ツールへの出力設定
[Enable Animal Trace Logging for use with DBMon]を[Selected Only]もしくは[Full]にすることで、WriteTraceの出力結果が外部デバッグ・ツールにも出力されるようになる。

■Visual Studio .NETによる生物のデバッグ

 VS.NETを使用してデバッグを行う場合の具体的な流れを説明しておこう。テラリウムを起動してTerrariumモード(自分のマシンで閉じた生態系。詳細は後述の「第2回 生物プログラミング始めの一歩『Terrariumモードでのテスト』」の節を参照)に切り替え、デバッグを行う対象となる生物をIntroduceしておく。

 必要に応じて、いったんテラリウムはポーズしておき(VS.NETでの作業中に時間が経過すると、投入した生物が絶滅してしまうこともあるため) 、VS.NETの[ツール]メニューから[デバッグ プロセス]を選ぶ。ここで表示される[プロセス]ダイアログの中から、「terrarium.exe」と表示されているプロセスを選び、[アタッチ]ボタンをクリックする(terrariumstart.exeではないので注意)。

[プロセス]ダイアログ
[ツール]メニューから[デバッグ プロセス]を選ぶと、[プロセス]ダイアログが表示される。terrarium.exeを選び「アタッチ」ボタンをクリックする。

 すると[プロセスにアタッチ]ダイアログが開くので、[Common Language Runtime]にチェックが入っていることを確認して[OK]をクリックする。

[プロセスにアタッチ]ダイアログ
[Common Language Runtime]にチェックが入っていることを確認して「OK」をクリックする。

 プロセスがアタッチできたら、[プロセス]ダイアログを[閉じる]ボタンで閉じ、テラリウムのポーズを解除する。するとVS.NETによるデバッグが開始され、出力ウィンドウにWriteTraceの結果が出力されるはずだ。

 また、Debug構成で生物をコンパイルしていれば、通常のプロジェクトのデバッグと同じように、ソース・コードにブレーク・ポイントを設定し、ステップ実行でデバッグを行うこともできる。

VS.NETでのデバッグの様子
出力ウィンドウにWriteTraceメソッドの出力結果が表示されている。
 

 INDEX
  テラリウム徹底攻略ガイド(改訂版)
  第1回 あなたのコードは生き残れるか
     テラリウムの世界
   テラリウム 1.1 最新情報
     インストールとセッティング
     見えざる神の手「テレポーター」
     Ecosystemデビューから絶滅まで
 
インデックス・ページヘ  「テラリウム徹底攻略ガイド(改訂版)」


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 記事ランキング

本日 月間