codecombat-forest-top

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

今回は、辺境の森林編の初回ステージ「Plainswoodの守り」から「鬼の陣」までを1つずつ攻略していきます!

codecombat-forest

Plainswoodの守り

このステージでは、前回のキースガード編最終面で行った「防御壁」作りを行う必要があります。

北側と南側から敵キャラが現れるので、防御壁で阻止しましょう!

this.buildXY("fence", 40, 52);
this.buildXY("fence", 40, 20);

座標位置は、前回同様にマウスを持っていけば表示されるので、そのままbuilXYコマンドにセットすればOKです。


曲がりくねった道

ここから新コマンドの「moveXY()」が使えるようになり、座標位置を指定することで移動ができるようになります。

これで、ようやく「Right」や「Up」などの方向を、いちいち指示しなくてもよくなるので非常にスッキリします。

this.moveXY(36, 60);
this.moveXY(37, 13);
this.moveXY(71, 21);
this.buildXY("fence", 71, 25);

途中に落ちているジェムを拾うのを忘れないように、しっかりと座標位置を確認してmoveXY()コマンドを実行しましょう。


Burls Beets Booleans

質問が「正しい(true)」か「間違い(false)」なのかを、「say()」コマンドを使って答えるというステージです。

// Question: 2 == 3 
this.say(false);
(数値の2と3は同じではないのでfalse)

// Question: 3 == 3
this.say("true");
(数値の3と3は同じなのでtrue)

// Question: "Three" == 3
this.say("false");
(英語の文字Threeと数値の3は種類が違うのでfalse)

// Question: "Three" == "Three"
this.say("true");
(英語の文字ThreeとThreeは同じなのでtrue)

// Question: 1 + 2 == 3
this.say("true");
(1+2は数値の3なので同じ3同士でtrue)

これはプログラミングの条件分岐などでよく利用する式であり、間違えやすい部分でもありますね。


罵る者

このステージでは、新コマンド「if()」が使えるようになり、条件分岐が行えるようになります。

まずは簡単な使い方を覚えよう…ということで、とにかく「if()」の中に書いた条件式を「true(正しい状態)」にすればOK。

if (3 + 3 == 6) {
    this.say("Come at me!");
}

if (20 == 20) {
    this.say("fuck you!");
}

「true」になると「say()」コマンドが実行されて、敵キャラが近づいてくるのですが、勝手に地雷を踏みつけて倒せるようになってます。


宝石、又は死

「if()」コマンドの、さらなる応用編というニュアンスのステージです。

if (1 + 1 + 1 == 4) {  // ∆ これを偽にしよう
    this.moveXY(5, 15);  // 1番目の地雷に移動
}
if (2 + 2 == 4) {  // ∆ これを真にしよう
	this.moveXY(15, 40);  // 一番目の宝石に移動
}
if (2 + 2 != 3) {  // ∆ これを真にしよう
	this.moveXY(25, 15);  // 2番目の宝石に移動
}
if (2 + 2 < 5) {  // ∆ これを真にしよう
    var enemy = this.findNearestEnemy();
    this.attack(enemy);
}
if (2 > 4) {  // ∆ これを偽にしよう
	this.moveXY(40, 55);
}
if (false) {  // ∆ これを偽にしよう
	this.moveXY(50, 10);
}
if (true) {  // ∆ これを真にしよう
	this.moveXY(55, 25);
}

とにかく、指示通りの条件になるようにif()コマンドを完成させればOK!


巡察隊をやっつける者

以前に覚えた「loop()」コマンドを利用して、次々出現する敵を倒していくステージとなっています。

また、loop()と一緒に、自動で敵キャラを見つけて「名前」を得られるコマンドを「attack()」の中に挿入して撃破します。

loop {
    enemy = this.findNearestEnemy();
    if(enemy) {
        this.attack(enemy);
    }
}

かなりプログラミングらしくなってきたのではないでしょうか…。

「findNearestEnemy()」コマンドは、近くに敵キャラがいなかったら「null」という値を変数に入れます。これは、「false」と同じような意味なので、「if(enemy){}」としておけば、敵キャラを発見した時のみ攻撃をしてくれるようになるわけです。


村の守衛

画面の左右から、敵キャラや村人が混じって出現するので、敵だけを見極めて攻撃する必要があります。

loop {
    this.moveXY(35, 34);
    var leftEnemy = this.findNearestEnemy();
    if (leftEnemy) {
        this.attack(leftEnemy);
        this.attack(leftEnemy);
    }

    this.moveXY(60, 31);
    var rightEnemy = this.findNearestEnemy();
    if(rightEnemy) {
        this.attack(rightEnemy);
        this.attack(rightEnemy);
    }
}

同じような処理を2回繰り返しているので、もう少し簡略化したいですね。


背中合わせ

このステージでは、真ん中の位置をキープしつつ、左右から出現する敵キャラを攻撃する必要があります。

そこで、今まで「if()」コマンドの条件が「true」の時だけの処理を実行してましたが、「else{}」を追加することで、「false」の時にどうするかをプログラミングすることが出来ます。

loop {
    var enemy = this.findNearestEnemy();
    if (enemy) {
        this.attack(enemy);
        this.attack(enemy);
    }
    else {
        this.moveXY(40, 34);
    }
}

これで、敵がいない時は真ん中の位置に自動で戻るようになります。


鬼の陣

敵が無数に出現するステージです。

敵を優先して攻撃しつつ、敵がいない時は巨大な宝箱を攻撃するようにプログラミングしてみましょう。

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

ここまで、自キャラをまったくパワーアップしていないと体力が不足して死んでしまうかもしれません。

私は、ここで新しい鎧をアンロックして装備しておきました。

codecombat-forest-newitem

装備品はどれでもいいですが、なるべく体力が大幅に増えるものが良いと思います。


「辺境の森林編Part2」に続く

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