RubyWarrior Level4の攻略
参考サイト: https://staceylearnscode.wordpress.com/2015/10/13/ruby-warrior-level-6/
参考にした人のスクリプトがめちゃくちゃ美しかったので、ロジックツリーをインスパイアさせてもらいました。
概要
今回はcaptiveがwarriorの後ろにいるので、彼を回収してから前進しなければならない。:backwardをうまく使ってwalk!、rescue!、などをうまく使わないとcaptiveを置き去りにしてしまう。
スクリプト
class Player
def initialize()
@health = 20
@saved = 0
end
def play_turn(warrior)
if @saved == 0
if warrior.feel(:backward).empty?
warrior.walk!(:backward)
else
warrior.rescue!(:backward)
@saved += 1
end
else
if warrior.feel.empty?
if @health > warrior.health
if warrior.health < 9
warrior.walk!(:backward)
else
warrior.walk!
end
else
if warrior.health < 16
warrior.rest!
else
warrior.walk!
end
end
else
if warrior.health < 9
warrior.walk!(:backward)
else
warrior.attack!
end
end
end
@health = warrior.health
end
end
if文だらけで汚いですが、こんな感じになりました。
メソッド作ってそこに条件書いて呼び出し、という形が一番美しいと思うけど最初にその発想が出なかったのでif文でゴリゴリ書きました...
解説
まず、
def initialize()
@health = 20
@saved = 0
end
ここで体力の値を@healthに、救出したcaptiveの数を@savedに収める。
次に、
if @saved == 0
if warrior.feel(:backward).empty?
warrior.walk!(:backward)
else
warrior.rescue!(:backward)
@saved += 1
end
・
・
・
end
ここは@saved(救出したcaptive)が0のときのみ実行するスクリプト。
後ろがemptyだったらbackwardに進み、captiveがいたら救出。
救出されたら@saved = 1となるので、以後この条件は使われなくなる。
あとは、前回と同様に逃げつつ攻撃するスクリプトを書く。