Class: Pktool::Move
- Inherits:
-
Object
- Object
- Pktool::Move
- Defined in:
- lib/move.rb
Instance Attribute Summary collapse
-
#attacker ⇒ Object
Returns the value of attribute attacker.
-
#defender ⇒ Object
Returns the value of attribute defender.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#attacker ⇒ Object
Returns the value of attribute attacker.
5 6 7 |
# File 'lib/move.rb', line 5 def attacker @attacker end |
#defender ⇒ Object
Returns the value of attribute defender.
5 6 7 |
# File 'lib/move.rb', line 5 def defender @defender end |
Class Method Details
.fetch(name, attacker, defender) ⇒ Object
7 8 9 10 11 12 13 |
# File 'lib/move.rb', line 7 def self.fetch(name, attacker, defender) move = self.where(name: name).first raise Error, "存在ない技です。" unless move move.attacker = attacker move.defender = defender return move end |
Instance Method Details
#damage ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/move.rb', line 15 def damage level = 50.0 effect = 1.0 effect *= 1.5 if [@attacker.type1, @attacker.type2].include?(self.type) type_effect = open("data/type.json") do |io| JSON.load(io) end type = 1.0 type *= type_effect[@defender.type1][self.type] type *= type_effect[@defender.type2][self.type] if @defender.type2 vital = 1.0 case move_type when "ぶつり" attack_stat = :A defence_stat = :B when "とくしゅ" attack_stat = :C defence_stat = :D end # this equation may be mistake. base = ((power * @attacker.statistics(attack_stat) * (level * 2.0 / 5.0 + 2.0 )) / @defender.statistics(defence_stat) / 50.0 * effect + 2.0) * type min = base * vital * 0.85 max = base * vital * 1.0 {min: min.floor, max: max.floor} end |
#defeat ⇒ Object
43 44 45 46 47 |
# File 'lib/move.rb', line 43 def defeat hp = @defender.statistics(:H) damage = self.damage return {num: (hp.to_f / damage[:min]).ceil, rate: (damage[:min] / hp.to_f)} end |