diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class index f285cfaad04c444835452f2b4fd554adb419b14c..8d76c2efc9ade0aefbee720d3d7a288e82109a3f 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 770c6bd7b41d397a1fe2139e3cea67f767dce807..f23206c0f1874cbb90c2b098526ab5724da5e690 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 e69c0cf350cd9b9657139a7163639d98b94612c7..c7ec3c1441a78120e55da1b9b0365376bf8f3f38 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 999d61509c117294c1f1c8168aed35ba49c67a9d..3f5dcc86d4bd47f4664901e98cfe9d12795ec3f3 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 7a730d62a3e4d03f10bba0fafb77f76c054381da..2c1427ca3ee321dcb9ba14da25637f24c640602d 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 ec87ab5584606e73ee3fc437c18f1fb8a6d0391b..d6822e7690c9a11b990721759e7517c6e1985df7 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 c67eaa2734c58f9732d1b4031da5cc9e36d61bd2..4b967274d7006d93eb6dd2090b381b98e88997ee 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 fda9f9734cf7d5026d164da40117b70622086f13..7c854109def74bd3216e501aab24ff3d26698064 100644 Binary files a/class/application/Controller$8.class and b/class/application/Controller$8.class differ diff --git a/class/application/Controller.class b/class/application/Controller.class index 1d08088c6bd0c22f96fc9657f82d0bb2080f3355..2bf6ce689767dff9b6de1d6889fc0accf73f5b8f 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 979f8741621f2615fdb45dc649d1ca023bc80112..8321e0c587824f815495bcd971eb0aebacfd8a95 100644 --- a/class/application/MainGUI.fxml +++ b/class/application/MainGUI.fxml @@ -6,6 +6,7 @@ <?import javafx.scene.control.Menu?> <?import javafx.scene.control.MenuBar?> <?import javafx.scene.control.MenuItem?> +<?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> @@ -77,12 +78,26 @@ <menus> <Menu fx:id="menu1" mnemonicParsing="false" text="Menü"> <items> - <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" /> <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" /> <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" /> </items> </Menu> </menus> </MenuBar> + <ImageView fx:id="imageViewLogo" fitHeight="160.0" fitWidth="175.0" layoutX="312.0" layoutY="189.0" pickOnBounds="true" preserveRatio="true"> + <image> + <Image url="@../images/icon.png" /> + </image> + </ImageView> + <Label fx:id="labelLogo" layoutX="274.0" layoutY="385.0" text="Welcome to UNO!"> + <font> + <Font name="System Bold" size="28.0" /> + </font> + </Label> + <Button fx:id="buttonNewGame" layoutX="344.0" layoutY="469.0" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> </children> </AnchorPane> diff --git a/class/logic/AI.class b/class/logic/AI.class index a3f028bb804f8d16c225286e94be4567d305afbc..f6705afda4d606403bdcf6cbe9f5e96e9b71fbbc 100644 Binary files a/class/logic/AI.class and b/class/logic/AI.class differ diff --git a/class/logic/Game.class b/class/logic/Game.class index 8e4517650abb53f2aa52706df849fba4e8862567..8301270ed69f692be18fa4a00d284ee9dc2dc451 100644 Binary files a/class/logic/Game.class and b/class/logic/Game.class differ diff --git a/class/logic/Player.class b/class/logic/Player.class index 64d765b10b80130190a1a0418170d1fa24fbc3e7..5f2532c232e602fabd6155b0732015f0e3129205 100644 Binary files a/class/logic/Player.class and b/class/logic/Player.class differ diff --git a/src/application/Controller.java b/src/application/Controller.java index 4d20216343a9c1d001c6dbf35eff156c68dd889b..e3d07a56c6550e9f73c40097a9855594878f4df7 100644 --- a/src/application/Controller.java +++ b/src/application/Controller.java @@ -63,10 +63,13 @@ public class Controller @FXML private Label labelAI3Name; @FXML private Button buttonStart; @FXML private MenuBar menuBar; - @FXML private Menu menu1; - @FXML private MenuItem menuItem1; + @FXML private Menu menu1; @FXML private MenuItem menuItem2; @FXML private MenuItem menuItem3; + @FXML private ImageView imageViewLogo; + @FXML private Label labelLogo; + @FXML private Button buttonNewGame; + public Game game; public Color chosenWishColor; @@ -104,6 +107,7 @@ public class Controller AI_3_STARTING_POINT = new Point2D(60.0, 70.0); clearAll(); + showNeutralUI(); settings = new Settings(); try @@ -123,13 +127,11 @@ public class Controller public void startGame() { + clearAll(); menuItem2.setDisable(true); - hideWishColor(); - hideInfo(); - hideLabelChallengeCounter(); - - drawCounter = 0; + drawCounter = 0; + labelCurrentPlayer.setVisible(true); iconDeck.setImage(createEmptyBackCard()); iconDeck.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() @@ -163,6 +165,20 @@ public class Controller buttonStart.setVisible(true); } + public void showNeutralUI() + { + imageViewLogo.setVisible(true); + labelLogo.setVisible(true); + buttonNewGame.setVisible(true); + } + + public void hideNeutralUI() + { + imageViewLogo.setVisible(false); + labelLogo.setVisible(false); + buttonNewGame.setVisible(false); + } + public void setLabelNames(Player player, ArrayList<AI> ais) { labelAI2Name.setVisible(false); @@ -184,8 +200,7 @@ public class Controller labelAI3Name.setText(ais.get(0).getName()); labelAI3Name.setVisible(true); } - } - + } public void showCircleWishColor(Color color) { @@ -613,7 +628,7 @@ public class Controller private double getPositionOfBottomCard(AI ai) { - double maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + double maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 40.0) * 2) - CARD_WIDTH; int deckSize = ai.getDeckSize(); if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxHeight) @@ -906,7 +921,7 @@ public class Controller current.setY(AI_1_STARTING_POINT.getY()); break; - case 2: maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + case 2: maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 40.0) * 2) - CARD_WIDTH; deckSize = ai.getDeckSize(); current.setRotate(-90.0); @@ -944,7 +959,7 @@ public class Controller current.setX(AI_2_STARTING_POINT.getX()); break; - case 3: maxHeight = stage.getScene().getHeight() - ((AI_3_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + case 3: maxHeight = stage.getScene().getHeight() - ((AI_3_STARTING_POINT.getY() + 40.0) * 2) - CARD_WIDTH; deckSize = ai.getDeckSize(); current.setRotate(90.0); @@ -1027,9 +1042,11 @@ public class Controller public void clearAll() { + hideNeutralUI(); menuItem2.setDisable(false); hideWishColor(); hideInfo(); + labelCurrentPlayer.setVisible(false); hideLabelChallengeCounter(); hideImageViewDirection(); labelAI1Name.setVisible(false); @@ -1037,7 +1054,7 @@ public class Controller labelAI3Name.setVisible(false); buttonStart.setVisible(false); iconDeck.setImage(null); - iconLastCard.setImage(null); + iconLastCard.setImage(null); } public void about() diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml index 979f8741621f2615fdb45dc649d1ca023bc80112..8321e0c587824f815495bcd971eb0aebacfd8a95 100644 --- a/src/application/MainGUI.fxml +++ b/src/application/MainGUI.fxml @@ -6,6 +6,7 @@ <?import javafx.scene.control.Menu?> <?import javafx.scene.control.MenuBar?> <?import javafx.scene.control.MenuItem?> +<?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> @@ -77,12 +78,26 @@ <menus> <Menu fx:id="menu1" mnemonicParsing="false" text="Menü"> <items> - <MenuItem fx:id="menuItem1" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel" /> <MenuItem fx:id="menuItem2" mnemonicParsing="false" onAction="#openSettings" text="Einstellungen" /> <MenuItem fx:id="menuItem3" mnemonicParsing="false" onAction="#about" text="Über" /> </items> </Menu> </menus> </MenuBar> + <ImageView fx:id="imageViewLogo" fitHeight="160.0" fitWidth="175.0" layoutX="312.0" layoutY="189.0" pickOnBounds="true" preserveRatio="true"> + <image> + <Image url="@../images/icon.png" /> + </image> + </ImageView> + <Label fx:id="labelLogo" layoutX="274.0" layoutY="385.0" text="Welcome to UNO!"> + <font> + <Font name="System Bold" size="28.0" /> + </font> + </Label> + <Button fx:id="buttonNewGame" layoutX="344.0" layoutY="469.0" mnemonicParsing="false" onAction="#startGame" text="Neues Spiel"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> </children> </AnchorPane> diff --git a/src/logic/AI.java b/src/logic/AI.java index 793f957b4405dcded8445a6a7650a16fdac619a5..82e7898c6c9b06c69e204763a84628b21d4ce43b 100644 --- a/src/logic/AI.java +++ b/src/logic/AI.java @@ -58,31 +58,45 @@ public class AI } public ArrayList<Card> getValidCards(Card lastCard, Color wishColor, boolean challenge) - { - ArrayList<Card> validCards = new ArrayList<Card>(); + { + ArrayList<Card> validCards = new ArrayList<Card>(); if(challenge) { for(Card currentCard : deck) - { - if(wishColor == null) + { + if(lastCard.getType().equals(CardType.DRAW_TWO)) { - if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + if(game.getController().settings.isAllowChallengePlusTwo()) { - validCards.add(currentCard); + if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } } } - else if(wishColor.equals(Color.ALL)) + else // lastCard == +4 { - if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + if(game.getController().settings.isAllowChallengePlusFourWithFour()) { - validCards.add(currentCard); + if(currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } } - } - else - { - if(currentCard.getColor().equals(wishColor) && currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + + if(game.getController().settings.isAllowChallengePlusFourWithTwo()) { - validCards.add(currentCard); + if(currentCard.getType().equals(CardType.DRAW_TWO)) + { + if(wishColor == Color.ALL) + { + validCards.add(currentCard); + } + else if(currentCard.getColor().equals(wishColor)) + { + validCards.add(currentCard); + } + } } } } @@ -90,24 +104,23 @@ public class AI else { if(wishColor == null) - { + { for(Card currentCard : deck) - { - if(currentCard.getColor().equals(lastCard.getColor()) || currentCard.getType().equals(lastCard.getType()) || currentCard.getType().equals(CardType.WILD) - || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + if(currentCard.getColor().equals(lastCard.getColor()) || currentCard.getType().equals(lastCard.getType()) || currentCard.getType().equals(CardType.WILD) || currentCard.getType().equals(CardType.DRAW_FOUR)) { validCards.add(currentCard); - } + } } } else if(wishColor.equals(Color.ALL)) { for(Card currentCard : deck) - { - if( ! currentCard.getType().equals(CardType.WILD) && ! currentCard.getType().equals(CardType.DRAW_FOUR)) + { + if(!currentCard.getType().equals(CardType.WILD) && !currentCard.getType().equals(CardType.DRAW_FOUR)) { validCards.add(currentCard); - } + } } } else @@ -117,14 +130,13 @@ public class AI if(currentCard.getColor().equals(wishColor)) { validCards.add(currentCard); - } + } } - } - } - + } + } + return validCards; } - public int getDeckSize() { return deck.size(); diff --git a/src/logic/Game.java b/src/logic/Game.java index 4cd3fc82b4e40e50cb172d6d5df384af58c386c5..461fed5a0aa93ac060853ca2516be4b8a9660ace 100644 --- a/src/logic/Game.java +++ b/src/logic/Game.java @@ -249,15 +249,13 @@ public class Game private void end(String name) { controller.clearAllDecks(ais); - controller.clearAll(); + controller.clearAll(); System.err.println("Player " + name + " wins!"); running = false; if(currentPlayer == 1) - { - controller.setLabelCurrentPlayer(player.getName() + " gewinnt!"); - + { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Sieg!"); alert.setHeaderText(""); @@ -266,11 +264,11 @@ public class Game Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); dialogStage.getIcons().add(controller.icon); alert.show(); + + controller.showNeutralUI(); } else - { - controller.setLabelCurrentPlayer(ais.get(currentPlayer - 2).getName() + " gewinnt!"); - + { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Niederlage!"); alert.setHeaderText(""); @@ -279,6 +277,8 @@ public class Game Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); dialogStage.getIcons().add(controller.icon); alert.show(); + + controller.showNeutralUI(); } } diff --git a/src/logic/Player.java b/src/logic/Player.java index df490f3d6f8abf22df3668b2a898a905d50d2b8a..e6af68f3b94baac9d20c514a775e8b3a0cbb2f1d 100644 --- a/src/logic/Player.java +++ b/src/logic/Player.java @@ -58,25 +58,39 @@ public class Player { for(Card currentCard : deck) { - if(wishColor == null) + if(lastCard.getType().equals(CardType.DRAW_TWO)) { - if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + if(game.getController().settings.isAllowChallengePlusTwo()) { - validCards.add(currentCard); + if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } } - } - else if(wishColor.equals(Color.ALL)) - { - if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) - { - validCards.add(currentCard); - } } - else + else // lastCard == +4 { - if(currentCard.getColor().equals(wishColor) && currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + if(game.getController().settings.isAllowChallengePlusFourWithFour()) { - validCards.add(currentCard); + if(currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } + } + + if(game.getController().settings.isAllowChallengePlusFourWithTwo()) + { + if(currentCard.getType().equals(CardType.DRAW_TWO)) + { + if(wishColor == Color.ALL) + { + validCards.add(currentCard); + } + else if(currentCard.getColor().equals(wishColor)) + { + validCards.add(currentCard); + } + } } } }