RubyWarrior完全攻略~初級編~ Level6
いつの間にか戦士のLevelも6になりました。
では、やっていきます。
まずはGoogle翻訳
The wall behind you feels a bit further away in this room. And you hear more cries for help.
あなたの後ろの壁が遠くにこの部屋にビットを感じています。そして、あなたは助けのためのより多くの叫びを聞きます。
You can walk backward by passing ':backward' as an argument to walk!. Same goes for feel, rescue! and attack!. Archers have a limited attack distance.
':後方'あなたは渡すことで後方に歩くことができる歩行引数として!同じことが感じ、救助のために行きます!と攻撃!射手は、限られた攻撃距離を有します。
要約すると
walk!メソッドの引数に:backwardを指定したら
後ろに進む事ができるので、
捕虜を救出したり、敵の攻撃を回避したりしましょう。
feel、rescue!、attack!も:backward指定できます。
って感じでしょうか。
今回は、プログラムを綺麗に作り直すことにします。
というのも、
今まではLevelが上がるたびにプログラムをつぎ足しで
作っていたのでif文が多くかなり複雑になっていたためです。
一度整理して、今後のレベルに対応できるプログラムにしたいと思います。
今までと全然違うソースコードになってしまいました。
play_turnメソッドでやっている事は
- 初期化処理(1度だけ)
- 戦士の行動を決定
- 現在の体力を記憶
になります。
初期化処理は、
1度しか呼ばれないようにnil?の判断を入れてます。
次に、戦士の行動を決定するメソッドを呼び出し、
戻り値で処理を分岐してます。
最後に、現在の体力を前回値として保存します。
戦士の行動を決定するメソッドの中身ですが、
以下のようなロジックをもとに書きました。
条件1 | 条件2 | 条件3 | 行動 |
---|---|---|---|
目の前に何かある | 捕虜がいない | 攻撃する[attack!] | |
目の前に何かある | 捕虜がいる | 救出する[rescue!] | |
目の前に何もない | ダメージを受けていない | 体力が多い | 前に進む[walk!] |
目の前に何もない | ダメージを受けていない | 体力が少ない | 回復する[rest!] |
目の前に何もない | ダメージを受けている | 体力が多い | 前に進む[walk!] |
目の前に何もない | ダメージを受けている | 体力が少ない | 後ろに下がる[walk!] |
さらに、戦士が現在どちらを向いているか(どちらに進むか)によって
歩く方向、攻撃する方向、救出する方向等を決めなければなりません。
さらにさらに、今回の問題では
- 初回は後ろに進む
- 捕虜を救出したら方向転換
- 回復し始めたら全回復するまで回復する
といった事も必要になるので、そういった事も記述しています。
まだまだ汚いですが、前よりは分かりやすくなったと思います。
はたして、次のLevelでこのプログラムがどれだけ使い物になるのか・・。