memo
アクション
- warrior.walk! 進む warrior.walk!(:backward) 下がる
- warrior.feel! 前のマスを調べる
- warrior.attack! 前のマスに攻撃(1回で5のダメージ)
- warrior.rest! 1ターン休む(1回で2の回復)
変数
- warrior.health 今の体力値を返す
マスの種類
- space.empty? 何もない
- space.stairs? 階段
- space.enemy? 敵
- space.captive? 捕虜
- space.wall? 壁
- space.ticking? 爆弾
敵キャラ
NAME | 名前 | 体力 | 攻撃力 | 射程 |
---|---|---|---|---|
? | ごぶりん | 15 | 5 | 1 |
thicksludge | スライム | 24 | 5 | 1 |
archer | アーチャー | 7 | 3 | 3 |
wizard | 魔法使い | 3 | 11 | 2 |
初級-1
class Player
def play_turn(warrior)
# cool code goes here
warrior.walk!
end
end
初級-2
敵キャラが出現!
1マス先を調べて、敵がいるか調べながら進もう!
class Player
def play_turn(warrior)
if warrior.feel.empty?
warrior.walk!
else
warrior.attack!
end
end
end
初級-3
敵キャラが複数出現!
1マス先を調べて、敵がいない時だけ回復しながら進もう!
class Player
def play_turn(warrior)
#体力が減っていないか確認する
if warrior.health < 20
#前のマスに敵がいなければ休憩
if warrior.feel.empty?
warrior.rest!
else
warrior.attack!
end
else
#体力満タンで前のマスに敵がいなければ進む
if warrior.feel.empty?
warrior.walk!
else
warrior.attack!
end
end
end
end
初級-4
2マス先に攻撃してくるアーチャーが新規に出現。
悠長に回復してるとやられるので、殺られる前に殺る
class Player
def play_turn(warrior)
# 現在の体力を記憶する変数を作る
# 最初は空なので、1ターン目でMAXの体力を入力
if @health.nil?
@health = 20
end
if @health > warrior.health
#前ターンより体力が減っているということは攻撃を受けていると判断
#ダメージを受けていると判定したときは回復せずに攻撃し続ける
if warrior.feel.empty?
warrior.walk!
else
warrior.attack!
end
else
if warrior.health < 15
warrior.rest!
else
if warrior.feel.empty?
warrior.walk!
else
warrior.attack!
end
end
end
#ターンエンド後に現在の体力を記録する
@health = warrior.health
end
end
初級-5
新規に、captive(捕虜)が出現
従来のコードだと、攻撃してしまうので、見分けて救助する必要がある
class Player
def play_turn(warrior)
# 現在の体力を記憶する変数を作る
# 最初は空なので、1ターン目でMAXの体力を入力
if @health.nil?
@health = 20
end
if @health > warrior.health
#前ターンより体力が減っているということは攻撃を受けていると判断
#ダメージを受けていると判定したときは回復せずに攻撃し続ける
if warrior.feel.empty?
warrior.walk!
else
warrior.attack!
end
else
if warrior.health < 15
warrior.rest!
else
if warrior.feel.empty?
warrior.walk!
else
#全面のマスに捕虜がいないかを確認
#捕虜は救出、捕虜でなければ攻撃
if warrior.feel.captive?
warrior.rescue!
else
warrior.attack!
end
end
end
end
#ターンエンド後に現在の体力を記録する
@health = warrior.health
end
end
初級-6
新規に、後方のオブジェクトが出現
新規に後方にアクションをするためのオプション(引数)が使えるようになりました。
状況に応じて使い分けましょう。
class Player
#レスキューフラグをつくりました。捕虜を救出すると、フラグが立つようにします。
def initialize
@health = 20
@rescue = 0
end
def play_turn(warrior)
if @rescue == 0
#捕虜を未救出の場合はこちらから
#:backwardを使うことで、後ろにアクションすることができます
if warrior.feel(:backward).empty?
warrior.walk!(:backward)
else
warrior.rescue!(:backward)
@rescue += 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
初級-7
敵が全て、後ろにいます。
構成自体はシンプルなので、上手く後ろ向きにアクションを行う引数を利用しましょう。
今までのコードを再利用すれば、そんなに難しく無いはずです。
class Player
def initialize
@health = 20
@rescue = 0
end
def play_turn(warrior)
if warrior.feel(:backward).empty?
if @health > warrior.health
#ダメージ判定。ダメージを受けていて、余裕がないときは前に進んで避難
if warrior.health < 9
warrior.walk!
else
warrior.walk!(:backward)
end
else
#ダメージを受けていない場合、余裕をもって回復
if warrior.health < 16
warrior.rest!
else
warrior.walk!(:backward)
end
end
else
#目の前に敵がいる場合は、ギリギリまで攻めます
if warrior.health < 9
warrior.walk!
else
warrior.attack!(:backward)
end
end
@health = warrior.health
end
end