codecombat-forest-top

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

今回は、辺境の森林編Part3ということで「Signal Corpse」から最終ステージの「Siege of Stonehold」までを1つずつ攻略していきます!

codecombat-forest

Signal Corpse

このステージでは、旗の色を使い分けて攻撃するようにプログラミングしていきます。

「緑色」で近くの敵を攻撃し、「黒色」で必殺技のCleaveを発動するようにして、体力が少なくなったら後方の魔法使いに回復してもらうのを忘れないようにしましょう!

codecombat-forest-Signal-Corpse
loop {
    var green = this.findFlag("green");
    var black = this.findFlag("black");
    var nearest = this.findNearestEnemy();
    
    if (green) {
        this.pickUpFlag(green);
    } else if (black && this.isReady("cleave")) {
        this.pickUpFlag(black);
        // Cleave!
        this.cleave(nearest);
    } else if (nearest && this.distanceTo(nearest) < 10) {
        // Attack!
        this.attack(nearest);
    }
}

「if (black && this.isReady("cleave")) {}」は、旗が「黒色」でなおかつ必殺技のCleaveが使用できる状態であれば攻撃するという意味です。

「if (nearest && this.distanceTo(nearest) < 10) {}」は、敵が近くにいてなおかつ10m以内の場合のみ攻撃をするという意味になります。


Multiplayer Treasure Grove

このステージは、今まで学習してきたコーディングをフルに活用しなければいけないので、少し難しく感じるかもしれませんが、落ち着いて考えれば問題ありません!

codecombat-forest-multiplayer-treasure-grove

このステージの目的は、対戦プレイヤーよりも素早く「100コイン」ゲットすることなので、まずは旗を利用して近くのコインを取得するプログラミングを書いてみます。

loop {
    var flag = this.findFlag();
    if (flag) {
        this.pickUpFlag(flag);
    }
    else {
        var coin = this.findNearestItem();
        if (coin) {
            var position = coin.pos;
            var x = position.x;
            var y = position.y;
            this.moveXY(x, y);
        }
    }
}

これまでに何度か実行してきたプログラムだと思います。

これでも頑張れば「100コイン」ゲット出来るのですが、より確実に対戦プレイヤーに勝つためには、相手を攻撃するコードも追加するのが良いでしょう!

loop {
    var flag = this.findFlag();
    var enemy = this.findNearestEnemy();
    
    if (flag) {
        this.pickUpFlag(flag);
    }
    else {
        if(enemy) {
            var distance = this.distanceTo(enemy.pos);
            if(distance < 10) {
                if(this.isReady("cleave")) {
                    this.cleave(enemy);
                }
                else {
                    this.attack(enemy);
                }
            }
            else {
                var coin = this.findNearestItem();
                if (coin) {
                    var position = coin.pos;
                    var x = position.x;
                    var y = position.y;
                    this.moveXY(x, y);
                }
            }
            
        }
    }
}

相手が10m以内に近づいたら、必殺技が使える時は「Cleave()」を発動し、そうでなければ通常攻撃をします。それ以外は、先ほどのコードと同じです。

ここまで来ると、だいぶプログラミングらしくなってきたのではないでしょうか。


Siege of Stonehold

かなりアクション性が求められる最終ステージです。

codecombat-forest-Siege-of-Stonehold

敵の大群が出現するパターンは決まっているので、とにかく先読みで旗を置いて攻撃し続けることがポイントになります。

プログラムは、いつも通りの「旗」による移動と「攻撃」のみです。

loop {
    var flag = this.findFlag();
    var enemy = this.findNearestEnemy();
    
    if (flag) {
        this.pickUpFlag(flag);
    }
    else {
        if(enemy) {
            var distance = this.distanceTo(enemy.pos);
            if(distance < 10) {
                if(this.isReady("cleave")) {
                    this.cleave(enemy);
                }
                else {
                    this.attack(enemy);
                }
            }            
        }
    }
}

的確に「旗」を置くのが最大のポイントではあるものの、終盤は恐らく自キャラのみになるので、厳しい戦いを強いられるのは避けられないでしょう。


(おまけ)Hold for Reinforcements

前ステージの「Siege of Stonehold」を終えると、次の「サーバン砂漠編」に突入しますが、再度「辺境の森」に戻ってくると遊べるようになっています。

内容的には、特に難しいところは無く、「旗」による移動と近くにいる敵を攻撃するプログラミングを書いておけばOK!

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

    if (flag) {
        this.pickUpFlag(flag);
    }
    else if (enemy) {
        if(this.isReady("cleave")) {
            this.cleave(enemy);
        }
        else {
            this.attack(enemy);
        }
    }
}

このパターンは、もはや定型文としてどこかにコピーしておくのが良いかもしれませんね。


「サーバン砂漠編Part1」に続く…

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