RubyWarrior攻略やっていきます。
概要
今回は捕虜が爆弾を持っているみたいです。敵を倒すことよりも、捕虜を助けることを優先しなければ捕虜が爆ぜます。なので、最初は敵を無視して捕虜まで移動して助ける。といった感じでロジックを組みます。
スクリプト
class Player
#近くに捕虜がいるかの判定
def captive?(warrior)
if warrior.feel(:right).captive?
return :right
elsif warrior.feel(:left).captive?
return :left
elsif warrior.feel(:forward).captive?
return :forward
elsif warrior.feel(:backward).captive?
return :backward
else
return :none
end
end
#warriorの近くに空間があるか確認
def empty?(warrior)
if warrior.feel(:right).empty?
return :right
elsif warrior.feel(:left).empty?
return :left
elsif warrior.feel(:forward).empty?
return :forward
elsif warrior.feel(:backward).empty?
return :backward
else
return :none
end
end
def play_turn(warrior)
dir = captive?(warrior)
if dir == :left
warrior.rescue!(:left)
return []
elsif dir == :right
warrior.rescue!(:right)
return []
end
dir = warrior.direction_of_stairs
if warrior.feel(dir).enemy?
dir = empty?(warrior)
warrior.walk!(dir)
else
warrior.walk!(dir)
end
end
end
解説
captive?で捕虜のいる位置を確定し、dirに保存。捕虜がいると想定される位置で条件分岐を組みます。
ちなみにreturn []を返すことでターン終了することができます。これがないと1ターンに複数回行動を起こしてしまうのでエラーになります。