前回はmoveTo()メソッドの使い方のチュートリアルを紹介しました。過去の記事は下記になりますので参考にしてみてください。
それでは3番目のチュートリアル「First attack」を日本語にしていきましょう。
各チュートリアルは別途記事にしてありますので、他のチュートリアルは下記を参考にしてください。
- Loop and import(ループとインポート)
- Simple move(単純な移動)
- First attack(初めての攻撃)
- Creeps bodies(クリープの各パーツ)
- Store and transfer(エネルギーのストアと転送)
- Terrain(地形)
- Spawn creeps(クリープを生成)
- Harvest energy(エネルギーの採取)
- Construction(工事・建築)
- Final test(最終試験)
First attack ーはじめての攻撃ー
ScreepsArenaはマルチプレイヤーPvP(著者注:Player versus playerの略)です。自機は対戦相手のクリープと戦うのでそれを学びましょう。
どのクリープがあなたのものであるかを判断する方法は? 指定された条件の配列の要素を返す標準のJavaScriptのArray.filter
またはArray.find
メソッドを使用します。Creep
オブジェクトのmy
プロパティに基づいて判断します。
import { getObjectsByPrototype } from '/game/utils';
import { Creep } from '/game/prototypes';
export function loop() {
var myCreep = getObjectsByPrototype(Creep).find(creep => creep.my);
var enemyCreep = getObjectsByPrototype(Creep).find(creep => !creep.my);
}
著者
Creepオブジェクト(配列)をfindで回して、自機はcreep.my
で、敵は!creep.my
で表すんですね。「!」は否定なんで、自機以外という意味です。
これで、攻撃方法を使用して敵を倒すことができます。 ターゲットに到達できないときに戻るため、最初にmoveToを使用する必要があります。
if(myCreep.attack(enemyCreep) == ERR_NOT_IN_RANGE) {
myCreep.moveTo(enemyCreep);
}
目的:敵のクリープを倒します。
サンプルコード
import { getObjectsByPrototype } from '/game/utils';
import { Creep } from '/game/prototypes';
import { ERR_NOT_IN_RANGE } from '/game/constants';
export function loop() {
var myCreep = getObjectsByPrototype(Creep).find(creep => creep.my);
var enemyCreep = getObjectsByPrototype(Creep).find(creep => !creep.my);
if(myCreep.attack(enemyCreep) == ERR_NOT_IN_RANGE) {
myCreep.moveTo(enemyCreep);
}
}
まとめ
- 自機は
getObjectsByPrototype(Creep).find(creep => creep.my)
のようにmy
プロパティで判定 - 敵は
!creep.my
で判定 attack(ターゲット)
で敵を攻撃。範囲外かの判定は定数ERR_NOT_IN_RANGE
で測定ERR_NOT_IN_RANGE
は/game/constantsからimportする必要あり