Compare commits

..

100 Commits

Author SHA1 Message Date
jonah 82db2bdab1 fixed server build script 2022-01-17 12:19:52 +01:00
jonah 96ed5ac483 improved error handling 2022-01-17 00:41:27 +01:00
jonah a9d9d209b9 fixed npe in Session 2022-01-17 00:38:49 +01:00
jonah 86307e997b fixed bug in ChangePredictionOverlay 2022-01-16 23:47:36 +01:00
jonah ae8f33e598 improved error handling 2022-01-16 23:07:29 +01:00
jonah dcfea1854c added "end card" 2022-01-15 00:47:17 +01:00
jonah 111d089b1f added trick count label 2022-01-14 23:20:44 +01:00
jonah 607d6d104e bugfixes 2022-01-14 22:41:51 +01:00
jonah 1e4c772a66 added support for changeling and improved support for cloud and juggler 2022-01-14 21:57:30 +01:00
jonah ccc0dc2972 improved instructions screen (#18) 2022-01-14 13:58:06 +01:00
Johannes-coderer 0f61b25d4f Anleitungsscreen(#18) 2022-01-14 13:31:10 +01:00
jonah e015f2af81 multiple bugfixes 2022-01-14 09:15:10 +01:00
jonah 3e9e0edd70 Merge remote-tracking branch 'origin/main' into main 2022-01-14 09:01:03 +01:00
jonah e094a210f4 font adjustments 2022-01-14 09:00:39 +01:00
rbenedikt 850c5aa985 Sound Effects 2022-01-14 02:07:18 +01:00
Johannes-coderer 96b999dd39 Anleitungsscreen(#18) 2022-01-14 00:32:13 +01:00
Teubler ee0f2384be #16 started useful error handling 2022-01-13 23:09:20 +01:00
Teubler 114cae0d6c #16 added basic error screen 2022-01-13 22:30:09 +01:00
Teubler 07633da4ee #16 added internationalized messages 2022-01-13 22:25:39 +01:00
jonah a5b00ac0a1 rejoin support for libgdx client 2022-01-13 22:05:47 +01:00
jonah 891e47ffec bugfixes 2022-01-13 22:04:54 +01:00
jonah d26d6646c5 refactoring 2022-01-13 19:26:26 +01:00
jonah d2468557b5 refactoring 2022-01-13 19:23:52 +01:00
jonah e44e0db63e bugfixes 2022-01-13 16:30:09 +01:00
jonah 3b9becbbda added name validation 2022-01-13 16:25:47 +01:00
jonah 2e9549e4e0 fixed dimming behind overlays
added menu
2022-01-12 21:11:57 +01:00
jonah c2a81febb9 migration to asset manager 2022-01-12 16:01:49 +01:00
jonah 0e6658c2d9 improved menu accessibility 2022-01-12 14:44:04 +01:00
jonah 93e341d445 bugfixes 2022-01-12 12:51:22 +01:00
jonah b5d82ac8de added debug websocket 2022-01-12 12:15:52 +01:00
jonah 155049830b improved null safety 2022-01-12 11:35:02 +01:00
jonah 94ac10e93b migrated to jackson 2022-01-12 10:28:31 +01:00
jonah b20f300260 bugfixes and improvements
* fixed inconsistent player order
* minor visual adjustments
* refactoring
2022-01-11 14:00:28 +01:00
jonah 8c719a8835 support for juggling and multicolored cards 2022-01-10 22:00:37 +01:00
jonah 3adaeffe2d changes to sync 2022-01-10 20:22:07 +01:00
rbenedikt ee2367643d Kartenbilder jpg@250x400px 2022-01-10 16:10:59 +01:00
jonah bf87f4af1c internationalization of game screen 2022-01-10 15:12:42 +01:00
jonah f7d753e7e0 game logic 2022-01-10 14:30:27 +01:00
jonah 4eb1b61e7b added sync point after trump determination 2022-01-10 04:06:27 +01:00
jonah 298167d4c9 improved menus in libGDX client 2022-01-10 03:10:32 +01:00
jonah 7a25d3b881 improved libGDX client logging 2022-01-09 22:49:32 +01:00
jonah 50fe4b7681 added suit cards 2022-01-09 22:24:08 +01:00
jonah a977e4dca1 Updated Log4j2 dependency 2022-01-09 22:23:54 +01:00
jonah 238c67ce48 visual improvements 2021-12-14 19:28:02 +01:00
jonah 2d3477ffc5 added sync at start of round and trick 2021-12-14 17:34:20 +01:00
jonah 62b6c3fd81 added TimeoutMessage 2021-12-14 16:26:02 +01:00
jonah 62f04dfded visual improvements 2021-12-14 14:00:59 +01:00
jonah 6fe8a70d9e improved CreateGameScreen 2021-12-14 12:55:18 +01:00
jonah 1e5ed45c63 fixed game creation screen 99c4f688 #16 2021-12-14 11:16:26 +01:00
jonah 44162b5bf3 Update .gitlab-ci.yml file 2021-12-14 10:59:04 +01:00
jonah 64152219a0 Updated Dependencies 2021-12-14 09:03:10 +01:00
Teubler 99c4f68893 #16 + updated CreateGameScreen
functionality of CreateGameScreen WIP
2021-12-09 21:36:40 +01:00
Jonah 5e428d1301 fixed 1fc7103d (#17) 2021-12-07 17:25:59 +01:00
Jonah e5e67a3418 reconnect in server and cli 2021-12-05 11:21:46 +01:00
Johannes-coderer 1fc7103d66 Spielscreen (#17) 2021-12-04 15:14:00 +01:00
Jonah 17ec7a1a90 #17 2021-12-03 10:53:52 +01:00
Jonah 4a6e1e81e4 Cleanup 2021-12-02 22:44:27 +01:00
Jonah fb400afdc2 Cleanup 2021-12-02 22:24:45 +01:00
riedlsepp 3bd95c0b61 Kartenbilder jpg@250x400px 2021-12-02 14:45:03 +01:00
riedlsepp a9e4644b06 Einzelgrafikelemente #7 2021-12-02 03:02:30 +01:00
Jonah 442fc6c7d0 shrank client size 2021-12-01 17:58:53 +01:00
Jonah c7344a502f improved GameScreen 2021-12-01 14:28:03 +01:00
Jonah 4cd5e90e2b bugfixes in server and cli-client 2021-11-30 11:23:41 +01:00
vi-ahirmer 3179a17b36 #14 2021-11-29 15:56:32 +01:00
Jonah db07bfa453 CLI Client #15 2021-11-25 23:17:29 +01:00
Jonah 1cc4c3eeb9 CLI Client #15 2021-11-25 19:36:52 +01:00
Jonah 766e923713 CLI Client #15 2021-11-25 19:33:31 +01:00
Johannes-coderer 34f6d9848b Erste Grundlage für den Spielscreen (#17) 2021-11-25 19:28:14 +01:00
Johannes-coderer 6fc1c9429e Erste Grundlage für den Spielscreen (#17) 2021-11-25 19:19:55 +01:00
vi-ahirmer 5cf4bc506f Ticket #14 2021-11-23 16:00:14 +01:00
BuildTools 3e9b9d1f31 improved libGDX client performance
added automatic texture packing
2021-11-19 17:55:46 +01:00
Jonah 96a2d43aaf extracted dependencies info into Dependencies.kt 2021-11-19 10:42:31 +01:00
Jonah 9bc2d08ddd migration to gradle kotlin dsl 2021-11-19 09:59:40 +01:00
Jonah 73ff37cc38 added distribution task to client buildscript 2021-11-17 12:31:35 +01:00
Jonah 2b86d0d86c added parse method to messages 2021-11-15 18:29:25 +01:00
BuildTools 7f33529e52 Refactored LibGDX Client 2021-11-12 22:34:14 +01:00
Teubler 4ed23e1a0f Initial libGDX Code Commit #11 2021-11-12 18:34:00 +01:00
BuildTools 385c6ba50a Sample LibGDX project setup 2021-11-12 18:16:28 +01:00
riedlsepp 270bc40fa3 Einzelgrafikelemente #7 2021-11-12 10:25:55 +01:00
Jonah 67bb44eb39 Fixed Gradle Tests 2021-11-12 09:23:49 +01:00
Jonah 544f9c0877 Migration from Maven to Gradle 7.3 2021-11-12 09:06:59 +01:00
Johannes-coderer 36deb15f02 Weitere Client- und ServerMessages für Verbindungsverlust und VoteCick 2021-11-11 13:06:08 +01:00
Jonah a24e8b0223 Reworked state machine 2021-11-11 09:48:59 +01:00
Johannes-coderer b6868db2c6 Merge remote-tracking branch 'origin/main' 2021-11-10 20:27:40 +01:00
Johannes-coderer 649fd581f8 Bugfixes 2021-11-10 20:27:19 +01:00
Benedikt Riedl d1acde7bde Upload New File 2021-11-09 12:38:29 +00:00
Benedikt Riedl 74c5e7709a Upload New File 2021-11-09 12:38:09 +00:00
Benedikt Riedl a0b483a4f0 Upload New File 2021-11-09 12:37:33 +00:00
Benedikt Riedl f04ee9177f Upload New File 2021-11-09 12:36:56 +00:00
Benedikt Riedl 5d9c958732 Menügrafiken 2021-11-09 12:36:06 +00:00
Benedikt Riedl 4946c214be Konzeptgrafiken 2021-11-09 12:35:45 +00:00
Johannes-coderer ceb4c49e01 Client- und Server-Nachrichten verbessert(#9) 2021-11-05 12:43:58 +01:00
Jonah 7f84889a02 Fehler in Spiellogik von Jongleur und Wolke behoben (#12) 2021-11-05 01:31:20 +01:00
Johannes-coderer 7e1d15591e Client- und Server-Nachrichten implementiert(#9) 2021-11-04 22:54:40 +01:00
Jonah 2f1794973a - Jubiläumsedition implementiert (#12)
- Tests verbessert
2021-11-04 20:18:26 +01:00
Jonah eba221525f - refactored GameData
- removed reference to Context in State
2021-10-29 22:58:11 +02:00
Jonah Bauer c301d08094 Update .gitlab-ci.yml file 2021-10-28 21:05:47 +00:00
Jonah bba7153801 Issue #5: Grundspiel implementieren 2021-10-28 23:04:49 +02:00
Jonah b32ff5aa6f project setup 2021-10-18 16:30:07 +02:00
Jonah Bauer ca5401cbe2 Initial commit 2021-10-11 13:50:11 +00:00
26 changed files with 126 additions and 122 deletions
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
@@ -16,7 +16,7 @@ import eu.jonahbauer.wizard.common.model.Card;
public class InstructionScreen extends MenuScreen {
private static final int MAX_PAGE = 3;
private TextButton buttonBack;
private TextButton buttonOK;
private VerticalGroup content;
private ScrollPane scrollPane;
private TextButton nextPageButton;
@@ -29,7 +29,7 @@ public class InstructionScreen extends MenuScreen {
private final ChangeListener listener = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
if (actor == buttonBack) {
if (actor == buttonOK) {
game.getClient().execute(Menu.class, Menu::showMenuScreen);
sfxClick();
} else if (actor == nextPageButton) {
@@ -70,9 +70,9 @@ public class InstructionScreen extends MenuScreen {
previousPageButton.addListener(listener);
getButtonGroup().addActor(previousPageButton);
buttonBack = new TextButton(messages.get("menu.instruction.back"), skin);
buttonBack.addListener(listener);
getButtonGroup().addActor(buttonBack);
buttonOK = new TextButton(messages.get("menu.instruction.back"), skin);
buttonOK.addListener(listener);
getButtonGroup().addActor(buttonOK);
nextPageButton = new TextButton(messages.get("menu.instruction.nextPageButton"), skin);
nextPageButton.addListener(listener);
@@ -83,7 +83,7 @@ public class InstructionScreen extends MenuScreen {
scrollPane.setSize(0.65f * WizardGame.WIDTH, 400 + 0.1f * WizardGame.HEIGHT + 80);
stage.addActor(scrollPane);
stage.addCaptureListener(new KeyboardFocusManager(scrollPane, previousPageButton, buttonBack, nextPageButton));
stage.addCaptureListener(new KeyboardFocusManager(scrollPane, previousPageButton, buttonOK, nextPageButton));
showFirstPage();
}
@@ -166,8 +166,9 @@ public class InstructionScreen extends MenuScreen {
reset();
startSection("menu.instruction.variant.title");
addParagraph("menu.instruction.variant.intro");
Label variantsIntro = new Label(messages.get("menu.instruction.variant.intro"), skin);
content.addActor(variantsIntro);
Table table = new Table(skin).padTop(10);
table.defaults().space(10.0f).left().top();
table.columnDefaults(1).grow();
@@ -70,6 +70,6 @@ public class CardUtil {
);
public Card.Suit getDefaultTrumpSuit(Card card) {
return card == null ? Card.Suit.NONE : DEFAULT_SUITES.get(card);
return DEFAULT_SUITES.get(card);
}
}
@@ -0,0 +1,26 @@
package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class KickVotedMessage extends ServerMessage {
/**
* UUID of the voting player
*/
private final @NonNull UUID voter;
/**
* UUID of player who is supposed to be kicked
*/
private final @NonNull UUID player;
/**
* Time until the vote ends in {@link System#currentTimeMillis() UNIX time}
*/
private final long timeout;
}
@@ -0,0 +1,18 @@
package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class KickedMessage extends ServerMessage {
/**
* UUID of player who was kicked
*/
private final @NonNull UUID player;
}
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
import lombok.SneakyThrows;
@EqualsAndHashCode
public abstract sealed class ServerMessage permits AckMessage, GameMessage, NackMessage, PlayerLeftMessage, PlayerModifiedMessage, SessionJoinedMessage, SessionListMessage, SessionModifiedMessage, SessionRemovedMessage, StartingGameMessage {
public abstract sealed class ServerMessage permits AckMessage, GameMessage, KickVotedMessage, KickedMessage, NackMessage, PlayerLeftMessage, PlayerModifiedMessage, SessionJoinedMessage, SessionListMessage, SessionModifiedMessage, SessionRemovedMessage, StartingGameMessage {
private static final ObjectMapper MAPPER = SerializationUtil.newObjectMapper(ServerMessage.class, ObserverMessage.class);
public static ServerMessage parse(String json) throws ParseException {
@@ -1,17 +1,26 @@
package eu.jonahbauer.wizard.core.machine.states.round;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.model.Card;
import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game;
import eu.jonahbauer.wizard.common.messages.observer.HandMessage;
import eu.jonahbauer.wizard.common.messages.observer.TrumpMessage;
import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage;
import eu.jonahbauer.wizard.common.messages.player.PickTrumpMessage;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
import eu.jonahbauer.wizard.core.machine.GameState;
import eu.jonahbauer.wizard.core.model.card.GameCards;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import static eu.jonahbauer.wizard.core.machine.states.GameData.*;
import static eu.jonahbauer.wizard.common.messages.observer.UserInputMessage.Action.PICK_TRUMP;
public final class DeterminingTrump extends RoundState {
private transient UUID player;
private transient boolean werewolf;
public DeterminingTrump(GameData data) {
super(data.require(TRUMP_CARD).requireEach(PLAYERS, HANDS));
@@ -26,31 +35,74 @@ public final class DeterminingTrump extends RoundState {
var player = entry.getKey();
var hand = entry.getValue();
if (hand.contains(Card.WEREWOLF)) {
this.player = player;
this.werewolf = true;
game.notify(new TrumpMessage(trumpCard, null));
game.notify(new TrumpMessage(Card.WEREWOLF, null));
var data = getData().with(CURRENT_PLAYER, player);
return sync(data, DeterminingTrumpUserInput::new);
game.notify(new UserInputMessage(this.player, PICK_TRUMP, getTimeout(game, true)));
return timeout(game);
}
}
// default trump handling
Card.Suit trumpSuit = trumpCard != null ? GameCards.get(trumpCard).getTrumpSuit() : Card.Suit.NONE;
if (trumpSuit == null) {
var player = getDealer();
this.player = getDealer();
game.notify(new TrumpMessage(trumpCard, null));
var data = getData().with(CURRENT_PLAYER, player);
return sync(data, DeterminingTrumpUserInput::new);
game.notify(new UserInputMessage(this.player, PICK_TRUMP, getTimeout(game, true)));
return timeout(game);
} else {
var data = getData().with(
TRUMP_SUIT, trumpSuit,
CURRENT_PLAYER, getNextPlayer(getDealer())
);
game.notify(new TrumpMessage(get(TRUMP_CARD), trumpSuit));
return sync(data, Predicting::new);
return transition(game, trumpSuit);
}
}
@Override
public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
Card.Suit[] suits;
if (werewolf) {
suits = new Card.Suit[]{Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW, Card.Suit.NONE};
} else {
suits = new Card.Suit[]{Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW};
}
return transition(game, suits[game.getRandom().nextInt(suits.length)]);
}
@Override
public Optional<GameState> onMessage(Game game, UUID player, PlayerMessage message) {
if (this.player.equals(player) && message instanceof PickTrumpMessage trumpMessage) {
checkTrumpSuit(trumpMessage.getTrumpSuit());
return transition(game, trumpMessage.getTrumpSuit());
} else {
return super.onMessage(game, player, message);
}
}
private void checkTrumpSuit(Card.Suit suit) {
if (!werewolf && suit == Card.Suit.NONE) {
throw new IllegalArgumentException("Trump suit must not be " + Card.Suit.NONE + ".");
} else if (suit == null) {
throw new IllegalArgumentException("Trump suit must not be null.");
}
}
private Optional<GameState> transition(Game game, @NotNull Card.Suit trumpSuit) {
GameData data = getData().with(
TRUMP_SUIT, trumpSuit,
CURRENT_PLAYER, getNextPlayer(getDealer())
);
if (werewolf) {
var mutableHands = new HashMap<>(get(HANDS));
var mutableHand = new ArrayList<>(mutableHands.get(player));
mutableHand.set(mutableHand.indexOf(Card.WEREWOLF), get(TRUMP_CARD));
mutableHands.put(player, List.copyOf(mutableHand));
data = data.with(HANDS, Map.copyOf(mutableHands));
game.notify(new TrumpMessage(Card.WEREWOLF, trumpSuit));
game.notify(player, new HandMessage(player, mutableHands.get(player)));
} else {
game.notify(new TrumpMessage(get(TRUMP_CARD), trumpSuit));
}
return sync(data, Predicting::new);
}
}
@@ -1,89 +0,0 @@
package eu.jonahbauer.wizard.core.machine.states.round;
import eu.jonahbauer.wizard.common.messages.observer.HandMessage;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.messages.observer.TrumpMessage;
import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage;
import eu.jonahbauer.wizard.common.messages.player.PickTrumpMessage;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
import eu.jonahbauer.wizard.common.model.Card;
import eu.jonahbauer.wizard.core.machine.Game;
import eu.jonahbauer.wizard.core.machine.GameState;
import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.states.TransientState;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import static eu.jonahbauer.wizard.common.messages.observer.UserInputMessage.Action.PICK_TRUMP;
import static eu.jonahbauer.wizard.core.machine.states.GameData.*;
import static eu.jonahbauer.wizard.core.machine.states.GameData.TRUMP_CARD;
public final class DeterminingTrumpUserInput extends RoundState implements TransientState {
private final transient UUID player;
private final transient boolean werewolf;
public DeterminingTrumpUserInput(GameData data) {
super(data.require(TRUMP_CARD).requireEach(PLAYERS, HANDS).require(CURRENT_PLAYER));
this.player = get(CURRENT_PLAYER);
this.werewolf = get(HANDS).get(this.player).contains(Card.WEREWOLF);
}
@Override
public Optional<GameState> onEnter(Game game) {
game.notify(new UserInputMessage(this.player, PICK_TRUMP, getTimeout(game, true)));
return timeout(game);
}
@Override
public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
Card.Suit[] suits;
if (werewolf) {
suits = new Card.Suit[] {Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW, Card.Suit.NONE};
} else {
suits = new Card.Suit[] {Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW};
}
return transition(game, suits[game.getRandom().nextInt(suits.length)]);
}
@Override
public Optional<GameState> onMessage(Game game, UUID player, PlayerMessage message) {
if (this.player.equals(player) && message instanceof PickTrumpMessage trumpMessage) {
checkTrumpSuit(trumpMessage.getTrumpSuit());
return transition(game, trumpMessage.getTrumpSuit());
} else {
return super.onMessage(game, player, message);
}
}
private void checkTrumpSuit(Card.Suit suit) {
if (!werewolf && suit == Card.Suit.NONE) {
throw new IllegalArgumentException("Trump suit must not be " + Card.Suit.NONE + ".");
} else if (suit == null) {
throw new IllegalArgumentException("Trump suit must not be null.");
}
}
private Optional<GameState> transition(Game game, @NotNull Card.Suit trumpSuit) {
GameData data = getData().with(
TRUMP_SUIT, trumpSuit,
CURRENT_PLAYER, getNextPlayer(getDealer())
);
if (werewolf) {
var mutableHands = new HashMap<>(get(HANDS));
var mutableHand = new ArrayList<>(mutableHands.get(player));
mutableHand.set(mutableHand.indexOf(Card.WEREWOLF), get(TRUMP_CARD));
mutableHands.put(player, List.copyOf(mutableHand));
data = data.with(HANDS, Map.copyOf(mutableHands));
game.notify(new TrumpMessage(Card.WEREWOLF, trumpSuit));
game.notify(player, new HandMessage(player, mutableHands.get(player)));
} else {
game.notify(new TrumpMessage(get(TRUMP_CARD), trumpSuit));
}
return sync(data, Predicting::new);
}
}
@@ -38,7 +38,7 @@ public class DeterminingTrumpTest {
@SuppressWarnings("SameParameterValue")
private Game performTest(GameConfiguration configuration, int round, Map<UUID, List<Card>> hands, Card trumpCard, MessageQueue queue) {
Game game = spy(new Game(configuration, queue));
doFinish().when(game).transition(argThat(argument -> argument instanceof SyncState && argument.getData().has(TRUMP_SUIT)));
doFinish().when(game).transition(any(SyncState.class));
queue.setGame(game);
var playerList = List.of(players);
@@ -92,8 +92,7 @@ public class DeterminingTrumpTest {
);
// play cards in given order
MessageQueue queue = new MessageQueue()
.sync(players);
MessageQueue queue = new MessageQueue();
Game game = performTest(Configurations.ANNIVERSARY_2021, 0, hands, Card.GREEN_JESTER, queue);
@@ -118,7 +117,6 @@ public class DeterminingTrumpTest {
// play cards in given order
MessageQueue queue = new MessageQueue()
.sync(players)
.addPickTrump(players[0], Card.Suit.GREEN);
Game game = performTest(Configurations.ANNIVERSARY_2021, 0, hands, Card.BLUE_WIZARD, queue);
@@ -146,7 +144,6 @@ public class DeterminingTrumpTest {
// play cards in given order
MessageQueue queue = new MessageQueue()
.sync(players)
.addPickTrump(players[3], Card.Suit.YELLOW);
Game game = performTest(Configurations.ANNIVERSARY_2021, 0, hands, Card.GREEN_1, queue);
@@ -148,11 +148,10 @@ public class RoundTest {
@Test
public void run_Anniversary() throws ExecutionException, InterruptedException {
MessageQueue queue = new MessageQueue()
.sync(players) // starting_round
.sync(players) // dealing
.sync(players) // determining_trump
.sync(players)
.sync(players)
.addPickTrump(players[2], Card.Suit.YELLOW)
.sync(players) // determining_trump
.sync(players)
.addPrediction(players[3], 2)
.addPrediction(players[0], 2)
.addPrediction(players[1], 2)