さて今回は、Level4 です。
You can hear bow strings being stretched. No new abilities this time,
but you must be careful not to rest while taking damage. Save a
@health instance variable and compare it on each turn to see if you’re
taking damage.
説明文を読むと、弓持ちの敵がいるので注意と言うことと、ダメージを受けている時に回復したらアカンということ。これを判断するには @health インスタンス変数を使用しろということのようです。
明らかに弓を持ったおっさんと、でかくなった敵がいます。
前回のコードをそのまま実行しましたが、最後の敵でやられてしまいました。普通に考えたら成功するわけないですよね。。。
と、言うことで説明に有ったとおり @health インスタンス変数を使用してダメージを受けているかを判定して処理を分岐するようにします。
@health のインスタンス変数については最初は定義されていないので、どこかで定義をする必要があるのでとりあえず、Player クラスの initialize メソッドで定義するようにします。
その後は、play_turn() メソッドの最後の部分でターン終了時の戦士の体力を代入するようにします。
これで、自分のターン後に敵からダメージを受けていた場合、先程保持した値よりも戦士の体力が減っていればダメージを受けているかどうか判断がつくようになります。
ダメージを受けている場合は、のんきに回復などをしていると、消耗戦でやられてしまうので、さっさ前に進み敵を倒しに行くようにします。
ダメージに変動がなくなり、前方に敵がいない場合に限り回復処理を行うようにします。
ここで、回復のポイント数ですが、緑の敵がでかくなって5ターンの攻撃を行う必要があるので前回の回復目安 6pt ではやられてしまうため、4 ターン分耐え切る体力(3 x 4 = 12 以上)を確保するようにします。
これを踏まえて実装したコードが以下のようになります。
class Player def initialize @health = 20 end def play_turn(warrior) # cool code goes here return warrior.attack! if warrior.feel.enemy? if @health > warrior.health warrior.walk! else if warrior.health <= 12 warrior.rest! else warrior.feel.enemy? ? warrior.attack! : warrior.walk! end end @health = warrior.health end end
if 文のネストが増えているのがちょっと嫌な感じですが、ひとまずクリアはできました。
0 件のコメント:
コメントを投稿