RubyWarrior beginner epic solution
def loosing_life? warrior
    @health[-1] &lt; @health[-2] ? true : false
  end

  def next_empty? warrior
    warrior.feel.empty?
  end

  def safe? warrior
    next_empty?(warrior) &amp;&amp; !loosing_life?(warrior)
  end



Why I see no reason not to just make these part of the warrior class. It would make calling these much cleaner as you're never passing anything but a warrior into them.


  def life_bar_on_screen 
    puts "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ LIFE #{@health.last}"
    (1..@health.last).each { |x| print "▒ "} 
    puts ""
  end



The life bar is a really cool idea. I like that a lot. 


  elsif @backview[1].to_s.include?("Captive")
    warrior.walk! :backward        
  elsif @backview[0].to_s.include?("Captive")



Anytime the same string literal shows up more than once, I recommend using a constant instead. It will protect you from spelling errors that can cause runtime problems. Apply the same advice to your seek_and_shoot? method.


  def seek_and_shoot?
    foe = [ "Wizard" , "Archer", "Sludge"] 
    o, oo, ooo = @view[0].to_s , @view[1].to_s , @view[2].to_s
    case 
      when o == "nothing" &amp;&amp; foe.include?(oo) then true 
      #when o == "nothing" &amp;&amp; ranged_foe.include?(oo) then true 
      #when o == "nothing" &amp;&amp; oo == friend then false
      when o == "nothing" &amp;&amp; oo == "nothing" &amp;&amp; foe.include?(ooo) then true
      else false
    end
  end



The variable names here are pretty obtuse. What exactly are o, oo, and ooo? They're related somehow, but that's all I can readily gather from the names.

Also, commented out code is dead code. Remove dead code. If you're worried that you'll need it, then I recommend you start using source control of some kind. Personally, I like Git.