【PCゲーム】Screeps: Arenaの遊び方(チュートリアル「Harvest energy」)を日本語に!和訳して解説!(その8)

Screeps:Arena開始画面JavaScript

チュートリアル「Store and transfer」(その5)でエネルギーの貯蔵と転送についての説明がありましたが、今回のチュートリアルではエネルギーの採掘(摂取)についてです。

チュートリアルの全記事は以下になります。

  1. Loop and import(ループとインポート)
  2. Simple move(単純な移動)
  3. First attack(初めての攻撃)
  4. Creeps bodies(クリープの各パーツ)
  5. Store and transfer(エネルギーのストアと転送)
  6. Terrain(地形)
  7. Spawn creeps(クリープを生成)
  8. Harvest energy(エネルギーの採取)
  9. Construction(工事・建築)
  10. Final test(最終試験)

Harvest energy(エネルギーの収穫)

エネルギー資源はさまざまな形で利用できます。コンテナに保管できますが、Sources(ソース・資源)から収穫することもできます。クリープにWORKボディパーツがある場合、Harvest()メソッドを使用してソース(資源)からエネルギーを抽出できます。

creep.harvest(source);

このアクションを呼び出すには、クリープをソースの近くに配置する必要があります(著者注:サンプルコードを読む限りではERR_NOT_IN_RANGEで判別するみたいです)。 WORKボディパーツが多いほど、ティック(著者注:loop()内の実行数、ターン数?のことをこのゲームではティックと呼んでいます)ごとにソースから抽出できるエネルギー量が多くなります。ソース内のエネルギーの蓄えは無限であり、労働者のクリープが可能な限り抽出することができます。

目的:1000のエネルギーを収穫してスポーンに転送します

サンプルコード

import { prototypes, utils, constants } from '/game';

export function loop() {
    var creep = utils.getObjectsByPrototype(prototypes.Creep).find(i => i.my);
    var source = utils.getObjectsByPrototype(prototypes.Source)[0];
    var spawn = utils.getObjectsByPrototype(prototypes.StructureSpawn).find(i => i.my);

    if(creep.store.getFreeCapacity(constants.RESOURCE_ENERGY)) {
        if(creep.harvest(source) == constants.ERR_NOT_IN_RANGE) {
            creep.moveTo(source);
        }
    } else {
        if(creep.transfer(spawn, constants.RESOURCE_ENERGY) == constants.ERR_NOT_IN_RANGE) {
            creep.moveTo(spawn);
        }
    }
}

まとめ

ちょっとサンプルコードがややこしいかもしれませんが、落ち着いて一行一行見ればそんなに難しくはないはずです。

creep.store.getFreeCapacity(constants.RESOURCE_ENERGY)が0より多ければ(trueであれば)、harvest()でエネルギーを抽出し、0以下であれば(falseであれば)transfer()でエネルギーを転送していますね。さらにその中のif文では、ERR_NOT_IN_RANGEで近くに対象があるか判別して、なければmoveTo()で近づくという処理をしているようです。

タイトルとURLをコピーしました