Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Arena
- attr_accessor :round
- def initialize(fighter1, fighter2)
- @fighter1=fighter1
- @fighter2=fighter2
- @round = 0;
- end
- # Oba bojovnici na sebe stridave utoci
- # dokud jeden z nich neztrati vsechny zivoty
- def fight
- intro
- # IMPLEMENTUJTE TOTO METODU
- while(@fighter1.alive? && @fighter2.alive?)
- @round += 1
- puts @fighter1.action(@fighter2,@round);
- if(@fighter2.alive?)
- puts @fighter2.action(@fighter1,@round);
- end
- end
- outro
- end
- private
- def outro
- if(@fighter1.alive?)
- puts @fighter1.name + " won! With "+ @fighter1.lives.to_s+ ' lives'
- else
- puts @fighter2.name + " won! With "+ @fighter2.lives.to_s+ ' lives'
- end
- end
- def intro
- puts "Welcome to the Arena!"
- print "In left corner: #{@fighter1.name} with #{@fighter1.lives} lives,"
- print " attack number: #{@fighter1.attack_number}, "
- puts "defense number: #{@fighter1.defense_number}"
- print "In right corner: #{@fighter2.name} with #{@fighter2.lives} lives,"
- print " attack number: #{@fighter2.attack_number}, "
- puts "defense number: #{@fighter2.defense_number}"
- puts "Let the fight begin!"
- end
- end
- class Fighter
- attr_reader :name, :lives, :attack_number, :defense_number
- def initialize(name, lives, attack_number, defense_number)
- @name = name
- @lives = lives
- @attack_number = attack_number
- @defense_number = defense_number
- end
- def action(oponent,round)
- return @name + " attack on "+oponent.name+". With damage: " + attack(oponent).to_s
- end
- # Tato metoda spocita utok (utocne cislo + hod kostkou)
- # a zavola na protivnikovi metodu defend s hodnotou utoku
- def attack(oponent)
- attack = @attack_number + rand(5)+1
- return oponent.defend(attack);
- end
- # Tato metoda zjisti jestli byl zasah uspesny. Od utoku odecte
- # obranne cislo a hod kostkou. Vysledek jsou ztracene zivoty
- def defend(value)
- defend = @defense_number + rand(5)+1
- dmg = value - defend;
- if(dmg > 0)
- @lives -= dmg;
- else
- dmg = 0;
- end
- return dmg;
- end
- def recieve_dmg(damage)
- @lives -= damage;
- end
- # Tato metoda vraci true, pokud je bojivnik nazivu a jinak false
- def alive?
- return @lives > 0
- end
- end
- class Ranger < Fighter
- def action(oponent,round)
- if(round % 3 == 0 )
- heal = rand(5)+1
- @lives += heal
- return @name + " heals himself for "+heal.to_s+" now he has got "+ @lives.to_s
- else
- return super(oponent, round)
- end
- end
- end
- class Wizard < Fighter
- def initialize(name, lives, attack_number, defense_number,mana)
- super(name,lives,attack_number,defense_number)
- @mana = mana
- end
- def action(oponent,round)
- if(round % 2 == 0 && @mana > 0 )
- @mana -= 1;
- dmg = rand(5)+1
- oponent.recieve_dmg(dmg)
- return @name + " cast spell on "+oponent.name+" with damage "+ dmg.to_s
- else
- return super(oponent,round)
- end
- end
- end
- geralt = Ranger.new("Geralt", 10, 20, 23)
- boholt = Wizard.new("Boholt", 20, 25, 15,4)
- arena = Arena.new(geralt, boholt)
- arena.fight
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement