0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

配列に関数名を入れて、配列の中身を関数として呼び出す(JavaScript)

Posted at

ボスは一筋縄では倒せない。
なぜなら行動が多様だからだ。
動作がワンパターンであれば、すぐに適当な対策がとられてしまう。
例えば、残り体力の如何によって行動が変化するパターンがある。

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を行う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?