一度にたくさんのばくだんを置いた様子
今回は一度にたくさんのアイテムを置く方法を紹介します。まずは、具体的にどんなものが作れるようになるのか見ていきましょう
①プレイヤーの行く手をはばむモンスターの群れ
②入口が1マスだけの壁を建てる
③ばくだんでできた迷路
それでは、それぞれの作り方を順番に紹介します

1.プレイヤーの行く手をはばむモンスターの群れ

モンスターの群れを作るには、こんなコードを使います

for (let y = 0; y <= 9; y++) {
    // ここからスライム
    const item1 = new RPGObject(('▼ スキン', Skin.スライム));
    item1.family = ('▼ ファミリー', Family.ドクリツ);
    item1.hp = 3;
    item1.atk = 1;
    item1.locate(8, y, 'map1');
    item1.endless(async (self, count) => {
        await self.attack(); // こうげきする
        /*+ じどう*/
    });
    //ここまでスライム
}

これはfor文と言います。1行目のfor (let y = 0; y <= 14; y++) { に注目してください
今回のこのコードは、「y=0から始まって1づつ増えてゆき、y=9になるまで、{ }の中の処理を繰り返す」という意味です
{ }の中の処理とは、2〜12行目のスライムを作っているコードのことです。つまりスライムが何度も作られることになります
こんな感じに↓
縦に並んだスライムの群れ
さて、なぜ縦一列に並ぶのでしょうか、理由はスライムの場所を表したコードにあります

item1.locate(8, y, 'map1');

これはスライムの場所を、左から8番目、上からy番目の位置に置くという意味です
先ほど言ったように、yは0から始まって、9まで1づつ増え続けるので、今回のコードは

「スライムを(8, 0)の場所に出す」
「スライムを(8, 1)の場所に出す」
「スライムを(8, 2)の場所に出す」
「スライムを(8, 3)の場所に出す」
「スライムを(8, 4)の場所に出す」

「スライムを(8, 9)の場所に出す」

という処理を行っていたのです。本来ならスライムをゲームに15回追加して、15匹それぞれの場所のコードを書き換える必要があるのですが、for文を使うことで1度に15匹並べることができました

2.入口が1マスだけの壁を建てる

次は、for-of文を使って、1度にたくさんの壁を置くコードを紹介します

for (let x of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) {
	// ここからふしぎなかべ
	const item1 = new RPGObject(('▼ スキン', Skin.クレイ));
	item1.locate(x, 3, 'map1');
	// ここまでふしぎなかべ
}

前々回の記事で出てきた「配列」を使っています。[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]というのが配列です
このコードは「xには配列の値が1つづつ入り、最後の値が入るまで{ }の処理を繰り返す」という意味になります
横一列に並んだ壁
横に並んだ、ながーーい壁ができました。次はこの壁の1つを消して、入口を作ります
壁の場所を表すコードitem1.locate(x, 3, 'map1');に注目。これは壁を「左からx番目、上から3番目の位置に置く」という意味のコードです
xには配列の値が1つづつ入ります。そのため、配列[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]の値の中から1つを消すと……
壁に入口ができました

for (let x of [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14]) {
	// ここからふしぎなかべ
	const item1 = new RPGObject(('▼ スキン', Skin.クレイ));
	item1.locate(x, 3, 'map1');
	// ここまでふしぎなかべ
}

配列から7,を消したので、その部分に入口ができました!

3.ばくだんでできた迷路

ここまで使ったfor文と配列を応用することで、迷路のようにアイテムを置くことができます

const 配列 = [
    [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0],
    [0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0],
    [0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0],
    [1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0],
    [1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1],
    [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1],
    [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
];
for (let y = 0; y < 配列.length; y++) {
    const= 配列[y];
    for (let x = 0; x <.length; x++) {
        const 中身 =[x];
        // ここからオブジェクトを出す処理
        if (中身 === 1) {
            // ここからじげんばくだん
            const item1 = new RPGObject(('▼ スキン', Skin.ボム));
            item1.family = ('▼ ファミリー', Family.マップ);
            item1.locate(x, y, 'map1');
            item1.setTimeout(() => {
                const バクエン = item1.summon(('▼ スキン', Skin.バクエン));
                バクエン.velocityY = -1;
                バクエン.mod(Hack.createDamageMod(5)); // ダメージオブジェクトにする
                バクエン.destroy(20);
                item1.destroy();
            }, 500); // 爆発までのフレーム数(30Fで1秒)
            // ここまでじげんばくだん
        }
        // オブジェクトを出す処理ここまで
    }
}

このように書くことで……
ばくだんでできた迷路
とても面白いゲームですね

const 配列 = [
    [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0],
    [0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0],
    [0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0],
    [1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1],
    [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0],
    [1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1],
    [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1],
    [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
];

このコードが配列です。マップのマス目の数だけ配列の値があります
1になっている所に爆弾が置かれるので、書き換えて迷路を作ってみましょう
爆弾のダメージを変えたいときはバクエン.mod(Hack.createDamageMod(5));このコードの数字を書き換えます
また、爆発までの時間は}, 500); // 爆発までのフレーム数(30Fで1秒)という行を見てください。この500という数字が爆発まで時間を表しています