diff --git a/Happy_Bird/src/main/java/com/example/happy_bird/HappyBirdMain.java b/Happy_Bird/src/main/java/com/example/happy_bird/HappyBirdMain.java index 33d9d17..46d7273 100644 --- a/Happy_Bird/src/main/java/com/example/happy_bird/HappyBirdMain.java +++ b/Happy_Bird/src/main/java/com/example/happy_bird/HappyBirdMain.java @@ -1,58 +1,79 @@ package com.example.happy_bird; import javafx.application.Application; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; -import javafx.fxml.FXMLLoader; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.control.TextField; import javafx.scene.control.Slider; -import javafx.scene.image.*; +import javafx.scene.control.TextField; import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; import javafx.scene.layout.*; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; -import java.awt.*; -import java.io.IOException; - public class HappyBirdMain extends Application { - private Pane pane = new Pane(); - private Scene scene = new Scene(pane, 800, 700); + /*Panes erstellen und zuweisen*/ + private final Pane pane = new Pane(); + private final Pane pause = new Pane(); - private Label nameLabel = new Label("NAME"); - private Label acronymLabel = new Label("KÜRZEL"); - private Label headline = new Label("HAPPY BIRD"); - private Label soundLabel = new Label("SOUND"); - private Label currentScoreLabel = new Label("SCORE"); - private Label highscoreLabel = new Label("HIGHSCORE"); - private Label labels[] = {nameLabel, acronymLabel, soundLabel, currentScoreLabel, highscoreLabel}; - private Label headlineLabels[] = {headline}; + /*Scene erstellen und zuweisen*/ + private final Scene scene = new Scene(pane, 800, 700); - private Button startButton = new Button("START"); - private Button highscoresButton = new Button("HIGHSCORES"); - private Button settingsButton = new Button("EINSTELLUNGEN"); - private Button startGameButton = new Button("SPIEL STARTEN"); - private Button menuButton = new Button("ZURÜCK"); + /*Labels erstellen und zuweisen*/ + private final Label nameLabel = new Label("NAME"); + private final Label acronymLabel = new Label("KÜRZEL"); + private final Label headline = new Label("HAPPY BIRD"); + private final Label soundLabel = new Label("SOUND"); + private final Label currentScoreLabel = new Label("SCORE"); + private final Label highscoreLabel = new Label("HIGHSCORE"); + private final Label pauseMenuLabel = new Label("PAUSE"); + private final Label soundLabelPause = new Label("SOUND"); - private Button[] buttons = {startButton, highscoresButton, settingsButton, startGameButton, menuButton}; + /*Labels in Arrays speichern*/ + private final Label[] labels = {nameLabel, acronymLabel, soundLabel, currentScoreLabel, highscoreLabel}; + private final Label[] headlineLabels = {headline}; - private TextField name = new TextField(); - private TextField acronym = new TextField(); + /*Buttons erstellen und zuweisen*/ + private final Button startButton = new Button("START"); + private final Button highscoresButton = new Button("HIGHSCORES"); + private final Button settingsButton = new Button("EINSTELLUNGEN"); + private final Button startGameButton = new Button("SPIEL STARTEN"); + private final Button menuButton = new Button("ZURÜCK"); + private final Button pauseButton = new Button("PAUSE"); + private final Button continueButton = new Button("WEITERSPIELEN"); + private final Button settingsButtonPause = new Button("EINSTELLUNGEN"); + private final Button menuButtonPause = new Button("HAUPTMENÜ"); + private final Button backButtonPause = new Button("ZURÜCK"); - private TextField inputFields[] = {name, acronym}; + /*Buttons in Arrays speichern*/ + private final Button[] buttons = {startButton, highscoresButton, settingsButton, startGameButton, menuButton, pauseButton, continueButton, settingsButtonPause, menuButtonPause, backButtonPause}; + private final Button[] pauseButtons = {continueButton, settingsButtonPause, menuButtonPause, backButtonPause}; - private Slider soundSlider = new Slider(); + /*Textfelder erstellen und zuweisen*/ + private final TextField name = new TextField(); + private final TextField acronym = new TextField(); - private Image bird = new Image("file:src/main/resources/com/example/happy_bird/pics/bird.png", 50, 35, false, false); + /*Textfelder in Arrays speichern*/ + private final TextField[] inputFields = {name, acronym}; - private Image upperPipe = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeOben.png", 86, 300, false, false); - private Image lowerPipe = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeUnten.png", 86, 300, false, false); + /*Slider erstellen und zuweisen*/ + private final Slider soundSlider = new Slider(); + private final Slider soundSliderPause = new Slider(); + + /*Bilder*/ + private final Image bird = new Image("file:src/main/resources/com/example/happy_bird/pics/bird.png", 50, 35, false, false); + + private final Image upperPipe = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeOben.png", 86, 300, false, false); + private final Image lowerPipe = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeUnten.png", 86, 300, false, false); + + /*Variablen für den Spielverlauf*/ + //menuScreenRunning: das Hauptmenü ist aufgerufen + private boolean menuScreenRunning; + //gameRunning: das Spiel läuft/ GameScreen ist aufgerufen + private boolean gameRunning; @@ -61,15 +82,38 @@ public class HappyBirdMain extends Application { } @Override - public void start(Stage stage) throws IOException { + public void start(Stage stage) { stage.setTitle("Happy Bird"); stage.setScene(scene); - /**Bild für Hintergrund erstellen:*/ + generateMenueScene(); + + /*ClickEvents:*/ + startButton.setOnAction(event -> startButtonClick()); + + settingsButton.setOnAction(event -> settingsButtonClick()); + + highscoresButton.setOnAction(event -> highscoresButtonClick()); + + menuButton.setOnAction(event -> menuButtonClick()); + + startGameButton.setOnAction(event -> { + gameRunning = true; + startGameButtonClick(); + }); + + stage.show(); + } + + + public void generateMenueScene() { + menuScreenRunning = true; + + /*Bild für Hintergrund erstellen:*/ Image image = new Image("file:src/main/resources/com/example/happy_bird/pics/Background.png"); - /**Hintergrund erstellen:*/ + /*Hintergrund erstellen:*/ BackgroundImage backgroundImage = new BackgroundImage( image, BackgroundRepeat.NO_REPEAT, @@ -78,30 +122,18 @@ public class HappyBirdMain extends Application { BackgroundSize.DEFAULT ); - /**Hintergrund zu Pane hinzufügen:*/ + /*Hintergrund zu Pane hinzufügen:*/ Background background = new Background(backgroundImage); pane.setBackground(background); - - - /**Labels erstellen:*/ - - - /**Labels in Arrays speichern:*/ - - - /**Labels formatieren:*/ + /*Labels formatieren:*/ labelsFormating(labels, pane); headlineFormating(headlineLabels, pane); -<<<<<<< HEAD - /**alle labels an ihre Stelle:*/ -======= /*Überschrift umbenennen, falls aus anderem Screen*/ headline.setText("HAPPY BIRD"); /*alle labels an ihre Stelle:*/ ->>>>>>> edf4ca25952f2176808ce31dafa9d52f1c7c0cd6 int yPositionLabels = 225; for (Label label : labels) { label.setLayoutX(275); @@ -109,52 +141,44 @@ public class HappyBirdMain extends Application { yPositionLabels += 150; } - /**headline an ihre Stelle:*/ + /*headline an ihre Stelle:*/ headline.setLayoutX(250); headline.setLayoutY(100); + headline.setVisible(true); - /**soundLabel an seine Stelle:*/ + /*soundLabel an seine Stelle:*/ soundLabel.setLayoutY(225); - - - /**Buttons erstellen:*/ - - - /**Buttons in Array speichern:*/ - - - /**Buttons formatieren:*/ + /*Buttons formatieren:*/ buttonsFormating(buttons, pane); - /**alle Buttons an ihre Stelle:*/ + /*alle Buttons an ihre Stelle:*/ int yPositionButtons = 225; for (Button button : buttons) { button.setLayoutX(300); button.setLayoutY(yPositionButtons); yPositionButtons += 100; + button.setVisible(true); } - /**menuButton an seine Stelle und vorerst ausblenden:*/ + /*menuButton an seine Stelle und vorerst ausblenden:*/ menuButton.setLayoutX(575); menuButton.setLayoutY(625); menuButton.setVisible(false); - /**startGameButton unsichtbar*/ + /*startGameButton unsichtbar*/ startGameButton.setVisible(false); + /*continueButton unsichtbar*/ + continueButton.setVisible(false); + /*settingsButtonPause unsichtbar*/ + settingsButtonPause.setVisible(false); - /**Textfelder erstellen:*/ - - - /**Textfelder in Array speichern:*/ - - - /**Textfelder formatieren:*/ + /*Textfelder formatieren:*/ textfieldsFormating(inputFields, pane); - /**Textfelder an ihre Position:*/ + /*Textfelder an ihre Position:*/ int yPositionInputFields = 290; for (TextField feld : inputFields) { feld.setLayoutX(275); @@ -162,34 +186,71 @@ public class HappyBirdMain extends Application { yPositionInputFields += 150; } - - - /**SoundSlider erstellen:*/ - - - /**SoundSlicer anpassen:*/ + /*SoundSlicer anpassen:*/ soundSliderFormating(soundSlider, pane); + } + /** + * Generiert den GameScreen durch Ausblenden und + * Sichtbarmachen der richtigen Buttons, Labels, ... + */ + public void generateGameScreen() { + menuScreenRunning = false; + /*Headline-Label umbenennen*/ + nameLabel.setText("KÜRZEL: " + acronym.getText()); - /**ClickEvents:*/ - startButton.setOnAction(event -> { - startButtonClick(); - }); + /*Textfelder ausblenden*/ + for(TextField feld : inputFields) { + feld.setVisible(false); + } - settingsButton.setOnAction(event -> { - settingsButtonClick(); - }); + /*Labels ausblenden*/ + for (Label label : labels ) { + label.setVisible(false); + } + headline.setVisible(false); - highscoresButton.setOnAction(event -> { - highscoresButtonClick(); - }); + /*nameLabel positionieren und sichtbar machen*/ + nameLabel.setLayoutX(10); + nameLabel.setLayoutY(10); + nameLabel.setVisible(true); - menuButton.setOnAction(event -> { - menuButtonClick(); - }); + /*currentScoreLabel positionieren und sichtbar machen*/ + currentScoreLabel.setLayoutX(540); + currentScoreLabel.setLayoutY(10); + currentScoreLabel.setVisible(true); - stage.show(); + /*highscoreLabel positionieren und sichtbar machen*/ + highscoreLabel.setLayoutX(540); + highscoreLabel.setLayoutY(70); + highscoreLabel.setVisible(true); + + /*Pause-Button positionieren und sichtbar machen*/ + pauseButton.setLayoutX(575); + pauseButton.setLayoutY(625); + pauseButton.setVisible(true); + + /*übrige Buttons ausblenden*/ + startGameButton.setVisible(false); + menuButton.setVisible(false); + + /*Vogel hinzufügen, bisher nur als Bild*/ + ImageView birdView = new ImageView(bird); + pane.getChildren().add(birdView); + birdView.setLayoutY(325); + birdView.setLayoutX(50); + + /*Pipes oben, unten hinzufügen, bisher nur als Bild*/ + ImageView upperPipeView = new ImageView(upperPipe); + pane.getChildren().add(upperPipeView); + upperPipeView.setLayoutX(400); + upperPipeView.setLayoutY(0); + + ImageView lowerPipeView = new ImageView(lowerPipe); + pane.getChildren().add(lowerPipeView); + lowerPipeView.setLayoutX(400); + lowerPipeView.setLayoutY(430); } /*** @@ -295,31 +356,75 @@ public class HappyBirdMain extends Application { slider.setVisible(false); } + /*** + * Formatiert den PauseScreen + */ + public void pauseScreenFormating() { + /*pause-Pane formatieren*/ + pause.setPrefSize(400, 400); + pause.setLayoutX(200); + pause.setLayoutY(150); + pause.setStyle("-fx-background-color: #DED894; " + + "-fx-border-width: 5px;" + + "-fx-border-color: #543847;" + + "-fx-border-radius: 15px;" + + "-fx-background-radius: 20px;"); + + /*pauseMenuLabel formatieren*/ + pauseMenuLabel.setPrefSize(300,50); + pauseMenuLabel.setLayoutX(50); + pauseMenuLabel.setLayoutY(10); + pauseMenuLabel.setStyle("-fx-background-color: #DED894; " + + "-fx-text-fill: #000000; " + + "-fx-font-size: 35px; " + + "-fx-font-weight: bold;" + + "-fx-alignment: center;"); + + /*soundLabelPause formatieren*/ + soundLabelPause.setPrefSize(100, 50); + soundLabelPause.setLayoutX(150); + soundLabelPause.setLayoutY(100); + soundLabelPause.setStyle("-fx-background-color: #DED894; " + + "-fx-text-fill: #000000; " + + "-fx-font-size: 20px; " + + "-fx-font-weight: bold;" + + "-fx-alignment: center;"); + } + /*** * Hauptmenü wird ausgeblendet, Nameneingabe folgt */ public void startButtonClick() { + /*Überschrift umbenennen*/ headline.setText("START"); - startGameButton.setOnAction(event -> { - startGameButtonClick(); - }); + + /*alle Buttons ausblenden*/ for(Button button : buttons) { button.setVisible(false); } - startGameButton.setVisible(true); + /*gebrauchte Buttons einblenden, ggf. anpassen*/ menuButton.setVisible(true); + startGameButton.setVisible(true); startGameButton.setLayoutY(520); + + /*Textfelder einblenden*/ for(TextField feld : inputFields) { feld.setVisible(true); } + + /*Labels einblenden*/ for (Label label : labels ) { label.setVisible(true); } + + /*nicht verwendete Labels ausblenden*/ highscoreLabel.setVisible(false); currentScoreLabel.setVisible(false); soundLabel.setVisible(false); + /*Click-Events*/ + startGameButton.setOnAction(event -> startGameButtonClick()); } @@ -327,7 +432,10 @@ public class HappyBirdMain extends Application { * Hauptmenü wird ausgeblendet, Einstellungen folgen */ public void settingsButtonClick() { + /*Überschrift umbenennen*/ headline.setText("EINSTELLUNGEN"); + + /*nicht verwendete Buttons/ Labels ausblenden, gebrauchte einblenden*/ startButton.setVisible(false); highscoresButton.setVisible(false); settingsButton.setVisible(false); @@ -336,11 +444,56 @@ public class HappyBirdMain extends Application { soundLabel.setVisible(true); } + /*** + * Hauptmenü wird ausgeblendet, Einstellungen folgen + */ + public void settingsButtonPauseClick() { + /*Überschrift umbenennen*/ + pauseMenuLabel.setText("EINSTELLUNGEN"); + + /*alle Buttons ausblenden*/ + for(Button button : pauseButtons) { + button.setVisible(false); + } + + /*gebrauchte Buttons einblenden und anpassen*/ + backButtonPause.setVisible(true); + backButtonPause.setLayoutY(300); + + /*soundSliderPause anpassen und einblenden*/ + soundSliderPause.setPrefSize(200, 5); + soundSliderPause.setLayoutX(100); + soundSliderPause.setLayoutY(150); + soundSliderPause.setVisible(true); + + /*soundLabelPause einblenden*/ + soundLabelPause.setVisible(true); + + /*Click-Events*/ + backButtonPause.setOnAction(event -> { + /*Überschrift umbenennen*/ + pauseMenuLabel.setText("PAUSE"); + + /*alle Buttons einblenden*/ + for(Button button : pauseButtons) { + button.setVisible(true); + } + + /*nicht verwendete Buttons ausblenden*/ + backButtonPause.setVisible(false); + soundSliderPause.setVisible(false); + soundLabelPause.setVisible(false); + }); + } + /*** * Hauptmenü wird ausgeblendet, Highscores folgen */ public void highscoresButtonClick() { + /*Überschrift umbenennen*/ headline.setText("HIGHSCORES"); + + /*nicht verwendete Buttons ausblenden, verwendete einblenden*/ startButton.setVisible(false); highscoresButton.setVisible(false); settingsButton.setVisible(false); @@ -352,19 +505,28 @@ public class HappyBirdMain extends Application { * Erneutes Anzeigen des Hauptmenüs */ public void menuButtonClick() { + /*Überschrift umbenennen*/ headline.setText("HAPPY BIRD"); + + /*nicht verwendete Buttons ausblenden, verwendete einblenden*/ startButton.setVisible(true); highscoresButton.setVisible(true); settingsButton.setVisible(true); menuButton.setVisible(false); - soundSlider.setVisible(false); - soundLabel.setVisible(false); startGameButton.setVisible(false); + /*soundSlider ausblenden*/ + soundSlider.setVisible(false); + + /*soundLabel ausblenden*/ + //soundLabel.setVisible(false); + + /*Textfelder ausblenden*/ for(TextField feld : inputFields) { feld.setVisible(false); } + /*alle Labels ausblenden*/ for (Label label : labels ) { label.setVisible(false); } @@ -374,40 +536,116 @@ public class HappyBirdMain extends Application { * Startet Spiel nach Namenseingabe */ public void startGameButtonClick() { - nameLabel.setText("NAME: " + acronym.getText()); - for(TextField feld : inputFields) { - feld.setVisible(false); - } - for (Label label : labels ) - { - label.setVisible(false); - } - startGameButton.setVisible(false); - menuButton.setVisible(false); - headline.setVisible(false); - ImageView birdView = new ImageView(bird); - pane.getChildren().add(birdView); - birdView.setLayoutY(325); - birdView.setLayoutX(50); - nameLabel.setLayoutX(10); - nameLabel.setLayoutY(10); - nameLabel.setVisible(true); + generateGameScreen(); - ImageView upperPipeView = new ImageView(upperPipe); - pane.getChildren().add(upperPipeView); - upperPipeView.setLayoutX(400); - upperPipeView.setLayoutY(0); + /*Klick auf den Pause-Button, um das Pause-Menü aufzurufen*/ + pauseButton.setOnAction(event -> { + if(!menuScreenRunning) { + pauseButtonClick(gameRunning); + gameRunning = !gameRunning; + } + }); - ImageView lowerPipeView = new ImageView(lowerPipe); - pane.getChildren().add(lowerPipeView); - lowerPipeView.setLayoutX(400); - lowerPipeView.setLayoutY(430); - - currentScoreLabel.setLayoutX(540); - currentScoreLabel.setLayoutY(10); - currentScoreLabel.setVisible(true); - highscoreLabel.setLayoutX(540); - highscoreLabel.setLayoutY(70); - highscoreLabel.setVisible(true); + /*ESC-Tast drücken, um das Pause-Menü aufzurufen*/ + scene.setOnKeyPressed(e -> { + if(e.getCode() == KeyCode.ESCAPE && !menuScreenRunning) { + pauseButtonClick(gameRunning); + gameRunning = !gameRunning; + } + }); } -} + + /*** + * Zurück zum Spiel aus dem PauseScreen heraus + */ + public void continueButtonClick() { + /*pauseButton einblenden*/ + pauseButton.setVisible(true); + + /*PauseScreen ausblenden*/ + pause.setVisible(false); + + /*Vom PauseScreen entfernen*/ + pause.getChildren().clear(); + pane.getChildren().remove(pause); + + /*gameRunning auf false setzen, da sonst 2x Click auf Pause-Button bzw. ESC*/ + gameRunning = false; + } + + /*** + * alles vom pane entfernen, da als nächstes zum Hauptmenü + */ + private void menuButtonPauseClick() { + /*alles vom pauseScreen entfernen*/ + pause.getChildren().clear(); + + /*pause von pane entfernen*/ + pane.getChildren().clear(); + + /*gameRunning auf false, da zurück zum Hauptmenü*/ + gameRunning = false; + } + + /*** + * Ruft das Pause-Menü im Spiel auf oder blendet es wieder aus + */ + public void pauseButtonClick(Boolean gameRuns) { + pauseScreenFormating(); + + /*PauseScreen aufrufen, wenn das Spiel läuft, sonst wieder ausblenden*/ + if(!gameRuns) { + pauseButton.setVisible(false); + + /*PauseScreen einblenden*/ + pause.setVisible(true); + + /*Buttons anpassen, zum pauseScreen hinzufügen und einblenden*/ + int yPosition = 100; + for(Button button : pauseButtons) { + button.setLayoutX(100); + button.setLayoutY(yPosition); + yPosition += 100; + pause.getChildren().add(button); + button.setVisible(true); + } + + /*backButtonPause vorerst ausblenden und zu pause hinzufügen*/ + backButtonPause.setVisible(false); + pause.getChildren().add(pauseMenuLabel); + + /*soundSliderPause vorerst ausblenden und zu pause hinzufügen*/ + soundSliderPause.setVisible(false); + pause.getChildren().add(soundSliderPause); + + /*soundLabelPause vorerst ausblenden und zu pause hinzufügen*/ + soundLabelPause.setVisible(false); + pause.getChildren().add(soundLabelPause); + + /*pause zu pane hinzufügen*/ + pane.getChildren().add(pause); + + /*ClickEvents*/ + continueButton.setOnAction(event -> continueButtonClick()); + + menuButtonPause.setOnAction(event -> { + menuButtonPauseClick(); + generateMenueScene(); + }); + + settingsButtonPause.setOnAction(event -> settingsButtonPauseClick()); + } else { + /*pauseButton einblenden*/ + pauseButton.setVisible(true); + + /*PauseScreen ausblenden*/ + pause.setVisible(false); + + /*alles vom PauseScreen entfernen*/ + pause.getChildren().clear(); + + /*pause von pane entfernen*/ + pane.getChildren().remove(pause); + } + } +} \ No newline at end of file