Aktuelle Version

This commit is contained in:
Mats Pape 2022-01-10 12:24:02 +01:00
parent c6bf25bb6f
commit bdd1c68ab9

View File

@ -1,58 +1,79 @@
package com.example.happy_bird; package com.example.happy_bird;
import javafx.application.Application; 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.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Slider; import javafx.scene.control.Slider;
import javafx.scene.image.*; import javafx.scene.control.TextField;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import javafx.scene.text.TextAlignment; import javafx.scene.text.TextAlignment;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.awt.*;
import java.io.IOException;
public class HappyBirdMain extends Application { public class HappyBirdMain extends Application {
private Pane pane = new Pane(); /*Panes erstellen und zuweisen*/
private Scene scene = new Scene(pane, 800, 700); private final Pane pane = new Pane();
private final Pane pause = new Pane();
private Label nameLabel = new Label("NAME"); /*Scene erstellen und zuweisen*/
private Label acronymLabel = new Label("KÜRZEL"); private final Scene scene = new Scene(pane, 800, 700);
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};
private Button startButton = new Button("START"); /*Labels erstellen und zuweisen*/
private Button highscoresButton = new Button("HIGHSCORES"); private final Label nameLabel = new Label("NAME");
private Button settingsButton = new Button("EINSTELLUNGEN"); private final Label acronymLabel = new Label("KÜRZEL");
private Button startGameButton = new Button("SPIEL STARTEN"); private final Label headline = new Label("HAPPY BIRD");
private Button menuButton = new Button("ZURÜCK"); 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(); /*Buttons erstellen und zuweisen*/
private TextField acronym = new TextField(); 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); /*Slider erstellen und zuweisen*/
private Image lowerPipe = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeUnten.png", 86, 300, false, false); 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 @Override
public void start(Stage stage) throws IOException { public void start(Stage stage) {
stage.setTitle("Happy Bird"); stage.setTitle("Happy Bird");
stage.setScene(scene); 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"); Image image = new Image("file:src/main/resources/com/example/happy_bird/pics/Background.png");
/**Hintergrund erstellen:*/ /*Hintergrund erstellen:*/
BackgroundImage backgroundImage = new BackgroundImage( BackgroundImage backgroundImage = new BackgroundImage(
image, image,
BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
@ -78,30 +122,18 @@ public class HappyBirdMain extends Application {
BackgroundSize.DEFAULT BackgroundSize.DEFAULT
); );
/**Hintergrund zu Pane hinzufügen:*/ /*Hintergrund zu Pane hinzufügen:*/
Background background = new Background(backgroundImage); Background background = new Background(backgroundImage);
pane.setBackground(background); pane.setBackground(background);
/*Labels formatieren:*/
/**Labels erstellen:*/
/**Labels in Arrays speichern:*/
/**Labels formatieren:*/
labelsFormating(labels, pane); labelsFormating(labels, pane);
headlineFormating(headlineLabels, pane); headlineFormating(headlineLabels, pane);
<<<<<<< HEAD
/**alle labels an ihre Stelle:*/
=======
/*Überschrift umbenennen, falls aus anderem Screen*/ /*Überschrift umbenennen, falls aus anderem Screen*/
headline.setText("HAPPY BIRD"); headline.setText("HAPPY BIRD");
/*alle labels an ihre Stelle:*/ /*alle labels an ihre Stelle:*/
>>>>>>> edf4ca25952f2176808ce31dafa9d52f1c7c0cd6
int yPositionLabels = 225; int yPositionLabels = 225;
for (Label label : labels) { for (Label label : labels) {
label.setLayoutX(275); label.setLayoutX(275);
@ -109,52 +141,44 @@ public class HappyBirdMain extends Application {
yPositionLabels += 150; yPositionLabels += 150;
} }
/**headline an ihre Stelle:*/ /*headline an ihre Stelle:*/
headline.setLayoutX(250); headline.setLayoutX(250);
headline.setLayoutY(100); headline.setLayoutY(100);
headline.setVisible(true);
/**soundLabel an seine Stelle:*/ /*soundLabel an seine Stelle:*/
soundLabel.setLayoutY(225); soundLabel.setLayoutY(225);
/*Buttons formatieren:*/
/**Buttons erstellen:*/
/**Buttons in Array speichern:*/
/**Buttons formatieren:*/
buttonsFormating(buttons, pane); buttonsFormating(buttons, pane);
/**alle Buttons an ihre Stelle:*/ /*alle Buttons an ihre Stelle:*/
int yPositionButtons = 225; int yPositionButtons = 225;
for (Button button : buttons) { for (Button button : buttons) {
button.setLayoutX(300); button.setLayoutX(300);
button.setLayoutY(yPositionButtons); button.setLayoutY(yPositionButtons);
yPositionButtons += 100; yPositionButtons += 100;
button.setVisible(true);
} }
/**menuButton an seine Stelle und vorerst ausblenden:*/ /*menuButton an seine Stelle und vorerst ausblenden:*/
menuButton.setLayoutX(575); menuButton.setLayoutX(575);
menuButton.setLayoutY(625); menuButton.setLayoutY(625);
menuButton.setVisible(false); menuButton.setVisible(false);
/**startGameButton unsichtbar*/ /*startGameButton unsichtbar*/
startGameButton.setVisible(false); startGameButton.setVisible(false);
/*continueButton unsichtbar*/
continueButton.setVisible(false);
/*settingsButtonPause unsichtbar*/
settingsButtonPause.setVisible(false);
/**Textfelder erstellen:*/ /*Textfelder formatieren:*/
/**Textfelder in Array speichern:*/
/**Textfelder formatieren:*/
textfieldsFormating(inputFields, pane); textfieldsFormating(inputFields, pane);
/**Textfelder an ihre Position:*/ /*Textfelder an ihre Position:*/
int yPositionInputFields = 290; int yPositionInputFields = 290;
for (TextField feld : inputFields) { for (TextField feld : inputFields) {
feld.setLayoutX(275); feld.setLayoutX(275);
@ -162,34 +186,71 @@ public class HappyBirdMain extends Application {
yPositionInputFields += 150; yPositionInputFields += 150;
} }
/*SoundSlicer anpassen:*/
/**SoundSlider erstellen:*/
/**SoundSlicer anpassen:*/
soundSliderFormating(soundSlider, pane); 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:*/ /*Textfelder ausblenden*/
startButton.setOnAction(event -> { for(TextField feld : inputFields) {
startButtonClick(); feld.setVisible(false);
}); }
settingsButton.setOnAction(event -> { /*Labels ausblenden*/
settingsButtonClick(); for (Label label : labels ) {
}); label.setVisible(false);
}
headline.setVisible(false);
highscoresButton.setOnAction(event -> { /*nameLabel positionieren und sichtbar machen*/
highscoresButtonClick(); nameLabel.setLayoutX(10);
}); nameLabel.setLayoutY(10);
nameLabel.setVisible(true);
menuButton.setOnAction(event -> { /*currentScoreLabel positionieren und sichtbar machen*/
menuButtonClick(); 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); 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 * Hauptmenü wird ausgeblendet, Nameneingabe folgt
*/ */
public void startButtonClick() { public void startButtonClick() {
/*Überschrift umbenennen*/
headline.setText("START"); headline.setText("START");
startGameButton.setOnAction(event -> {
startGameButtonClick(); /*alle Buttons ausblenden*/
});
for(Button button : buttons) { for(Button button : buttons) {
button.setVisible(false); button.setVisible(false);
} }
startGameButton.setVisible(true); /*gebrauchte Buttons einblenden, ggf. anpassen*/
menuButton.setVisible(true); menuButton.setVisible(true);
startGameButton.setVisible(true);
startGameButton.setLayoutY(520); startGameButton.setLayoutY(520);
/*Textfelder einblenden*/
for(TextField feld : inputFields) { for(TextField feld : inputFields) {
feld.setVisible(true); feld.setVisible(true);
} }
/*Labels einblenden*/
for (Label label : labels ) { for (Label label : labels ) {
label.setVisible(true); label.setVisible(true);
} }
/*nicht verwendete Labels ausblenden*/
highscoreLabel.setVisible(false); highscoreLabel.setVisible(false);
currentScoreLabel.setVisible(false); currentScoreLabel.setVisible(false);
soundLabel.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 * Hauptmenü wird ausgeblendet, Einstellungen folgen
*/ */
public void settingsButtonClick() { public void settingsButtonClick() {
/*Überschrift umbenennen*/
headline.setText("EINSTELLUNGEN"); headline.setText("EINSTELLUNGEN");
/*nicht verwendete Buttons/ Labels ausblenden, gebrauchte einblenden*/
startButton.setVisible(false); startButton.setVisible(false);
highscoresButton.setVisible(false); highscoresButton.setVisible(false);
settingsButton.setVisible(false); settingsButton.setVisible(false);
@ -336,11 +444,56 @@ public class HappyBirdMain extends Application {
soundLabel.setVisible(true); 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 * Hauptmenü wird ausgeblendet, Highscores folgen
*/ */
public void highscoresButtonClick() { public void highscoresButtonClick() {
/*Überschrift umbenennen*/
headline.setText("HIGHSCORES"); headline.setText("HIGHSCORES");
/*nicht verwendete Buttons ausblenden, verwendete einblenden*/
startButton.setVisible(false); startButton.setVisible(false);
highscoresButton.setVisible(false); highscoresButton.setVisible(false);
settingsButton.setVisible(false); settingsButton.setVisible(false);
@ -352,19 +505,28 @@ public class HappyBirdMain extends Application {
* Erneutes Anzeigen des Hauptmenüs * Erneutes Anzeigen des Hauptmenüs
*/ */
public void menuButtonClick() { public void menuButtonClick() {
/*Überschrift umbenennen*/
headline.setText("HAPPY BIRD"); headline.setText("HAPPY BIRD");
/*nicht verwendete Buttons ausblenden, verwendete einblenden*/
startButton.setVisible(true); startButton.setVisible(true);
highscoresButton.setVisible(true); highscoresButton.setVisible(true);
settingsButton.setVisible(true); settingsButton.setVisible(true);
menuButton.setVisible(false); menuButton.setVisible(false);
soundSlider.setVisible(false);
soundLabel.setVisible(false);
startGameButton.setVisible(false); startGameButton.setVisible(false);
/*soundSlider ausblenden*/
soundSlider.setVisible(false);
/*soundLabel ausblenden*/
//soundLabel.setVisible(false);
/*Textfelder ausblenden*/
for(TextField feld : inputFields) { for(TextField feld : inputFields) {
feld.setVisible(false); feld.setVisible(false);
} }
/*alle Labels ausblenden*/
for (Label label : labels ) { for (Label label : labels ) {
label.setVisible(false); label.setVisible(false);
} }
@ -374,40 +536,116 @@ public class HappyBirdMain extends Application {
* Startet Spiel nach Namenseingabe * Startet Spiel nach Namenseingabe
*/ */
public void startGameButtonClick() { public void startGameButtonClick() {
nameLabel.setText("NAME: " + acronym.getText()); generateGameScreen();
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);
ImageView upperPipeView = new ImageView(upperPipe); /*Klick auf den Pause-Button, um das Pause-Menü aufzurufen*/
pane.getChildren().add(upperPipeView); pauseButton.setOnAction(event -> {
upperPipeView.setLayoutX(400); if(!menuScreenRunning) {
upperPipeView.setLayoutY(0); pauseButtonClick(gameRunning);
gameRunning = !gameRunning;
}
});
ImageView lowerPipeView = new ImageView(lowerPipe); /*ESC-Tast drücken, um das Pause-Menü aufzurufen*/
pane.getChildren().add(lowerPipeView); scene.setOnKeyPressed(e -> {
lowerPipeView.setLayoutX(400); if(e.getCode() == KeyCode.ESCAPE && !menuScreenRunning) {
lowerPipeView.setLayoutY(430); pauseButtonClick(gameRunning);
gameRunning = !gameRunning;
}
});
}
currentScoreLabel.setLayoutX(540); /***
currentScoreLabel.setLayoutY(10); * Zurück zum Spiel aus dem PauseScreen heraus
currentScoreLabel.setVisible(true); */
highscoreLabel.setLayoutX(540); public void continueButtonClick() {
highscoreLabel.setLayoutY(70); /*pauseButton einblenden*/
highscoreLabel.setVisible(true); 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);
}
} }
} }