Skip to content

Commit e93a34a

Browse files
committed
- Added random movement delegate, so CPU vs. CPU is possible again
1 parent c852acb commit e93a34a

File tree

10 files changed

+63
-28
lines changed

10 files changed

+63
-28
lines changed

engine/src/main/java/de/bwulfert/engine/OpenTriad.java

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
public class OpenTriad {
1818

19+
20+
public static final int BATTLEFIELD_WIDTH = 3;
21+
public static final int BATTLEFIELD_HEIGHT = 3;
22+
1923
public static final String DEFAULT_ENCODING = "UTF-8";
2024

2125
private List<Card> cards;
@@ -42,4 +46,5 @@ public Deck getDefaultDeck2() {
4246
public void setCards(List<Card> cards) {
4347
this.cards = cards;
4448
}
49+
4550
}

engine/src/main/java/de/bwulfert/engine/api/BattlefieldDelegate.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public interface BattlefieldDelegate {
99

1010
void onTurnFinished(BattlefieldController battlefieldController, PlayerController currentPlayer, PlayerController nextPlayer, int turnCount);
1111

12+
void slotAlreadySet(int xPosition, int yPosition);
13+
1214
void onGameFinished(BattlefieldController battlefieldController, PlayerController winner);
1315

1416
}

engine/src/main/java/de/bwulfert/engine/api/impl/BattlefieldController.java

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ public void nextTurn() {
3636
int xPosition = moveDelegate.getX();
3737
int yPosition = moveDelegate.getY();
3838

39+
while (!battlefield.isSlotAvailable(xPosition, yPosition)) {
40+
battlefieldDelegate.slotAlreadySet(xPosition, yPosition);
41+
xPosition = moveDelegate.getX();
42+
yPosition = moveDelegate.getY();
43+
}
44+
3945
battlefield.setCardAtPosition(
4046
currentPlayer.getPlayer(),
4147
card,

engine/src/main/java/de/bwulfert/engine/api/impl/DefaultBattlefieldDelegate.java

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public void onTurnFinished(BattlefieldController battlefieldController, PlayerCo
1414

1515
}
1616

17+
@Override
18+
public void slotAlreadySet(int xPosition, int yPosition) {
19+
20+
}
21+
1722
@Override
1823
public void onGameFinished(BattlefieldController battlefieldController, PlayerController winner) {
1924

engine/src/main/java/de/bwulfert/engine/api/impl/DefaultMoveDelegate.java renamed to engine/src/main/java/de/bwulfert/engine/api/impl/RandomMoveDelegate.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,39 @@
11
package de.bwulfert.engine.api.impl;
22

3+
import de.bwulfert.engine.OpenTriad;
34
import de.bwulfert.engine.api.MoveDelegate;
45
import de.bwulfert.engine.model.Card;
56
import de.bwulfert.engine.model.Deck;
67

7-
public class DefaultMoveDelegate implements MoveDelegate {
8+
import java.util.Random;
89

9-
// TODO: REMOVE ME - JUST FOR TESTING, UNTIL REAL CARD-CHOOSING HAS BEEN IMPLEMENTED
10-
public static int x = 0;
11-
public static int y = 0;
12-
// Remember - these values are shared across all DefaultMoveDelegate-Instances
10+
public class RandomMoveDelegate implements MoveDelegate {
1311

12+
private Random random;
1413
private Deck deck;
1514

15+
public RandomMoveDelegate() {
16+
random = new Random();
17+
}
18+
1619
@Override
1720
public void setActiveDeck(Deck deck) {
1821
this.deck = deck;
1922
}
2023

2124
@Override
2225
public Card getCard() {
23-
// TODO: REMOVE ME - JUST FOR TESTING, UNTIL REAL CARD-CHOOSING HAS BEEN IMPLEMENTED
24-
25-
// TODO: REMOVE ME - JUST FOR TESTING, UNTIL REAL CARD-CHOOSING HAS BEEN IMPLEMENTED
26-
2726
return deck.chooseAndRemove(0);
2827
}
2928

3029
@Override
3130
public int getX() {
32-
return x;
31+
return random.nextInt(OpenTriad.BATTLEFIELD_WIDTH);
3332
}
3433

3534
@Override
3635
public int getY() {
37-
return y;
36+
return random.nextInt(OpenTriad.BATTLEFIELD_HEIGHT);
3837
}
3938

4039
@Override

engine/src/main/java/de/bwulfert/engine/model/Battlefield.java

+3
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@ public void setCardAtPosition(Player player, Card card, int xPos, int yPos) {
2626
battleField[yPos][xPos] = card;
2727
}
2828

29+
public boolean isSlotAvailable(int xPosition, int yPosition) {
30+
return battleField[yPosition][xPosition] == null;
31+
}
2932
}

engine/src/test/java/de/bwulfert/engine/tests/EngineTests.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package de.bwulfert.engine.tests;
22

33
import de.bwulfert.engine.OpenTriad;
4+
import de.bwulfert.engine.api.MoveDelegate;
45
import de.bwulfert.engine.api.impl.BattlefieldController;
56
import de.bwulfert.engine.api.impl.PlayerController;
67
import de.bwulfert.engine.api.impl.PreselectedCardChooser;
8+
import de.bwulfert.engine.api.impl.RandomMoveDelegate;
79
import de.bwulfert.engine.model.Player;
810
import org.junit.Test;
911

@@ -17,9 +19,20 @@ public void testGameLoop() {
1719
openTriad.loadCards();
1820

1921
BattlefieldController battlefieldController = new BattlefieldController();
22+
MoveDelegate playerMoveDelegate = new RandomMoveDelegate();
23+
playerMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
24+
25+
MoveDelegate cpuMoveDelegate = new RandomMoveDelegate();
26+
cpuMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
2027
battlefieldController.initialize(
21-
new PlayerController(new Player("Test Player 1", new PreselectedCardChooser().chooseCards(openTriad.getCards()))),
22-
new PlayerController(new Player("Test Player 2", new PreselectedCardChooser().chooseCards(openTriad.getCards())))
28+
new PlayerController(
29+
new Player("Test Player 1"),
30+
playerMoveDelegate
31+
),
32+
new PlayerController(
33+
new Player("Test Player 2"),
34+
cpuMoveDelegate
35+
)
2336
);
2437

2538
for (int i = 0; i < 9; i++) {

fxApp/src/main/java/de/bwulfert/fxapp/OpenTriadFXController.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import de.bwulfert.engine.api.BattlefieldDelegate;
55
import de.bwulfert.engine.api.MoveDelegate;
66
import de.bwulfert.engine.api.impl.BattlefieldController;
7-
import de.bwulfert.engine.api.impl.DefaultMoveDelegate;
87
import de.bwulfert.engine.api.impl.PlayerController;
98
import de.bwulfert.engine.api.impl.PreselectedCardChooser;
9+
import de.bwulfert.engine.api.impl.RandomMoveDelegate;
1010
import de.bwulfert.engine.model.Card;
1111
import de.bwulfert.engine.model.Player;
1212
import javafx.fxml.FXML;
@@ -55,10 +55,10 @@ public void initialize(URL location, ResourceBundle resources) {
5555

5656
BattlefieldController battlefieldController = new BattlefieldController(this);
5757
startGame.setOnAction(onClick -> {
58-
MoveDelegate playerMoveDelegate = new DefaultMoveDelegate();
58+
MoveDelegate playerMoveDelegate = new RandomMoveDelegate();
5959
playerMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
6060

61-
MoveDelegate cpuMoveDelegate = new DefaultMoveDelegate();
61+
MoveDelegate cpuMoveDelegate = new RandomMoveDelegate();
6262
cpuMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
6363
battlefieldController.initialize(
6464
new PlayerController(
@@ -132,6 +132,11 @@ public void onTurnFinished(BattlefieldController battlefieldController, PlayerCo
132132
roundCount.setText("Round: " + turnCount);
133133
}
134134

135+
@Override
136+
public void slotAlreadySet(int xPosition, int yPosition) {
137+
138+
}
139+
135140
@Override
136141
public void onGameFinished(BattlefieldController battlefieldController, PlayerController winner) {
137142
System.out.println("Game finished, the winner is: " + winner.getPlayer().getName());

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Interfaces / Implementations:
3939
* DefaultBattlefieldDelegate - Dummy implementation (for testing purposes) - doesnt actually do anything
4040
* The other subprojects make use of this.
4141
* MoveDelegate - Callbacks for (engine-events) in order to provide a runtime-independent player-turn. This is needed for telling the engine which card a player sets on the battlefield.
42-
* DefaultMoveDelegate - Default implementation - mimics turns of a player and provides information about what card has been set on the battlefield.
42+
* RandomMoveDelegate - Mimics the turn of a player by randomly setting cards on the battlefield.
4343
* TerminalMoveDelegate - Allows a user to input card-, x- and y- information in order to set a card.
4444

4545

terminalApp/src/main/java/de/bwulfert/opentriad/terminalapp/OpenTriadTerminal.java

+8-11
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import de.bwulfert.engine.api.BattlefieldDelegate;
55
import de.bwulfert.engine.api.MoveDelegate;
66
import de.bwulfert.engine.api.impl.BattlefieldController;
7-
import de.bwulfert.engine.api.impl.DefaultMoveDelegate;
87
import de.bwulfert.engine.api.impl.PlayerController;
98
import de.bwulfert.engine.api.impl.PreselectedCardChooser;
9+
import de.bwulfert.engine.api.impl.RandomMoveDelegate;
1010
import de.bwulfert.engine.model.Player;
1111
import de.bwulfert.opentriad.terminalapp.view.BattlefieldView;
1212

@@ -23,10 +23,10 @@ public OpenTriadTerminal() {
2323
openTriad.loadCards();
2424
BattlefieldController battlefieldController = new BattlefieldController(this);
2525

26-
MoveDelegate playerMoveDelegate = new DefaultMoveDelegate();
26+
MoveDelegate playerMoveDelegate = new RandomMoveDelegate();
2727
playerMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
2828

29-
MoveDelegate cpuMoveDelegate = new DefaultMoveDelegate();
29+
MoveDelegate cpuMoveDelegate = new RandomMoveDelegate();
3030
cpuMoveDelegate.setActiveDeck(new PreselectedCardChooser().chooseCards(openTriad.getCards()));
3131
battlefieldController.initialize(
3232
new PlayerController(
@@ -43,14 +43,6 @@ public OpenTriadTerminal() {
4343

4444
while (!battlefieldController.getBattlefield().areAllSlotsSet()) {
4545
battlefieldController.nextTurn();
46-
// TODO: REMOVE ME, JUST FOR TESTING PURPOSES
47-
if (DefaultMoveDelegate.x == 2) {
48-
DefaultMoveDelegate.x = 0;
49-
DefaultMoveDelegate.y++;
50-
} else {
51-
DefaultMoveDelegate.x++;
52-
}
53-
// TODO: REMOVE ME, JUST FOR TESTING PURPOSES
5446
}
5547
}
5648

@@ -71,6 +63,11 @@ public void onTurnFinished(BattlefieldController battlefieldController, PlayerCo
7163
System.out.println("\n\n");
7264
}
7365

66+
@Override
67+
public void slotAlreadySet(int xPosition, int yPosition) {
68+
System.out.println("Slot at x: " + xPosition + " | y:" + yPosition + " already set, you've to use another one.");
69+
}
70+
7471
@Override
7572
public void onGameFinished(BattlefieldController battlefieldController, PlayerController winner) {
7673
System.out.println("Winner: " + winner.getPlayer().getName());

0 commit comments

Comments
 (0)