大分放置してた。。。
さて、Level3 です。
ここでは、敵の数が増えるので、今まで通りに進むと体力が足りずに詰みます。
説明文を読むと
The air feels thicker than before. There must be a horde of sludge.
Be careful not to die! Use warrior.health to keep an eye on your health, and warrior.rest! to earn 10% of max health back.
warrior.health メソッドと warrior.rest! メソッドがキーと書いています。
warrior.health メソッドは、自分の体力を確認できるメソッドで、warrior.rest! メソッドが 体力最大の 10% を回復するメソッドになります。
こちらの攻撃が 1 回に付き 5 を与えて、3 ターンで倒せるので、体力は 15 ぐらいで、相手の攻撃で -3 をもらい、倒しきるまでに 2 ターンあるので、体力的には 6 より多くないと厳しいということになります。
ということで、必要条件の体力が 6 より小さくなった場合に、rest! メソッドで体力を回復させるようにします。
class Player def play_turn(warrior) # cool code goes here return warrior.rest! if warrior.health <= 6 warrior.feel.enemy? ? warrior.attack! : warrior.walk! end end
で、単純に体力確保だけを考えて実装後に実行をすると、途中で敵が 2 連続の部分でやられてしまいました。
具体的には、2 匹目の部分で、体力低下により回復(2pt)するけど、相手の攻撃(3pt)をもらい、消耗戦の結果、体力尽きてゲームーオーバーというパターンです。
これを回避するには、ゲームオーバー時に表示されるヒントをみると、
敵が目の前にいない時に回復するようにしろ!と書いてあります。
敵が目の前かどうかは、SPACES オブジェクトの enemy? メソッドを使えば判断できます。
space 系のオブジェクトは、warrior.feel から取得できるようになっているので、warrior.feel.enemy? と記述すれば判断が付きそうです。
最終的には、以下のようになりました。
class Player def play_turn(warrior) # cool code goes here return warrior.attack! if warrior.feel.enemy? return warrior.rest! if warrior.health <= 6 warrior.feel.enemy? ? warrior.attack! : warrior.walk! end end
うーんいい感じ
0 件のコメント:
コメントを投稿