-
Notifications
You must be signed in to change notification settings - Fork 0
/
Battle.java
104 lines (84 loc) · 2.26 KB
/
Battle.java
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
* Battle mechanics
* @author Johnson Zhou 1302442 <zhoujj@student.unimelb.edu.au>
*
*/
public class Battle {
private GameCharacter attacker;
private GameCharacter defender;
private GameCharacter winner;
private GameCharacter loser;
private boolean inCombat;
/**
* @param attacker - as a GameCharacter object
* @param defender - as a GameCharacter object
*/
public Battle(GameCharacter attacker, GameCharacter defender) {
this.attacker = attacker;
this.defender = defender;
this.inCombat = true;
}
/** setters */
public void setWinner(GameCharacter winner) {
this.winner = winner;
this.inCombat = false;
}
public void setLoser(GameCharacter loser) {
this.loser = loser;
this.inCombat = false;
}
/** getters */
public GameCharacter getWinner() {
return this.winner;
}
public GameCharacter getLoser() {
return this.loser;
}
/** private */
/**
* Outputs the attacker and defender stats to the screen
* Bilbo 20/20 | Orc 15/15
*/
public void displayStats() {
System.out.printf("%s | %s%n",
this.attacker.getStats(), this.defender.getStats()
);
}
/** public */
/**
* Outputs a message announcing the battle participants.
* Bilbo encountered a Slimy!
*/
public void announce() {
System.out.printf("%s encountered a %s!%n%n",
this.attacker.getName(), this.defender.getName()
);
}
/**
* Initiates the battle loop.
* Attacker and defender exchange attacks. The health of the opponent
* is checked after each attack and loop is halted immediately
* and a winner is declared.
*/
public void begin() {
combat : while (this.inCombat) {
this.displayStats();
boolean attackSuccess = this.attacker.attacks(this.defender);
if (attackSuccess) {
this.setWinner(this.attacker);
this.setLoser(this.defender);
break combat;
}
boolean counterSuccess = this.defender.attacks(this.attacker);
if (counterSuccess) {
this.setWinner(this.defender);
this.setLoser(this.attacker);
break combat;
}
System.out.println();
}
if (this.winner != null) {
System.out.printf("%s wins!%n", this.winner.getName());
}
}
}