Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.09 KB | None | 0 0
  1. class Arena
  2.     attr_accessor :round
  3.   def initialize(fighter1, fighter2)
  4.     @fighter1=fighter1
  5.     @fighter2=fighter2
  6.         @round = 0;
  7.   end
  8.  
  9.   # Oba bojovnici na sebe stridave utoci
  10.   # dokud jeden z nich neztrati vsechny zivoty
  11.   def fight
  12.     intro
  13.     # IMPLEMENTUJTE TOTO METODU
  14.  
  15.         while(@fighter1.alive? && @fighter2.alive?)
  16.             @round += 1
  17.  
  18.             puts @fighter1.action(@fighter2,@round);
  19.  
  20.             if(@fighter2.alive?)
  21.                 puts @fighter2.action(@fighter1,@round);
  22.             end
  23.         end
  24.  
  25.         outro
  26.  
  27.  
  28.   end
  29.  
  30.   private
  31.  
  32.     def outro
  33.         if(@fighter1.alive?)
  34.             puts @fighter1.name + " won! With "+ @fighter1.lives.to_s+ ' lives'
  35.         else
  36.             puts @fighter2.name + " won! With "+ @fighter2.lives.to_s+ ' lives'
  37.         end
  38.     end
  39.  
  40.   def intro
  41.     puts "Welcome to the Arena!"
  42.     print "In left corner: #{@fighter1.name} with #{@fighter1.lives} lives,"
  43.     print " attack number: #{@fighter1.attack_number}, "
  44.     puts "defense number: #{@fighter1.defense_number}"
  45.     print "In right corner: #{@fighter2.name} with #{@fighter2.lives} lives,"
  46.     print " attack number: #{@fighter2.attack_number}, "
  47.     puts "defense number: #{@fighter2.defense_number}"
  48.     puts "Let the fight begin!"
  49.   end
  50. end
  51.  
  52. class Fighter
  53.   attr_reader :name, :lives, :attack_number, :defense_number
  54.   def initialize(name, lives, attack_number, defense_number)
  55.     @name = name
  56.     @lives = lives
  57.     @attack_number = attack_number
  58.     @defense_number = defense_number
  59.   end
  60.  
  61.  
  62.     def action(oponent,round)
  63.  
  64.         return @name + " attack on "+oponent.name+". With damage: " + attack(oponent).to_s
  65.     end
  66.  
  67.  
  68.   # Tato metoda spocita utok (utocne cislo + hod kostkou)
  69.   # a zavola na protivnikovi metodu defend s hodnotou utoku
  70.   def attack(oponent)
  71.  
  72.         attack = @attack_number + rand(5)+1
  73.         return oponent.defend(attack);
  74.  
  75.   end
  76.  
  77.   # Tato metoda zjisti jestli byl zasah uspesny. Od utoku odecte
  78.   # obranne cislo a hod kostkou. Vysledek jsou ztracene zivoty
  79.   def defend(value)
  80.  
  81.         defend = @defense_number + rand(5)+1
  82.  
  83.         dmg = value - defend;
  84.         if(dmg > 0)
  85.             @lives -= dmg;
  86.         else
  87.             dmg = 0;
  88.         end
  89.  
  90.         return dmg;
  91.  
  92.   end
  93.  
  94.     def recieve_dmg(damage)
  95.         @lives -= damage;
  96.     end
  97.  
  98.  
  99.   # Tato metoda vraci true, pokud je bojivnik nazivu a jinak false
  100.   def alive?
  101.     return @lives > 0
  102.   end
  103. end
  104.  
  105. class Ranger < Fighter
  106.  
  107.     def action(oponent,round)
  108.        
  109.         if(round % 3 == 0 )
  110.             heal = rand(5)+1
  111.             @lives += heal
  112.             return @name + " heals himself for "+heal.to_s+" now he has got "+ @lives.to_s
  113.         else
  114.             return super(oponent, round)
  115.         end
  116.        
  117.     end
  118.  
  119. end
  120.  
  121. class Wizard < Fighter
  122.   def initialize(name, lives, attack_number, defense_number,mana)
  123.         super(name,lives,attack_number,defense_number)
  124.         @mana = mana
  125.   end
  126.  
  127.     def action(oponent,round)
  128.  
  129.         if(round % 2 == 0 && @mana > 0 )
  130.             @mana -= 1;
  131.  
  132.             dmg = rand(5)+1
  133.             oponent.recieve_dmg(dmg)
  134.             return @name + " cast spell on "+oponent.name+" with damage "+ dmg.to_s
  135.         else
  136.             return super(oponent,round)
  137.         end
  138.  
  139.     end
  140.    
  141.  
  142. end
  143.  
  144.  
  145. geralt = Ranger.new("Geralt", 10, 20, 23)
  146. boholt = Wizard.new("Boholt", 20, 25, 15,4)
  147.  
  148. arena = Arena.new(geralt, boholt)
  149. arena.fight
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement