-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGameController.java
More file actions
92 lines (71 loc) · 2.91 KB
/
GameController.java
File metadata and controls
92 lines (71 loc) · 2.91 KB
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
import javafx.stage.Stage;
public class GameController {
private final Stage stage;
private final InputHandler inputHandler;
private GameState gameState;
public GameController(Stage stage) {
this.stage = stage;
this.inputHandler = new InputHandler();
}
private void moveCardToPalette(Player player, int index) {
Card card = player.removeCardFromHand(index);
player.addCardToPalette(card);
}
private String moveCardToCanvas(Player player, int index) {
Card card = player.removeCardFromHand(index);
return card.getColor();
}
public void startGame() {
this.gameState = new GameState();
System.out.println("Player " + gameState.getCurrentPlayerName() + " goes first!");
runGameLoop();
System.out.println("Player " + gameState.getCurrentPlayerName() + " loses!");
}
private void runGameLoop() {
boolean gameIsRunning = true;
while (gameIsRunning) {
GameUI.displayAll(stage, gameState);
if (gameState.getCurrentPlayer().getHand().isEmpty()) {
break;
}
if (!processPlayerTurn(gameState)) {
break;
}
}
}
private boolean processPlayerTurn(GameState gameState) {
Player currentPlayer = gameState.getCurrentPlayer();
String currentPlayerName = gameState.getCurrentPlayerName();
String playChoice = inputHandler.promptPlayChoice(currentPlayerName, currentPlayer.getHand().size());
if (playChoice.equals("Concede")) {
return false;
}
return executePlayerMove(gameState, playChoice, currentPlayerName);
}
private boolean executePlayerMove(GameState gameState, String playChoice, String playerName) {
Player currentPlayer = gameState.getCurrentPlayer();
Player opponent = gameState.getOpponentPlayer();
Player newPlayer = currentPlayer.clonePlayer();
String newCanvasColor = gameState.getCanvasColor();
boolean playToPalette = playChoice.contains("Palette");
boolean playToCanvas = playChoice.contains("Canvas");
if (playToPalette) {
int paletteCardIndex = inputHandler.promptCardChoice(playerName, newPlayer.getHand(), "Palette");
moveCardToPalette(newPlayer, paletteCardIndex);
}
if (playToCanvas) {
int canvasCardIndex = inputHandler.promptCardChoice(playerName, newPlayer.getHand(), "Canvas");
newCanvasColor = moveCardToCanvas(newPlayer, canvasCardIndex);
}
if (GameLogic.playerWinning(newCanvasColor, newPlayer.getPalette(), opponent.getPalette())) {
System.out.println("That move works!");
currentPlayer.copyFrom(newPlayer);
gameState.setCanvasColor(newCanvasColor);
gameState.switchPlayer();
return true;
} else {
System.out.println("That move doesn't work!");
return true;
}
}
}