LoginSignup
1
1

More than 5 years have passed since last update.

#6 【攻略】RubyWarrior Level6

Last updated at Posted at 2016-11-16

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となるので、以後この条件は使われなくなる。

あとは、前回と同様に逃げつつ攻撃するスクリプトを書く。

1
1
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
1
1