2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

#8 【攻略】RubyWarrior Level8

2
Last updated at Posted at 2016-11-17

RubyWarrior Level8の攻略
新しい要素がどんどん追加されていて、さらにRPGっぽくなってきてます。

概要

今回追加されたのはwarrior.lookとwarrior.shoot!です。
warrior.look!は周りに対象物(敵とか)がいないかどうか確認するスキル。
warrior.shoot!は弓矢を発射するスキル。

敵にも新キャラのWizardが登場してます。
攻撃力が高く、一回の攻撃で半分持ってかれるのでさっき紹介したwarrior.shootで遠距離攻撃して倒しましょう。

まずは近くのcaptiveを救出して、Wizardがいたら弓矢で遠距離攻撃、という流れにします。

スクリプト

class Player
  def initialize()
    @saved = 0
  end
  
  def play_turn(warrior)
    if @saved == 0
      if warrior.feel.captive?
        warrior.rescue!
        @saved += 1
      else
        warrior.walk!
      end
      
    else
      if warrior.look.any? {|space| space.enemy? }
        warrior.shoot!
      else
        warrior.walk!
      end
    end
  end
end

今回は敵に接近して攻撃はしないので、@healthに体力を保存しません。
ただ、captiveは救出しなければならないので救出した数を@savedに保存。

fieldにWizardがいるかどうかの判定はany?でループを回しました。

解説

warrior.lookは三つの要素を含んでいるarrayオブジェクトを作り出します。
ちなみに方向も決めることができて、デフォルトは:forward。

これを、

if warrior.look.any? {|space| space.enemy? }
  warrior.shoot!
else
  warrior.walk!
end

という感じでany?のループに渡してあげる。
any?ではブロック引数に指定された変数spaceにwarrior.lookの要素を1個ずつ入れてあげます。trueを返したら処理を中止し、以下の処理を実行します。

このspace.enemy?の部分はゲーム画面のabilityで確認できるので使ってみてください。
敵がいるかどうかを確認するためのメソッドです。

スクリプトは短いけれど、warrior.lookの使い方がちょっと難しい...
empty?とか使ってもいけそうな気が...しなくもない。

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?