さて、今回は Level7 です。
だいぶんしんどくなってきた。。。
とはいえ、blog を書く気になっている間にやってしまわないとまた時間経ちそうなのでやってしまわないと。
前置きは良いとして、説明文を意訳します。
You feel a wall right in front of you and an opening behind you. You
are not as effective at attacking backward. Use warrior.feel.wall? and
warrior.pivot! to turn around.
壁を目の前にして開始します。
通常の攻撃は、後ろに対して行えません。
warrior.feel.wall? メソッドと warrior.pivot! メソッドを使って向きを変えてください。
かな?
前回、:backward メソッドを使用して後ろ側への移動などを行って来ましたが、今回からなんと! warrior.pivot! メソッドを使うと戦士の向きを変えることができるようになるそうです。
ってか、最初から教えておいてくれたらよかったのに。
ということで、前回の資産を活かせるか試してみたところ、当然うまく行きませんでした。しかし、pivot! を使わずに :backward 引数だけで対応できるのでは無いかと、ちょっと弄るとクリア出来たので、今回はそのコードを載せておきます。
次の回で、実際に pivot! を使った内容を実装します。
コードは以下のとおり
class Player
def initialize
@health = 20
@direction = :backward
end
def play_turn(warrior)
@warrior = warrior
return warrior.rescue!(@direction) if feel_captive?
@direction = change_direction if feel_wall?
if decrease_health?
if pinch_pinch_health?
@direction = change_direction
warrior_walk!
else
check_enemy? ? warrior_attack! : warrior_walk!
end
@direction = change_direction if pinch_health?
else
if max_health?
check_enemy? ? warrior_attack! : warrior_walk!
else
warrior.rest!
end
end
@health = warrior.health
end
def decrease_health?
@health > @warrior.health
end
def pinch_pinch_health?
@warrior.health <= 2
end
def pinch_health?
@warrior.health <= 3
end
def max_health?
@warrior.health == 20
end
def feel_captive?
@warrior.feel(@direction).captive?
end
def feel_wall?
@warrior.feel(@direction).wall?
end
def check_enemy?
@warrior.feel.enemy? || @warrior.feel(:backward).enemy?
end
def warrior_walk!
@warrior.walk!(@direction)
end
def warrior_attack!
@warrior.attack!(@direction)
end
def change_direction
@direction === :forward ? :backward : :forward
end
end
今回だけの無理やりコードなので、攻撃にも方向シンボルの指定とメソッド化、ピンチ体力の調整、そして本格的にやばくなった時の動作を無理やり実装しています。
本格的にやばくなった時のコードが何故必要になったかというと、最初の緑の敵ですが、フル体力で殴りあっても勝てないようになっています。。。一旦退いて体力回復後殴らないと勝てない。なんて糞仕様素敵な的なんだ。
一応これで、なんとかクリアできます。
ちょっと無理やりですかね。まあ、本番は次回になるので良いとしましょうか。
Written with StackEdit.

0 件のコメント:
コメントを投稿