-
Notifications
You must be signed in to change notification settings - Fork 0
/
Game.java
89 lines (71 loc) · 2.28 KB
/
Game.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
package javattt;
import javattt.command.Command;
import javattt.command.PauseCommand;
import javattt.command.RestartCommand;
import javattt.command.StepCommand;
import javattt.fsm.*;
/**
* Created by IntelliJ IDEA.
* User: MGT
* Date: 2/22/12
* Time: 1:34 PM
* To change this template use File | Settings | File Templates.
*/
public abstract class Game {
public Board board = new Board() {};
public Player playerX = new Player(Side.X);
public Player playerO = new Player(Side.O);
public Player currentPlayer;
public Player masterPlayer;
public int xWinsCount;
public int oWinsCount;
public javattt.fsm.State state = new NewGameState(this);
public boolean playing = false;
public boolean versusAI;
public void start() {
start(null);
}
public void start(Command cmd) {
while(cmd instanceof RestartCommand || !(state instanceof HaltState || cmd instanceof PauseCommand)) {
if(cmd == null) cmd = new StepCommand();
cmd.issue(this);
cmd = state.readNextCommand();
onStateTransition();
}
if(state instanceof HaltState) onHalt();
}
public boolean chooseMarkerInPvP() {
return true;
}
public void updatePlayerUIs() {
playerX.updateUI(board);
playerO.updateUI(board);
}
public void displayPlayerHelpMessages() {
playerX.displayHelp();
playerO.displayHelp();
}
public void displayPlayerVictoryMessages(String message) {
playerX.displayVictoryMessage(message, xWinsCount, oWinsCount);
playerO.displayVictoryMessage(message, xWinsCount, oWinsCount);
}
public Command promptPlayer(Player player, String message) {
return player.promptUI(message);
}
public Player nonMasterPlayer() {
return masterPlayer == playerX ? playerO : playerX;
}
//hooks
public void onNewGame() {}
public void onSuccessfulMove(int[] coords) {}
public void onReceivingPlayVsAI() {}
public void onHalt() {}
public void onReceivingPlayAsX() {}
public void onPlay3x3() {}
public void onGameOver(Side victor) {}
public void onRestart() {}
public boolean readyForGameStart() {
return true;
}
public void onStateTransition() {}
}