LoginSignup
0
0

More than 5 years have passed since last update.

#15 【攻略】RubyWarrior Level6 ~中級編~

Posted at

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ターンに複数回行動を起こしてしまうのでエラーになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0