ようやくチュートリアルの半分まで来ました……だんだん複雑になってきましたね……過去のチュートリアルは下記にありますので併せてご覧ください。
- 【PCゲーム】Screeps: Arenaの遊び方(チュートリアル「Loop and import」)を日本語に!和訳して解説!(その1)
- 【PCゲーム】Screeps: Arenaの遊び方(チュートリアル「Simple move」)を日本語に!和訳して解説!(その2)
- 【PCゲーム】Screeps: Arenaの遊び方(チュートリアル「First attack」)を日本語に!和訳して解説!(その3)
- 【PCゲーム】Screeps: Arenaの遊び方(チュートリアル「Creeps bodies」)を日本語に!和訳して解説!(その4)
各チュートリアルは別途記事にしてありますので、他のチュートリアルは下記を参考にしてください。
- Loop and import(ループとインポート)
- Simple move(単純な移動)
- First attack(初めての攻撃)
- Creeps bodies(クリープの各パーツ)
- Store and transfer(エネルギーのストアと転送)
- Terrain(地形)
- Spawn creeps(クリープを生成)
- Harvest energy(エネルギーの採取)
- Construction(工事・建築)
- Final test(最終試験)
Store and transfer(エネルギーのストアと転送)
さまざまな分野で利用できるさまざまなリソースがあります。 一般的なリソースタイプはRESOURCE_ENERGY
です。 これは、構造物の構築、クリープの生成、およびその他の種類のアクティビティに使用するリソースです。 このチュートリアルのステップでは、エネルギーを使用してTower
(タワー)を充電し、遠くにいる敵を倒します。 タワーは距離とともに効率が低下しますが、50タイルの範囲で射撃できます。
tower.attack(target);
すべてのショットは、store
(ストア)から10エネルギーを消費します。 エネルギーをロードするには、エネルギーをtransfer
(転送)するクリープを使用する必要があります。
creep.transfer(tower, RESOURCE_ENERGY);
タワーで砲撃出来るけど、そのためにはエネルギーが必要で、そのエネルギーを転送(transfer
)するクリープが要るってことか
どこでエネルギーを得るのか? store
にある程度のエネルギーがあるContainer
(コンテナ)があります。 それにクリープを移動し、エネルギーをwithdraw
(引き出す)ことができます:
creep.withdraw(container, RESOURCE_ENERGY);
タワーにエネルギーがロード(充填)されたら、ターゲットを攻撃して破壊します。
以下のサンプルコードを使用する場合は、今までとは別の方法でimport
していることに注目してください(この方法でも全く問題ありません)。個々を具体的に定義するのではなく、ルートの/game
モジュールから名前空間全体をimport
します。 どのアプローチがあなたにとってより便利であるかを決めるのはあなた次第です。
目的:敵のクリープを倒します。
サンプルコード
import { prototypes, utils, constants } from '/game';
export function loop() {
const tower = utils.getObjectsByPrototype(prototypes.StructureTower)[0];
if(tower.store[constants.RESOURCE_ENERGY] < 10) {
var myCreep = utils.getObjectsByPrototype(prototypes.Creep).find(creep => creep.my);
if(myCreep.store[constants.RESOURCE_ENERGY] == 0) {
var container = utils.getObjectsByPrototype(prototypes.StructureContainer)[0];
myCreep.withdraw(container, constants.RESOURCE_ENERGY);
} else {
myCreep.transfer(tower, constants.RESOURCE_ENERGY);
}
} else {
var target = utils.getObjectsByPrototype(prototypes.Creep).find(creep => !creep.my);
tower.attack(target);
}
}
前回までのサンプルコードではimport
を/game/utils
や/game/prototypes
モジュールで行ていましたが、今回のサンプルでは/game
モジュール全体からimport
する方法をとっているようです。これでも何も問題ないとのことですので、自分のプレイスタイルに合わせて記述法を変えて大丈夫です。
まとめ
- エネルギーの現在のストア値は
tower.store[constants.RESOURCE_ENERGY]
のように表現する - エネルギーを採取する場所は
StructureContainer
- エネルギーを引き出すには
myCreep.withdraw(container, constants.RESOURCE_ENERGY)
のようにクリープがwithdraw
することによって開始出来る withdraw
によって採取場所を引き出し始めたらmyCreep.transfer(tower, constants.RESOURCE_ENERGY)
のようにtransfer()
メソッドでエネルギーを転送出来る
エネルギーのストアと転送についてのチュートリアルですが、慣れるまで時間がかかりそうですね……