連載:世界のWebサービス 第10回 モバイルWebアプリケーション 2.生存競争に勝ち抜くには田口景介 |
EcoSystemモードを試してみると、うまく繁殖する動物、できない動物がいることに気がつくだろう。Terrariumの世界を生き抜くには、実世界と同じように効率よく食料を調達し、外敵から身を守り、子を産み、テリトリーを拡大できることが条件になるが、むやみに拡大路線を追求しても成功はしない。草食動物が植物を食べすぎればこれを枯らしてしまい、結局は自分たちの首を絞めることになる。肉食動物が、食べるつもりもないのに、やみくもに草食動物を狩ってしまえば、やはり同じ結果になる。さらに、いくら足が速い動物でも、常に全速力で移動していてはすぐに体力を使い果たし、餓死してしまう。無駄なく行動し、効率よくエネルギーを摂取し、敵を退け、次の世代を生み出さなければ生存競争には勝ち抜くことはできないのだ。
■能力値の配分で動物の基本生態を決定する
Terrariumへ参戦するためには、プレイヤーは草食動物か肉食動物を選択し、.NET Class Library(DLL)としてAnimalオブジェクトを開発する。開発に必要なクラス・ライブラリはTerrariumと同じディレクトリにインストールされている。Terrariumは.NET
Framework上に実装されているため、開発にはC#、VB.NET、JScript.NETなど、CLR対応プログラミング言語ならばいずれも利用できる。
動物の生態は、下の「能力値」表に示す7つの能力値と、プログラミング・コードで決定される。能力値によって、攻撃力、移動速度、視界の広さなど、生物が持って生まれた能力が決定される。プレイヤーは与えられた100ポイントをこの7つの能力値に自由に割り振り、動物の基本的な性格を決定する。たとえば草食動物ならば、敵や食料を見つけるための「EyesightPoints(視界の広さ)」と、肉食動物から逃れるための「CamouflagePoints(偽装能力)」に多めにポイントを割り振るといいかもしれない。また肉食動物ならば、獲物を逃さないように「MaximumSpeedPoints(移動速度)」と「AttackDamagePoints(攻撃力)」へポイントを割り振るといいかもしれない。RPGにおけるキャラクタ・メイキングと同じ要領だ。こうして割り振られた能力値がゲーム中に変化することはない。なお、すべての能力値にはあらかじめ10ポイントずつ割り当てられているので、たとえMaximumSpeedPointsが0でも移動することは可能だ。
能力 | 値の意味 |
AttackDamagePoints | 攻撃力 |
CamouflagePoints | 偽装能力。高いほど見つかりにくい |
DefendDamagePoints | 防御力 |
EatingSpeedPoints | 食料の摂取速度。早いほど敵に見つかる前にエネルギーを補給できる |
EyesightPoints | 視界の広さ。広いほど敵を発見しやすく、食料を求めて無駄にエネルギーを消耗せずにすむ |
MaximumEnergyPoints | 最大エネルギー |
MaximumSpeedPoints | 移動速度 |
能力値(草食動物と肉食動物で共通) |
能力値以外にも、下の「アトリビュート」表に示す、「MatureSize(サイズ。25〜48の間で指定する)」、「CarnivoreAttribute(trueならば肉食動物、falseならば草食動物)」などのアトリビュートを設定し、基本設定は完了である。
アトリビュート | 値 |
MatureSize | サイズ。25〜48の間で指定する |
CarnivoreAttribute | trueならば肉食動物、falseならば草食動物 |
AnimalSkin | 動物の外見をAnimalSkinFamilyEnumから選択する |
MarkingColor | 全体図に表示されるマーカーの色(未実装?) |
OrganismClass | プレイヤーが定義したAnimalクラスのサブクラスを指定する |
アトリビュート |
■プログラム・コードで行動パターンを定義する
能力値の配分を終えたら、次にプログラミング・コードで動物の行動を定義する。動物はプログラムされていない行動をとることはいっさいないので、適切に指示しなければ身動き1つしないまま餓死するか、老衰で死ぬ。自分と獲物の間に障害物(たとえば植物)があれば、これを迂回して近づくようプログラムしなければ、障害物に引っかかったまま短い生涯を終えるはめになる。最低でも食料の調達(獲物あるいは植物の発見、移動、攻撃、捕食)と出産が適切に行われなければ、ゲーム開始からものの数分で種族は絶滅してしまうだろう。とにかく、いやになるくらいプログラムに忠実に行動するので、行動パターンを細かく計画し、コードに反映させる必要がある。
Terrariumのクラス・ライブラリには76のクラスが定義されているが、動物のスケルトンとなるクラスが「Animalクラス」である。草食動物と肉食動物を定義するには、このAnimalクラスのサブクラスを定義して、コードを追加することになる。「Plantクラス」のサブクラスを定義して植物を作ることもできるが、わざわざ植物を自前で開発してもおもしろくはないだろう。植物にできることはほとんどないうえ、効率的に光合成を行うため、何もしなくても繁殖できるからだ。なお、AnimalクラスとPlantクラスはどちらも「Organismクラス」のサブクラスとして定義されている。
動物の行動パターンを決めたら、下の「アクションを起こすメソッド」表に示すAnimalクラスおよびOrganismクラスのメソッドを利用して、コードに反映させていく。
メソッド | アクション |
Scan | 視界内にいる生物の一覧を取得する |
LookFor | 目的の生物の情報を取得する |
BeginMoving | 指定した座標へ指定した速度で直線移動する |
BeginAttacking | 目的の生物へ攻撃する |
BeginDefending | 防御する |
BeginEating | 目的の生物を食べる |
BeginReproduction | 出産する |
アクションを起こすメソッド(一部抜粋) |
メソッドを呼び出して何かしらアクションを起こすと、その結果がイベント(下の表)として得られるので、次のアクションにつなげる。これが動物の基本的行動パターンとなる。基本的には、「Idleイベント」で獲物を探して移動を開始し、「MoveCompletedイベント」で獲物に攻撃を加えたり、獲物を食べたりすることになるだろう。
イベント | 意味 |
AttackCompleted | 攻撃終了 |
Born | 生まれたときに一度だけ発生する |
Reproduction | 出産した |
DefendCompleted | 防御終了 |
EatCompleted | 食事終了 |
Idle | 定期的に発生する |
MoveCompleted | 移動終了 |
Teleported | テレポートされた |
イベント(一部抜粋) |
INDEX | ||
[連載]世界のWebサービス―― 究極のWebサービスを求めて ―― | ||
第10回 マルチプレイヤー・ネットワーク・ゲームTerrarium | ||
1.EcoSystemモード(マルチ・プレイヤー・モード) | ||
2.生存競争に勝ち抜くには | ||
3.サンプル肉食動物 | ||
「世界のWebサービス」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|