blob: 77a9a80080171870529c48d8acd22ba3e71b1053 [file] [log] [blame]
Ellen Leebbfd78e2017-10-27 10:57:24 +08001class Hero
2
3 MAX_HP = 200
4 MAX_AP = 80
5
6 attr_accessor :hp, :name
7
8 @@heroes = [] # 用來儲存所有 heroes 的 array # 讓外部的 method 也可以抓到這兩個 variables
9
10 def initialize(name, hp, ap)
11 @name = name
12
13 if MAX_HP < hp
14 @hp = MAX_HP
15 else
16 @hp = hp
17 end
18
19 if MAX_AP < ap
20 @ap = MAX_AP
21 else
22 @ap = ap
23 end # 設定一個名為 hp(生命值)的 attribute
24
25 @alive = true # 英雄剛被創造,所以預設為 true,表示英雄被創造時一定是活著的
26
27 # 印出被創造的英雄的 attributes
28 puts "你的英雄 #{@name} 已經誕生了!"
29 puts "生命力(HP):#{@hp}"
30 puts "攻擊力(AP):#{@ap}"
31 puts ""
32
33 @@heroes << self # 把新建立的這個 hero 加入 array 裡
34 end
35
36 def is_alive?
37 return @alive
38 end
39
40 def attack(enemy)
41 damage = rand(@ap/2..@ap) # 傷害會隨機取攻擊力的一半(AP/2)至 AP 中的數字
42 enemy.hp = enemy.hp - damage # 新的生命力是生命力減去傷害
43
44 # 印出攻擊的過程
45 puts "#{@name} 攻擊!"
46 puts "#{enemy.name} 受到 #{damage} 點傷害"
47 puts "#{enemy.name} 剩下 #{enemy.hp} 點 HP"
48 puts ""
49
50 enemy.die?
51 end
52
53 def die?
54 if hp < 1
55 die
56 end
57 end
58
59 private def die # 代表死亡(戰敗)
60 @alive = false
61 puts "#{@name} 被打倒了"
62 end
63
64 def self.count
65 return @@heroes.length # 回傳英雄們的數量
66 end
67
68 def self.all
69 return @@heroes # 回傳包含所有 hero 的 array
70 end
71end