diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class index 350fe727e566c934f93bac48affcde463a030c7e..aed693d061b56373910fef0093842d3cb06818ae 100644 Binary files a/class/application/Controller$1.class and b/class/application/Controller$1.class differ diff --git a/class/application/Controller$2.class b/class/application/Controller$2.class index 5727fb668a20b53aef5ef45dc18ff6ff3d9ac2d1..12288a7b9eef46237ca681dd56214c213533d04e 100644 Binary files a/class/application/Controller$2.class and b/class/application/Controller$2.class differ diff --git a/class/application/Controller$3.class b/class/application/Controller$3.class index d19dbde1a0aa0606ccb2fb617fd2a402c4bdafcc..674254581b6d0aeb10231e38784e9de13bf2f86d 100644 Binary files a/class/application/Controller$3.class and b/class/application/Controller$3.class differ diff --git a/class/application/Controller$4.class b/class/application/Controller$4.class index 3d66659312c026d6b7916b1c15f8f990063f1d32..0e30c9ad4c45e9cd5c37fe6434f78c6d976ff278 100644 Binary files a/class/application/Controller$4.class and b/class/application/Controller$4.class differ diff --git a/class/application/Controller$5.class b/class/application/Controller$5.class index 083266af95ecf40619ef7678a0a7257d9be6ff10..26f7432484944012f45cea7dd64a0eb14635bc7c 100644 Binary files a/class/application/Controller$5.class and b/class/application/Controller$5.class differ diff --git a/class/application/Controller$6.class b/class/application/Controller$6.class index e6748a202ba9d1592f4b298c1b67c8858e96e976..97f1ac5053f5c71bd2e7e2dcee605151db956933 100644 Binary files a/class/application/Controller$6.class and b/class/application/Controller$6.class differ diff --git a/class/application/Controller$7.class b/class/application/Controller$7.class index 5fbdceeb78ca94d0af3f56c1bfd188627dbbbf6a..d3e23cf54407d61444c35300d79a4a8fbc069b41 100644 Binary files a/class/application/Controller$7.class and b/class/application/Controller$7.class differ diff --git a/class/application/Controller$8.class b/class/application/Controller$8.class index b372bab21638d817f67e8caf0fc1f510c5d2c8ed..140a01e8ff74ecc69b328e2a0066f2fd0b120444 100644 Binary files a/class/application/Controller$8.class and b/class/application/Controller$8.class differ diff --git a/class/application/Controller$9.class b/class/application/Controller$9.class index 27ffd23f08d7441495e2ec86494f8cec1e7a2316..3b2a5cbd888c58f847cf613cfe5ff78fad649edf 100644 Binary files a/class/application/Controller$9.class and b/class/application/Controller$9.class differ diff --git a/class/application/Controller.class b/class/application/Controller.class index e2e2a5dd5aa6d1c4947479348e68d7fb7eee960f..d8117d6ec6fca5287b61b44ff07823a065014574 100644 Binary files a/class/application/Controller.class and b/class/application/Controller.class differ diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml index 03681dfcc0769858ea129bf7ec76c0b6f2952a09..56a58bd158ee2d27f6e2e83157fc273cef44d7c9 100644 --- a/class/application/MainGUI.fxml +++ b/class/application/MainGUI.fxml @@ -78,6 +78,7 @@ <menus> <Menu fx:id="menu1" mnemonicParsing="false" text="Menü"> <items> + <MenuItem fx:id="menuItemNewGame" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" /> <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" /> <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#buttonAchievements" text="Achievements" /> <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" /> diff --git a/class/logic/Game.class b/class/logic/Game.class index 8991b1a428eac2e6200d00d72e65dd6ad26dc7cd..5a0566118e9f6e4e7d8e84f1a82f03597e1ff95c 100644 Binary files a/class/logic/Game.class and b/class/logic/Game.class differ diff --git a/src/application/Controller.java b/src/application/Controller.java index faf3da315d610e2b8b542d6599a0c51258bc26ec..52c0a8a288768ce6e427f427b5ecc0ff6e69a89c 100644 --- a/src/application/Controller.java +++ b/src/application/Controller.java @@ -70,6 +70,7 @@ public class Controller @FXML private MenuItem menuItem1; @FXML private MenuItem menuItem2; @FXML private MenuItem menuItem3; + @FXML private MenuItem menuItemNewGame; @FXML private ImageView imageViewLogo; @FXML private Label labelLogo; @FXML private Button buttonNewGame; @@ -179,12 +180,18 @@ public class Controller public void startGame() { + if(game != null) + { + game.stop(); + } + clearAll(); menuItem2.setDisable(true); drawCounter = 0; playerHasDrawn = false; labelCurrentPlayer.setVisible(true); + labelCurrentPlayer.setText(""); iconDeck.setImage(createEmptyBackCard()); iconDeck.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() @@ -605,58 +612,61 @@ public class Controller public void moveCardFromDeckToPlayer(ArrayList<Card> cards) { - Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); - - ImageView view = createCard(cards.get(drawCounter), true); - view.setId("drawAnimation"); - view.setX(deckPosition.getX()); - view.setY(deckPosition.getY()); - mainPane.getChildren().add(view); - - TranslateTransition translateTransition = new TranslateTransition(); - translateTransition.setDuration(Duration.millis(500)); - translateTransition.setNode(view); - translateTransition.setCycleCount(1); - translateTransition.setAutoReverse(false); - translateTransition.setFromX(0); - translateTransition.setFromY(0); - translateTransition.setToX( - (view.getX() - getPositionOfRightCard(null))); - translateTransition.setToY( - (view.getY() - PLAYER_STARTING_POINT.getY())); - translateTransition.setOnFinished(new EventHandler<ActionEvent>() - { - @Override - public void handle(ActionEvent event) + if(game.isRunning()) + { + Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); + + ImageView view = createCard(cards.get(drawCounter), true); + view.setId("drawAnimation"); + view.setX(deckPosition.getX()); + view.setY(deckPosition.getY()); + mainPane.getChildren().add(view); + + TranslateTransition translateTransition = new TranslateTransition(); + translateTransition.setDuration(Duration.millis(500)); + translateTransition.setNode(view); + translateTransition.setCycleCount(1); + translateTransition.setAutoReverse(false); + translateTransition.setFromX(0); + translateTransition.setFromY(0); + translateTransition.setToX( - (view.getX() - getPositionOfRightCard(null))); + translateTransition.setToY( - (view.getY() - PLAYER_STARTING_POINT.getY())); + translateTransition.setOnFinished(new EventHandler<ActionEvent>() { - ObservableList<Node> nodes = mainPane.getChildren(); - Iterator<Node> iterator = nodes.iterator(); - while(iterator.hasNext()) + @Override + public void handle(ActionEvent event) { - if(iterator.next().getId().equals("drawAnimation")) + ObservableList<Node> nodes = mainPane.getChildren(); + Iterator<Node> iterator = nodes.iterator(); + while(iterator.hasNext()) { - iterator.remove(); + if(iterator.next().getId().equals("drawAnimation")) + { + iterator.remove(); + } } + + game.getPlayer().drawCard(cards.get(drawCounter)); + setPlayerDeck(game.getPlayer().getDeck()); + drawCounter++; + playerHasDrawn = false; + + if(drawCounter < cards.size()) + { + moveCardFromDeckToPlayer(cards); + } + else + { + game.setShowingInfo(false); + hideInfo(); + drawCounter = 0; + game.draw(); + } } - - game.getPlayer().drawCard(cards.get(drawCounter)); - setPlayerDeck(game.getPlayer().getDeck()); - drawCounter++; - playerHasDrawn = false; - - if(drawCounter < cards.size()) - { - moveCardFromDeckToPlayer(cards); - } - else - { - game.setShowingInfo(false); - hideInfo(); - drawCounter = 0; - game.draw(); - } - } - }); - - translateTransition.play(); + }); + + translateTransition.play(); + } } private double getPositionOfRightCard(AI ai) @@ -750,72 +760,75 @@ public class Controller @SuppressWarnings("unused") public void moveCardFromDeckToAI(AI ai, ArrayList<Card> cards) { - Card card = game.getDeck().drawCard(game.getDeadDeck()); - - Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); - - ImageView view = createBackCard(); - view.setId("drawAnimation"); - view.setX(deckPosition.getX()); - view.setY(deckPosition.getY()); - mainPane.getChildren().add(view); - - TranslateTransition translateTransition = new TranslateTransition(); - translateTransition.setDuration(Duration.millis(500)); - translateTransition.setNode(view); - translateTransition.setCycleCount(1); - translateTransition.setAutoReverse(false); - translateTransition.setFromX(0); - translateTransition.setFromY(0); + if(game.isRunning()) + { + Card card = game.getDeck().drawCard(game.getDeadDeck()); + + Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); + + ImageView view = createBackCard(); + view.setId("drawAnimation"); + view.setX(deckPosition.getX()); + view.setY(deckPosition.getY()); + mainPane.getChildren().add(view); + + TranslateTransition translateTransition = new TranslateTransition(); + translateTransition.setDuration(Duration.millis(500)); + translateTransition.setNode(view); + translateTransition.setCycleCount(1); + translateTransition.setAutoReverse(false); + translateTransition.setFromX(0); + translateTransition.setFromY(0); + + switch(ai.getID()) + { + case 1: translateTransition.setToX( - (view.getX() - getPositionOfRightCard(ai))); + translateTransition.setToY( - (view.getY() - AI_1_STARTING_POINT.getY())); + break; + case 2: translateTransition.setToX( - (view.getX() - AI_2_STARTING_POINT.getX())); + translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); + break; + case 3: translateTransition.setToX( - (view.getX() - AI_3_STARTING_POINT.getX())); + translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); + break; + default: break; + } - switch(ai.getID()) - { - case 1: translateTransition.setToX( - (view.getX() - getPositionOfRightCard(ai))); - translateTransition.setToY( - (view.getY() - AI_1_STARTING_POINT.getY())); - break; - case 2: translateTransition.setToX( - (view.getX() - AI_2_STARTING_POINT.getX())); - translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); - break; - case 3: translateTransition.setToX( - (view.getX() - AI_3_STARTING_POINT.getX())); - translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); - break; - default: break; - } - - translateTransition.setOnFinished(new EventHandler<ActionEvent>() - { - @Override - public void handle(ActionEvent event) + translateTransition.setOnFinished(new EventHandler<ActionEvent>() { - ObservableList<Node> nodes = mainPane.getChildren(); - Iterator<Node> iterator = nodes.iterator(); - while(iterator.hasNext()) + @Override + public void handle(ActionEvent event) { - if(iterator.next().getId().equals("drawAnimation")) + ObservableList<Node> nodes = mainPane.getChildren(); + Iterator<Node> iterator = nodes.iterator(); + while(iterator.hasNext()) { - iterator.remove(); + if(iterator.next().getId().equals("drawAnimation")) + { + iterator.remove(); + } } + + ai.drawCard(cards.get(drawCounter)); + setAIDeck(ai); + drawCounter++; + + if(drawCounter < cards.size()) + { + moveCardFromDeckToAI(ai, cards); + } + else + { + game.setShowingInfo(false); + hideInfo(); + drawCounter = 0; + game.draw(); + } } - - ai.drawCard(cards.get(drawCounter)); - setAIDeck(ai); - drawCounter++; - - if(drawCounter < cards.size()) - { - moveCardFromDeckToAI(ai, cards); - } - else - { - game.setShowingInfo(false); - hideInfo(); - drawCounter = 0; - game.draw(); - } - } - }); - - translateTransition.play(); + }); + + translateTransition.play(); + } } public void clearPlayerDeck() diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml index 03681dfcc0769858ea129bf7ec76c0b6f2952a09..56a58bd158ee2d27f6e2e83157fc273cef44d7c9 100644 --- a/src/application/MainGUI.fxml +++ b/src/application/MainGUI.fxml @@ -78,6 +78,7 @@ <menus> <Menu fx:id="menu1" mnemonicParsing="false" text="Menü"> <items> + <MenuItem fx:id="menuItemNewGame" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" /> <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" /> <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#buttonAchievements" text="Achievements" /> <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" /> diff --git a/src/logic/Game.java b/src/logic/Game.java index 54363f2fd8826aea5477dbdab932f0b92996e207..3eb5cdab5cac0dfce185438b25b7e86830643475 100644 --- a/src/logic/Game.java +++ b/src/logic/Game.java @@ -126,101 +126,102 @@ public class Game run(); } - private String run() + private void run() { - if(player.getDeckSize() == 0) - { - end(player.getName()); - return null; - } - - for(AI winningAI : ais) - { - if(winningAI.getDeckSize() == 0) - { - end(winningAI.getName()); - return null; - } - } - - System.out.println("ROUND: " + counter / 4 + 1); - - if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw) + if(running) { - if(direction.equals(Direction.RIGHT)) - { - direction = Direction.LEFT; - controller.setImageViewDirection(Direction.LEFT); - - } - else - { - direction = Direction.RIGHT; - controller.setImageViewDirection(Direction.RIGHT); - } - } - - determineNextPlayer(); - - System.out.println("Player " + currentPlayer + "'s turn"); - - if(skipped || !lastCard.getType().equals(CardType.SKIP)) - { - if(currentPlayer == 1) - { - controller.setLabelCurrentPlayer(player.getName() + " ist am Zug"); - - controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge)); - - player.turn(lastCard, wishColor, challenge); - } - else - { + if(player.getDeckSize() == 0) + { + end(player.getName()); + return; + } - AI currentAI = ais.get(currentPlayer - 2); - - controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug"); - - controller.setAIDeck(currentAI); - - try + for(AI winningAI : ais) { - switch(aiSpeed) + if(winningAI.getDeckSize() == 0) { - case 1: Thread.sleep(500); - break; - case 2: Thread.sleep(250); - break; - case 3: Thread.sleep(50); - break; - case 4: Thread.sleep(0); - break; - default: break; - } + end(winningAI.getName()); + return; + } + } + + System.out.println("ROUND: " + counter / 4 + 1); + + if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw) + { + if(direction.equals(Direction.RIGHT)) + { + direction = Direction.LEFT; + controller.setImageViewDirection(Direction.LEFT); + } - catch(InterruptedException e) + else { - //ERRORHANDLING - e.printStackTrace(); + direction = Direction.RIGHT; + controller.setImageViewDirection(Direction.RIGHT); + } + } + + determineNextPlayer(); + + System.out.println("Player " + currentPlayer + "'s turn"); + + if(skipped || !lastCard.getType().equals(CardType.SKIP)) + { + if(currentPlayer == 1) + { + controller.setLabelCurrentPlayer(player.getName() + " ist am Zug"); + + controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge)); + + player.turn(lastCard, wishColor, challenge); } + else + { - currentAI.turn(lastCard, wishColor, challenge); + AI currentAI = ais.get(currentPlayer - 2); + + controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug"); + + controller.setAIDeck(currentAI); + + try + { + switch(aiSpeed) + { + case 1: Thread.sleep(500); + break; + case 2: Thread.sleep(250); + break; + case 3: Thread.sleep(50); + break; + case 4: Thread.sleep(0); + break; + default: break; + } + } + catch(InterruptedException e) + { + //ERRORHANDLING + e.printStackTrace(); + } + + currentAI.turn(lastCard, wishColor, challenge); + } } + else + { + if(!skipped) + { + System.out.println("SKIPPED player " + currentPlayer); + skipped = true; + run(); + } + } + counter++; } - else - { - if(!skipped) - { - System.out.println("SKIPPED player " + currentPlayer); - skipped = true; - run(); - } - } - counter++; - - return null; } - + private void determineNextPlayer() { if(direction.equals(Direction.RIGHT)) @@ -244,7 +245,7 @@ public class Game { currentPlayer--; } - } + } } private void end(String name) @@ -413,4 +414,9 @@ public class Game run(); } + + public void stop() + { + running = false; + } } \ No newline at end of file