RPGっぽく戦闘してみる
テキストRPGのように自動戦闘を行います。ヘタレ英語なのは仕様です。
Dragon's attack!
Mini slime gets 23 damage!
Mini slime's attack!
Dragon gets 2 damage!Dragon's attack!
Mini slime gets 23 damage!Mini slime's HP is zero!
Dragon won!
# モンスターを表すクラス class Monster attr_reader :name, :attack, :guard, :speed def initialize(name,hp,attack,guard,speed) @name = name @hp = hp @attack = attack @guard = guard @speed = speed end # ダメージ判定 def damage_from(attacker) # 与えるダメージを算出 damage = attacker.attack - @guard if damage > 0 then @hp -= damage puts "#{@name} gets #{damage} damage!" else puts "#{@name} gets no damage!" end end # 攻撃 def attack_to(target) puts "#{self.name}'s attack!" avoid_percent = target.speed - self.speed if rand(100) >= avoid_percent then target.damage_from(self) else puts "But #{target.name} avoids!" end end # 敗北判定 def is_lose return @hp <= 0 end end class Boss < Monster # ボスは必中 def attack_to(target) puts "#{self.name}'s attack!" target.damage_from(self) end end # 戦闘処理 def battle(m1,m2) # ターン経過 def do_turn(fast_attacker,slow_attacker) fast_attacker.attack_to(slow_attacker) slow_attacker.attack_to(fast_attacker) unless slow_attacker.is_lose puts '' end # 勝者判定 def judge(m1,m2) if m1.is_lose then winner = m2 loser = m1 else winner = m1 loser = m2 end puts "#{loser.name}'s HP is zero!" puts "#{winner.name} won!" end # 戦闘処理開始 # 先攻後攻判定(speed不変前提) if m1.speed < m2.speed then # m2 がm1よりも早い fast_attacker = m2 slow_attacker = m1 else fast_attacker = m1 slow_attacker = m2 end # 勝敗が決まるまで戦闘 until (m1.is_lose or m2.is_lose) do do_turn(fast_attacker,slow_attacker) end judge(m1,m2) end def main mob = Monster.new('Mini slime',40,10,2,2) boss = Boss.new('Dragon',200,25,8,5) battle(mob, boss) end main