脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

[Ruby] Ruby Warrior Level.9クリアコード

Ruby Warrior

  • ゲーム感覚でRubyを学べるサイトです。
  • これをやるだけでRubyが完全に書けるようになるわけではないですが、とっかかりとしてはいいと思います。
  • 英語は全く難しくないので大丈夫です。

公式HP(かなり大きいBGMが流れるので注意)www.bloc.io
f:id:portaltan:20150707092818p:plain

クリアしたら

  • このサイトのおもしろい点として、答えとなるコードが決まっているわけではなく、要求されている動きさえすればいいというスタイルなので、100人いれば100通りの解答コードが出来ます。
  • 最終レベル(以前はLevel9だったが今は更にLevelが増えている?)をクリアしたらコードを公開して他の人のものと見比べると、「そんな書き方もあったのか」といった感じでおもしろいです。

Level9クリアコード

  • 僕がクリアしたのは数年前なのでもしかしたら現在の構成とは違うかもしれない & 初心者の時に書いたので色々つっこみどころはあるかもしれませんが、一応載せておきたいと思います。
class Player
  def play_turn(warrior)
    @health = 20 if @health == nil

    ###captive
    if warrior.feel.captive?
      warrior.rescue!
    elsif (warrior.feel:backward).captive?
      warrior.rescue!:backward
    
    ###meet enemy
    ##back
    elsif (warrior.feel:backward).enemy?
      #turn
      warrior.pivot!
    ##center
    elsif warrior.feel.enemy?
      #attack
      if warrior.health > 4
        warrior.attack!
      #escape
      else
        warrior.walk!:backward
      end
    
    ##archer aim you
    elsif warrior.health < @health
      #go
      if warrior.health >= 18
        warrior.walk!
      #back
      else
        warrior.walk!:backward
      end
      
    #heal
    elsif warrior.health < 20
        warrior.rest!
        
    #wall
    elsif warrior.feel.wall?
      warrior.pivot!
      @wall = true

    #stairs
    elsif warrior.feel.stairs?
      warrior.pivot! if @wall == nil
      warrior.walk! if @wall

    ##wizard
    else
      begin
        warrior.look.each{|i|
          break if i.captive?
          raise if i.enemy?
        }
        warrior.walk!
      rescue
        warrior.shoot!
      end
    end
    @health = warrior.health
  end # End of playturn
end # End of Class