codecombat-forest-top

プログラミングの学習を、Webゲーム感覚で気軽に始められるサービス「CodeCombat」の攻略記事です。(無課金でも楽しめるステージのみを紹介しています…)

今回は、辺境の森林編Part2ということで「森のクリーバー」から「MIND THE TRAP」までを1つずつ攻略していきます!

codecombat-forest

森のクリーバー

このステージから「cleave()」という必殺技が使えるようになり、周囲の敵を一瞬で蹴散らすことができます。

ただし、一度「cleave()」を発動すると、しばらく再発動できないので、その間は通常の攻撃を行う必要があります。

this.moveXY(23, 23);
loop {
    var enemy = this.findNearestEnemy();
    if (this.isReady("cleave")) {
        this.cleave(enemy);
    }
    else {
        this.attack(enemy);
    }
}

ポイントは、新コマンド「isReady()」を「if()」で利用するという点。

「isReady()」で指定した技が使える状態であれば「true」となり、使えなかったら「false」になる便利コマンドなので覚えておきましょう。


盾で勝利

このステージでは新コマンド「shield()」が使えるようになっており、4割近いダメージを吸収してくれます。

この特性を活かし、「cleave()」が使えない間は「shield()」を発動するようにプログラミングすればOKです。

loop {
    var enemy = this.findNearestEnemy();
    if(this.isReady("cleave")) {
        this.cleave(enemy);
    }
    else {
        this.shield();
    }
}

果し合いの場

もう一人のヒーローが出現するので、ひたすら攻撃をして倒すというステージです。

loop {
    var enemy = this.findNearestEnemy();
    if (this.isReady("cleave")) {
        this.cleave(enemy);
    }
    else {
        this.attack(enemy);
    }
}

「cleave()」を入れずに「attack()」だけでも倒せるようです。


農民を守る

左右から次々現れる敵を倒しつつ、農民を守り抜くのがこのステージの目標です。

新コマンド「distanceTo()」を使うと、自キャラと敵キャラの距離を測定できるようになるので、ある一定の距離まで近づいたら攻撃をするという処理が実現できます。

loop {
    var enemy = this.findNearestEnemy();
    var distance = this.distanceTo(enemy);
    if (distance < 12) {
        this.attack(enemy);
    }
    else {
        this.moveXY(40, 38);
    }
}

農民と同じ座標位置にいながら、一定の距離をキープしつつ攻撃するようにしましょう。


マンチキンの群れ

コメントに書かれている指示通りに、プログラミングしていけばOK!

loop {
    // 一番近くの敵への距離を調べる
    var enemy = this.findNearestEnemy();
    var distance = this.distanceTo(enemy);

    // 10メートル以内に敵が近づいていれば、その敵をcleaveしよう!
    if(distance < 10) {
            // cleaveが使える状態であるかを確認
            if(this.isReady("cleave")) {
                this.cleave(enemy);
            }
    }

    // そうでなければ、"Chest"という名前の箱をattackしよう
    else {
        this.attack("Chest");
    }
}

今回のステージでは、「isReady()」を使わなくてもクリアできるかと思いますが、念のため上記のように確認をしておくのがベストでしょう。


動きながら不動

このステージも、コメントに書かれている指示通りにプログラムを組み立てましょう。

loop {
    var enemy = this.findNearestEnemy();
    
    if(enemy) {
        // distanceToを使って、距離を保存したkyoriという変数を作ろう
        var kyori = this.distanceTo(enemy);

        // 敵までの距離が4メートル以下(< 5)なら、attack()
        if(kyori < 5) {
            this.attack(enemy);
        }

        // そうでなければ(つまり、敵が遠くにいるなら)、shield()
        else {
            this.shield();
        }

    // そうでなければ(つまり、敵がいないなら)。。。
    } else {
        // 。。。X印に戻る
        this.moveXY(40, 34);
    }
}

「if/else」が増えてくると、徐々に混乱してきますが、しっかりとコメントを書きつつ段落も適度につけて見やすく整理しておくと良いですね。


アグリッパの防御法

「マンチキンの群れ」ステージでプログラミングした内容とほぼ同じでOKでしょう。

loop {
    var enemy = this.findNearestEnemy();

    if(enemy) {
        // distanceToを使って敵までの距離を測ろう
        var distance = this.distanceTo(enemy);

        // その距離が4メートル以下なら。。。
        if(distance < 4) {
            // cleaveの準備が整っているなら、cleaveしよう!
            if(this.isReady("cleave")) {
                this.cleave(enemy);
            }

            // そうでなければ、普通にattackしよう
            else {
                this.attack(enemy);
            }
        }
    }
}

このステージの場合、「if(enemy) {}」とすることで、敵がいない間は何もしないという行動をとるようにしています。


コイン祭り

このステージから、マウスで「旗」をマップ上に配置することが出来るようになります。

これで、旗がある場所に自動で自キャラが移動してくれるようになるので、実際に試してみましょう…というデモステージです。

codecombat-forest-flag

プログラミングは不要のステージですが、コードを見てみると「findFlag()」で旗の「有無」を確認し、「pickUpFlag()」で自動的に旗のある場所まで移動する仕組みになっているのが分かります。

ちなみに、「findFlag()」は3色の旗を識別できるようになっているので、これらを使うと複雑な条件分岐も作れるでしょう。


銅の草地

こちらもプログラミング不要のステージです。

ただし、特徴的なコードになっており、今まで敵を発見するには「findNearestEnemy()」を使っていましたが、近くのアイテム(コイン)を発見する場合は「findNearestItem()」が利用できることが分かります。

loop {
    var flag = this.findFlag();
    if (flag) {
        // 旗を取る(pickUpFlag)
        this.pickUpFlag(flag);
    } else {
        // 自動的に一番近くの目に見えるアイテムに移動
        var item = this.findNearestItem();
        if (item) {
            var position = item.pos;
            var x = position.x;
            var y = position.y;
            this.moveXY(x, y);
        }
    }
}

「findNearestItem()」は、座標位置を含む情報を利用することが出来るようになっており、変数「item」に「.pos」を付けることで、「x, y」の座標を取得できるようになっています。


森の峠を守ろう!

今までと違い、ちょっとアクション性の高いステージ構成になっています。

旗を使って、大量の敵を左側の「待ち伏せ隊」がいる道へ誘導する必要があります。

codecombat-hold-the-forest-pass

そのため、旗のある場所へ移動するコマンド「pickUpFlag()」と、攻撃コマンド「attack()」を組み合わせたプログラミングをしましょう。

loop {
    var enemy = this.findNearestEnemy();
    var flag = this.findFlag();
    if(flag) {
        // 旗を取る
        this.pickUpFlag(flag);
    } else if (enemy) {
        // 戦おう!
        this.attack(enemy);
    }
}

また、HPが300以上は欲しいところなので、今回は「鉄の兜」を装備しておきました。

codecombat-hold-the-forest-pass-item

金持ちの探しまわる人

このステージでは、自動的に旗の近くへ移動し、敵を倒し、アイテムを取得するためのプログラミングが必要となります。

loop {
    var flag = this.findFlag();
    var enemy = this.findNearestEnemy();
    var item = this.findNearestItem();

    if (flag) {
        // 旗を見つけたら、どうすればいい?
        this.pickUpFlag(flag);
    }
    else if (enemy) {
        // 敵を見つけたら、どうすればいい?
        this.attack(enemy);
    }
    else if (item) {
        // アイテムを見つけたら、どうすればいい?
        var itemX = item.pos.x;
        var itemY = item.pos.y;
        this.moveXY(itemX, itemY);
    }
}

このステージも、さらに体力が必要となるので「銅の盾」を装備しておきました。

codecombat-rich-forager-item

MIND THE TRAP

敵が2班に分かれて出現するので、旗を置いた近くの敵だけを倒すようにし、1班ずつ撃破するように旗を置いて指示しましょう。

codecombat-forest-mind-the-map

コードはこちら!

loop {
    var flag = this.findFlag();
    var enemy = this.findNearestEnemy();
    
    if(flag) {
        this.pickUpFlag(flag);
        this.say("I should pick up the flag.");
    } else if(enemy) {
        var distance = this.distanceTo(enemy);
        if(distance < 10) {
            this.attack(enemy);
        }
    }
}

「say()」コマンドは無くてもいいですが、デフォルトで記載されているのでそのままにしてます。


「辺境の森林編Part3」に続く…

「CodeCombat攻略まとめ」はこちら!