ボスは一筋縄では倒せない。
なぜなら行動が多様だからだ。
動作がワンパターンであれば、すぐに適当な対策がとられてしまう。
例えば、残り体力の如何によって行動が変化するパターンがある。
script.js
let HP = 5;//体力
function act(){
if(HP >= 3){
console.log("通常攻撃");
} else {
console.log("特殊攻撃");
}
}
act();
これは体力が3以上であれば通常攻撃、3未満であれば特殊攻撃をするボスの行動パターンだ。
分かりやすくて何よりだが、できればif文を使いたくない。
そこで次のような工夫をする。
script.js
let HP = 2;
const standard = 2;
function normal(){
console.log("通常攻撃");
}
function special(){
console.log("特殊攻撃");
}
let actAry = [special, normal];
actAry[Math.sign(Math.floor(HP/standard))]();
HP>=standard
であればMath.sign(Math.floor(HP/standard))
の値は1であり、そうでなければ0となる。
他にもこういうことができる。
script.js
let boss = {};
boss.state = 0;
boss.act1 = function(){
console.log("attack");
}
boss.act2 = function(){
console.log("rest");
}
boss.act3 = function(){
console.log("move");
}
boss.act4 = function(){
console.log("specialAttack");
}
boss.action = [boss.act1, boss.act2, boss.act3, boss.act4];
boss.act = function(){
boss.action[boss.state]();
boss.state = (boss.state+1)%boss.action.length;
}
boss.act();
ボスが行動する度にstateの値がぐるぐると変化し、stateに応じたactionを行う。