RubyWarrior Level8の攻略
新しい要素がどんどん追加されていて、さらにRPGっぽくなってきてます。
概要
今回追加されたのはwarrior.lookとwarrior.shoot!です。
warrior.look!は周りに対象物(敵とか)がいないかどうか確認するスキル。
warrior.shoot!は弓矢を発射するスキル。
敵にも新キャラのWizardが登場してます。
攻撃力が高く、一回の攻撃で半分持ってかれるのでさっき紹介したwarrior.shootで遠距離攻撃して倒しましょう。
まずは近くのcaptiveを救出して、Wizardがいたら弓矢で遠距離攻撃、という流れにします。
スクリプト
class Player
def initialize()
@saved = 0
end
def play_turn(warrior)
if @saved == 0
if warrior.feel.captive?
warrior.rescue!
@saved += 1
else
warrior.walk!
end
else
if warrior.look.any? {|space| space.enemy? }
warrior.shoot!
else
warrior.walk!
end
end
end
end
今回は敵に接近して攻撃はしないので、@healthに体力を保存しません。
ただ、captiveは救出しなければならないので救出した数を@savedに保存。
fieldにWizardがいるかどうかの判定はany?でループを回しました。
解説
warrior.lookは三つの要素を含んでいるarrayオブジェクトを作り出します。
ちなみに方向も決めることができて、デフォルトは:forward。
これを、
if warrior.look.any? {|space| space.enemy? }
warrior.shoot!
else
warrior.walk!
end
という感じでany?のループに渡してあげる。
any?ではブロック引数に指定された変数spaceにwarrior.lookの要素を1個ずつ入れてあげます。trueを返したら処理を中止し、以下の処理を実行します。
このspace.enemy?の部分はゲーム画面のabilityで確認できるので使ってみてください。
敵がいるかどうかを確認するためのメソッドです。
スクリプトは短いけれど、warrior.lookの使い方がちょっと難しい...
empty?とか使ってもいけそうな気が...しなくもない。