-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbattle.rb
66 lines (53 loc) · 1.49 KB
/
battle.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Battle
def initialize(fighters)
@fighters = fighters
broadcast blank_lines
broadcast "Two fighters have stumbled upon the same area."
broadcast "And so the fight begins..."
broadcast
begin
2.times do |number|
turn(number-1) if fighters_both_alive?
end
broadcast
end while fighters_both_alive?
broadcast "The fight is over! The winner is..."
broadcast @winner.name
broadcast
broadcast "This textfight has ended. Thanks for fighting!"
broadcast "Start the client once more to play again."
end
private
def broadcast(text="")
@fighters.each do |fighter|
fighter.connection.puts text
end
end
# TODO: remove duplication with world.rb
# Returns multiple newlines.
def blank_lines
blank_lines = ""
15.times { blank_lines += "\n" }
blank_lines
end
def fighters_both_alive?
fighters_alive = 0
@fighters.each do |fighter|
fighters_alive += 1 if fighter.alive?
end
fighters_alive == 2
end
def turn(x)
attacker = @fighters[x]
defender = @fighters[(x+1)%2]
damage = rand 20
defender.health -= damage
broadcast "#{attacker.name} did #{damage} damage to #{defender.name}"
if defender.alive?
broadcast "#{defender.name} now has #{defender.health} health"
else
broadcast "#{defender.name} died from wounds"
@winner = attacker if !defender.alive?
end
end
end