Class: Pktool::Move

Inherits:
Object
  • Object
show all
Defined in:
lib/move.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#attackerObject

Returns the value of attribute attacker.



5
6
7
# File 'lib/move.rb', line 5

def attacker
  @attacker
end

#defenderObject

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

Raises:



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

#damageObject



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

#defeatObject



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