Compare commits
23 Commits
241bd0f85b
...
master
Author | SHA1 | Date | |
---|---|---|---|
d707be3e4c | |||
88b0ba5d05 | |||
4f2eeb5040 | |||
a60eb17230 | |||
0f2352e003 | |||
e21b4c0f2d | |||
d835ec3460 | |||
635aef047a | |||
f2f88c404d | |||
8f5a4e6a74 | |||
fcb650ffef | |||
79db8a088a | |||
b37993d9a2 | |||
1f0fedeaac | |||
43ba9226e2 | |||
3610c3fb7a | |||
98bcfec0fd | |||
af010b5bd8 | |||
b5daf848c4 | |||
46bf46f92c | |||
5894de5567 | |||
680a80d210 | |||
1cd92601e1 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
Happy_Bird/.idea/Happy_Bird.iml
generated
2
Happy_Bird/.idea/Happy_Bird.iml
generated
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4" />
|
5
Happy_Bird/.idea/compiler.xml
generated
5
Happy_Bird/.idea/compiler.xml
generated
@@ -3,4 +3,9 @@
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="15" />
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
|
||||
<module name="Happy_Bird.main" options="--add-exports java.base/jdk.internal.module=com.example.happy_bird" />
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
10
Happy_Bird/.idea/runConfigurations.xml
generated
10
Happy_Bird/.idea/runConfigurations.xml
generated
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 65 KiB |
Binary file not shown.
@@ -1,21 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.ImageObserver;
|
||||
|
||||
public class Bird extends SpielObjekt {
|
||||
|
||||
public Bird(int xWert, int yWert) {
|
||||
super(xWert, yWert);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, ImageObserver obs) {
|
||||
|
||||
}
|
||||
}
|
@@ -14,7 +14,7 @@ public class FormatingClass {
|
||||
*/
|
||||
public FormatingClass() { }
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert alle Buttons und fügt sie der Pane hinzu
|
||||
* @param buttons ButtonArray mit allen Arrays
|
||||
* @param pane Pane, auf der die Buttons angezeigt werden
|
||||
@@ -36,7 +36,7 @@ public class FormatingClass {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert alle kleinen Labels (keine Überschrift) und fügt sie der Pane hinzu
|
||||
* @param labels LabelArray mit allen Labels
|
||||
* @param pane Pane, auf der die Labels angezeigt werden
|
||||
@@ -61,7 +61,7 @@ public class FormatingClass {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert alle Überschriften-Labels und fügt sie der Pane hinzu
|
||||
* @param labels LabelArray mit Überschriften-Labels
|
||||
* @param pane Pane, auf der die Labels angezeigt werden
|
||||
@@ -85,7 +85,7 @@ public class FormatingClass {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert alle Textfelder und fügt sie der Pane hinzu
|
||||
* @param textfields TextFieldArray mit allen Textfeldern
|
||||
* @param pane Pane, auf der die Textfelder angezeigt werden
|
||||
@@ -102,7 +102,7 @@ public class FormatingClass {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert den soundSlider und fügt ihn der Pane hinzu
|
||||
* @param slider SoundSlider
|
||||
* @param pane Pane, auf der der Slider angezeigt wird
|
||||
@@ -117,7 +117,7 @@ public class FormatingClass {
|
||||
slider.setVisible(false);
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert den PauseScreen
|
||||
*/
|
||||
public void pauseScreenFormating(Pane pause, Label pauseMenuLabel, Label soundLabelPause) {
|
||||
@@ -152,15 +152,15 @@ public class FormatingClass {
|
||||
"-fx-alignment: center;");
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* formatiert den End-Screen
|
||||
*/
|
||||
public void endScreenFormating(Pane endScreen, Pane pause, Label endScreenHeadline, Label currentScoreEndscreenLabel) {
|
||||
public void endScreenFormating(Pane endScreen, Label endScreenHeadline, Label currentScoreEndscreenLabel) {
|
||||
/*Endscreen-Pane formatieren*/
|
||||
endScreen.setPrefSize(400, 500);
|
||||
pause.setLayoutX(200);
|
||||
pause.setLayoutY(100);
|
||||
pause.setStyle("-fx-background-color: #DED894; " +
|
||||
endScreen.setLayoutX(200);
|
||||
endScreen.setLayoutY(100);
|
||||
endScreen.setStyle("-fx-background-color: #DED894; " +
|
||||
"-fx-border-width: 5px;" +
|
||||
"-fx-border-color: #543847;" +
|
||||
"-fx-border-radius: 15px;" +
|
||||
@@ -175,8 +175,8 @@ public class FormatingClass {
|
||||
"-fx-font-weight: bold;" +
|
||||
"-fx-alignment: center;");
|
||||
|
||||
currentScoreEndscreenLabel.setPrefSize(250,50);
|
||||
currentScoreEndscreenLabel.setLayoutX(75);
|
||||
currentScoreEndscreenLabel.setPrefSize(300,50);
|
||||
currentScoreEndscreenLabel.setLayoutX(50);
|
||||
currentScoreEndscreenLabel.setLayoutY(100);
|
||||
currentScoreEndscreenLabel.setStyle("-fx-background-color: #DED894; " +
|
||||
"-fx-text-fill: #000000; " +
|
||||
@@ -185,7 +185,7 @@ public class FormatingClass {
|
||||
"-fx-alignment: center;");
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Erstellt ein neues BackgroundImage aus einer Source für ein .png
|
||||
* @param img Source eines .png
|
||||
* @return backgroundImage
|
||||
@@ -206,7 +206,7 @@ public class FormatingClass {
|
||||
return backgroundImage;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Formatiert die Buttons, mit denen man das Hintergrundbild ändern kann
|
||||
* @param backgroundButtons Array der Buttons
|
||||
* @param pane Pane, auf der die Buttons angezeigt werden sollen
|
||||
@@ -236,9 +236,4 @@ public class FormatingClass {
|
||||
pane.getChildren().add(backgroundButtons[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void menueScreenFormating(Label[] labels, Button[] buttons) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -1,54 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
|
||||
import javafx.scene.Node;
|
||||
|
||||
public abstract class GameObject extends Node {
|
||||
protected int xKoord;
|
||||
protected int yKoord;
|
||||
protected int width;
|
||||
protected int height;
|
||||
protected boolean isPassedOn = false;
|
||||
|
||||
/***
|
||||
* Konstruktor GameObject
|
||||
* Variablen werden zugewiesen
|
||||
* @param x x-Position
|
||||
* @param y y-Position
|
||||
* @param width Breite
|
||||
* @param height Höhe
|
||||
*/
|
||||
public GameObject(int x, int y, int width, int height) {
|
||||
this.xKoord = x;
|
||||
this.yKoord = y;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
|
||||
public abstract void setImage();
|
||||
|
||||
/***
|
||||
* Setzt ein Object auf eine neue Position
|
||||
* param newX neue x-Position
|
||||
*/
|
||||
public abstract void resetToNewPosition(int newX);
|
||||
|
||||
/*
|
||||
// Prüfung ob Rectangle true oder false ist
|
||||
public boolean intersect(Rectangle rectangle) {
|
||||
return rectangle.intersects(topPipe) || rectangle.intersects(bottomPipe);
|
||||
}
|
||||
|
||||
// Röhren Counter → Check, wenn Röhre durchflogen ist
|
||||
public boolean passedOn(Rectangle rectangle) {
|
||||
return rectangle.x > xKoord + width && !isPassedOn;
|
||||
}
|
||||
|
||||
// Bei Bewegung der X Koordinate werden Röhren generiert
|
||||
public void moveX(int dx) {
|
||||
xKoord -= dx;
|
||||
topPipe.x -= dx;
|
||||
bottomPipe.x -= dx;
|
||||
}*/
|
||||
}
|
@@ -1,26 +0,0 @@
|
||||
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.image.Image;
|
||||
import javafx.scene.layout.*;
|
||||
import javafx.scene.text.TextAlignment;
|
||||
import javafx.stage.Stage;
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
|
||||
public class GameScreen extends HappyBirdMain
|
||||
{
|
||||
|
||||
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.TextField;
|
||||
|
||||
public class HappyBird extends HappyBirdMain {
|
||||
|
||||
}
|
@@ -8,29 +8,31 @@ import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import javafx.scene.layout.*;
|
||||
import javafx.scene.paint.ImagePattern;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.scene.shape.*;
|
||||
import javafx.util.Duration;
|
||||
|
||||
//import java.awt.*;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLOutput;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class HappyBirdMain extends Application {
|
||||
|
||||
private float velocity = 0f;
|
||||
private float gravity = 0.25f;
|
||||
private int birdPositionMovedBy = 0;
|
||||
private int collectedPoints;
|
||||
private int playerhighscore;
|
||||
private boolean openEndScreen = false;
|
||||
private boolean endScreenOpened = false;
|
||||
|
||||
/* Formatierungsklasse */
|
||||
private final FormatingClass formatingClass = new FormatingClass();
|
||||
|
||||
/* Testen des Endscreens */
|
||||
private final Button endscreenTest = new Button("Endscreentest");
|
||||
|
||||
/* Datenbank einlesen */
|
||||
private final MariaDB datenbank = new MariaDB();
|
||||
|
||||
@@ -47,16 +49,19 @@ public class HappyBirdMain extends Application {
|
||||
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 currentScoreLabel = new Label("SCORE: " + collectedPoints);
|
||||
private final Label highscoreLabel = new Label("HIGHSCORE: ");
|
||||
private final Label pauseMenuLabel = new Label("PAUSE");
|
||||
private final Label soundLabelPause = new Label("SOUND");
|
||||
private final Label highscoreMenuLabel = new Label();
|
||||
private final Label currentScoreEndscreenLabel = new Label("YOUR SCORE: ");
|
||||
private final Label endScreenHeadline = new Label("GAME OVER");
|
||||
private final Label checkNameLabel = new Label("");
|
||||
private final Label checkAcronymLabel = new Label("");
|
||||
|
||||
/*Labels in Arrays speichern*/
|
||||
private final Label[] labels = {nameLabel, acronymLabel, soundLabel, currentScoreLabel, highscoreLabel, highscoreMenuLabel};
|
||||
private final Label[] labels = {nameLabel, acronymLabel, soundLabel, currentScoreLabel,
|
||||
highscoreLabel, highscoreMenuLabel, checkAcronymLabel, checkNameLabel};
|
||||
private final Label[] headlineLabels = {headline};
|
||||
|
||||
/*Buttons erstellen und zuweisen*/
|
||||
@@ -72,16 +77,19 @@ public class HappyBirdMain extends Application {
|
||||
private final Button backButtonPause = new Button("ZURÜCK");
|
||||
private final Button background1 = new Button();
|
||||
private final Button background2 = new Button();
|
||||
private final Button backMenuButton = new Button();
|
||||
private final Button restartGameButton = new Button();
|
||||
private final Button backMenuButton = new Button("HAUPTMENÜ");
|
||||
private final Button restartGameButton = new Button("NEU STARTEN");
|
||||
private final Button personalHighscoresButton = new Button ("YOUR SCORES");
|
||||
private final Button backEndscreenButton = new Button("ZURÜCK");
|
||||
|
||||
/*Buttons in Arrays speichern*/
|
||||
private final Button[] buttons = {startButton, highscoresButton, settingsButton, startGameButton, menuButton, pauseButton, continueButton, settingsButtonPause, menuButtonPause, backButtonPause, backMenuButton, restartGameButton, personalHighscoresButton, backEndscreenButton};
|
||||
private final Button[] buttons = {startButton, highscoresButton, settingsButton, startGameButton,
|
||||
menuButton, pauseButton, continueButton, settingsButtonPause, menuButtonPause,
|
||||
backButtonPause, backMenuButton, restartGameButton, personalHighscoresButton, backEndscreenButton};
|
||||
private final Button[] pauseButtons = {continueButton, settingsButtonPause, menuButtonPause, backButtonPause};
|
||||
private final Button[] backgroundButtons = {background1, background2};
|
||||
private final Button[] endscreenButtons = {backMenuButton, restartGameButton, personalHighscoresButton, backEndscreenButton};
|
||||
private final Button[] endscreenButtons = {backMenuButton, restartGameButton,
|
||||
personalHighscoresButton, backEndscreenButton};
|
||||
|
||||
/*Textfelder erstellen und zuweisen*/
|
||||
private final TextField name = new TextField();
|
||||
@@ -95,7 +103,7 @@ public class HappyBirdMain extends Application {
|
||||
private final Slider soundSliderPause = new Slider();
|
||||
|
||||
/*Bilder*/
|
||||
private final Image bird = new Image("file:src/main/resources/com/example/happy_bird/pics/bird.png", 45, 30, false, false);
|
||||
private final Image bird = new Image("file:src/main/resources/com/example/happy_bird/pics/bird.png");
|
||||
|
||||
private final Image pipeTop = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeTop.png");
|
||||
private final Image pipeBottom = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeBottom.png");
|
||||
@@ -106,18 +114,32 @@ public class HappyBirdMain extends Application {
|
||||
//gameRunning: das Spiel läuft/ GameScreen ist aufgerufen
|
||||
private boolean gameRunning;
|
||||
|
||||
|
||||
/*TranslateTransitions für obere und untere Pipes*/
|
||||
private TranslateTransition top;
|
||||
private TranslateTransition bottom;
|
||||
private TranslateTransition birdTransition;
|
||||
|
||||
/*ArrayList, in die alle Transitions gespeichert werden*/
|
||||
private final ArrayList<Transition> transitions = new ArrayList<Transition>();
|
||||
|
||||
/*Rechteck für den Bird*/
|
||||
private Rectangle happyBird;
|
||||
|
||||
/*ArrayList, in der alle Rechtecke/ Pipes gespeichert werden*/
|
||||
private final ArrayList<Rectangle> pipesArrayList = new ArrayList<Rectangle>();
|
||||
private final ArrayList<Rectangle> pipesToRemove = new ArrayList<Rectangle>();
|
||||
|
||||
/*Timeline, auf der sich die Pipes und der Vogel abspielen*/
|
||||
private Timeline timeline;
|
||||
private final ArrayList<Transition> transitions = new ArrayList<Transition>();;
|
||||
|
||||
/*AnimationTimer checkt im Spielverlauf, ob eine Pipe mit dem Bird kollidiert*/
|
||||
private AnimationTimer collisionChecker;
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
}
|
||||
|
||||
/** alle */
|
||||
@Override
|
||||
public void start(Stage stage) {
|
||||
stage.setTitle("Happy Bird");
|
||||
@@ -141,7 +163,28 @@ public class HappyBirdMain extends Application {
|
||||
stage.show();
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Erstellt den Bird als Rectangle mit einem Bild.
|
||||
* @return happyBird ein Rectangle
|
||||
*/
|
||||
public Rectangle createBird() {
|
||||
/* Startposition des Birds */
|
||||
int x = 50;
|
||||
int y = 325;
|
||||
|
||||
/* Erstellen eines Rechtecks mit der passenden Größe */
|
||||
Rectangle happyBird = new Rectangle(x,y,45,30);
|
||||
|
||||
/* Bild in das Rechteck setzen */
|
||||
happyBird.setFill(new ImagePattern(bird));
|
||||
|
||||
/* View-Order auf 1 setzen, damit der Bird über den anderen Elementen auf dem Spielscreen liegt */
|
||||
happyBird.setStyle("-fx-view-order: 1");
|
||||
|
||||
return happyBird;
|
||||
}
|
||||
|
||||
/*** Alteköster
|
||||
* Erstellt zwei Pipes als Rectangle und fügt ihnen eine Animation über eine Transition hinzu
|
||||
* @return pipes zwei Rectangles
|
||||
*/
|
||||
@@ -158,45 +201,39 @@ public class HappyBirdMain extends Application {
|
||||
* +400 +250, für Abstand zwischen oberer Pipe und unterer Pipe */
|
||||
Rectangle bottomPipe = new Rectangle(900, y + 400 + 250, 91, 500);
|
||||
|
||||
/* oberer Pipe ein Hintergrundbild geben */
|
||||
Image img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeTop.png");
|
||||
topPipe.setFill(new ImagePattern(pipeTop));
|
||||
topPipe.setStyle("-fx-view-order: 1");
|
||||
/* Pipes in PipesArrayList schreiben */
|
||||
pipesArrayList.add(topPipe);
|
||||
pipesArrayList.add(bottomPipe);
|
||||
|
||||
/* unterer Pipe ein Hintergrundbild geben */
|
||||
img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeBottom.png");
|
||||
/* Pipes einen Hintergrundbild geben */
|
||||
topPipe.setFill(new ImagePattern(pipeTop));
|
||||
bottomPipe.setFill(new ImagePattern(pipeBottom));
|
||||
|
||||
/* View-Order auf 1 setzen, damit die Pipe über den anderen Elementen auf dem Spielscreen liegt */
|
||||
topPipe.setStyle("-fx-view-order: 1");
|
||||
bottomPipe.setStyle("-fx-view-order: 1");
|
||||
|
||||
/* neue Animationen über TranslateTransitions */
|
||||
top = new TranslateTransition();
|
||||
bottom = new TranslateTransition();
|
||||
|
||||
/* top-Transition die obere Pipe hinzufügen */
|
||||
/* Pipes den Transitions hinzufügen */
|
||||
top.setNode(topPipe);
|
||||
|
||||
/* die Pipe braucht 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
||||
top.setDuration(Duration.seconds(7));
|
||||
|
||||
/* Pipe läuft 1100px nach links */
|
||||
top.setToX(-1100);
|
||||
|
||||
/* nach Erreichen des linken Randes, wird topPipe von Pane entfernt */
|
||||
top.setOnFinished(e -> {
|
||||
pane.getChildren().remove(topPipe);
|
||||
});
|
||||
|
||||
|
||||
/* top-Transition die untere Pipe hinzufügen */
|
||||
bottom.setNode(bottomPipe);
|
||||
|
||||
/* die Pipe braucht 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
||||
/* die Pipes brauchen 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
||||
top.setDuration(Duration.seconds(7));
|
||||
bottom.setDuration(Duration.seconds(7));
|
||||
|
||||
/* Pipe läuft 1100px nach links */
|
||||
top.setToX(-1100);
|
||||
bottom.setToX(-1100);
|
||||
|
||||
/* nach Erreichen des linken Randes, wird topPipe von Pane entfernt */
|
||||
|
||||
/* nach Erreichen des linken Randes, wird die Pipe von Pane entfernt */
|
||||
top.setOnFinished(e -> {
|
||||
pane.getChildren().remove(topPipe);
|
||||
});
|
||||
bottom.setOnFinished(e -> {
|
||||
pane.getChildren().remove(bottomPipe);
|
||||
});
|
||||
@@ -211,7 +248,10 @@ public class HappyBirdMain extends Application {
|
||||
return pipes;
|
||||
}
|
||||
|
||||
|
||||
/*** alle
|
||||
* Generiert den GameScreen durch Ausblenden und
|
||||
* Sichtbarmachen der richtigen Buttons, Labels, ...
|
||||
*/
|
||||
public void generateMenueScreen() {
|
||||
dataQuery();
|
||||
menuScreenRunning = true;
|
||||
@@ -298,13 +338,13 @@ public class HappyBirdMain extends Application {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
/*** alle
|
||||
* Generiert den GameScreen durch Ausblenden und
|
||||
* Sichtbarmachen der richtigen Buttons, Labels, ...
|
||||
*/
|
||||
public void generateGameScreen() {
|
||||
menuScreenRunning = false;
|
||||
int playerhighscore = getPlayerHighscore();
|
||||
playerhighscore = getPlayerHighscore();
|
||||
highscoreLabel.setText("HIGHSCORE: " + playerhighscore);
|
||||
/*Headline-Label umbenennen*/
|
||||
nameLabel.setText("KÜRZEL: " + acronym.getText());
|
||||
@@ -344,26 +384,9 @@ public class HappyBirdMain extends Application {
|
||||
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);*/
|
||||
|
||||
|
||||
/** Alteköster */
|
||||
/*Timeline: alle 2 Sekunden spawnt eine neue Pipe am rechten Rand*/
|
||||
timeline = new Timeline(new KeyFrame(Duration.seconds(2), e ->{
|
||||
timeline = new Timeline(new KeyFrame(Duration.seconds(1.5), e ->{
|
||||
/*Pipes erstellen*/
|
||||
Rectangle[] pipesTopBottom = createPipes();
|
||||
|
||||
@@ -371,18 +394,89 @@ public class HappyBirdMain extends Application {
|
||||
for(Rectangle pipe : pipesTopBottom) {
|
||||
pane.getChildren().add(pipe);
|
||||
}
|
||||
|
||||
/*Transitions abspielen*/
|
||||
top.play();
|
||||
bottom.play();
|
||||
}));
|
||||
|
||||
timeline.setCycleCount(Animation.INDEFINITE);
|
||||
happyBird = createBird();
|
||||
pane.getChildren().add(happyBird);
|
||||
|
||||
timeline.setCycleCount(Animation.INDEFINITE);
|
||||
timeline.play();
|
||||
|
||||
System.out.println("tl: "+timeline.getStatus());
|
||||
|
||||
/** Alteköster, Bickmann, Pape*/
|
||||
collisionChecker = new AnimationTimer() {
|
||||
@Override
|
||||
public void handle(long timestamp) {
|
||||
if (!openEndScreen) {
|
||||
for (Rectangle rectangle : pipesArrayList) {
|
||||
if (rectangle != null) {
|
||||
checkCollision(happyBird, rectangle);
|
||||
}
|
||||
}
|
||||
for (Rectangle rectangle : pipesToRemove) {
|
||||
pipesArrayList.remove(rectangle);
|
||||
}
|
||||
} else if (endScreenOpened == false) {
|
||||
writeIntoDatabase();
|
||||
generateEndScreen();
|
||||
endScreenOpened = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
collisionChecker.start();
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Bickmann, Alteköster
|
||||
* Überprüft, ob eine Pipe mit dem Bird kollidiert
|
||||
* @param happyBird Rechteck mit dem Bird
|
||||
* @param pipe Rechteck mit einer Pipe
|
||||
*/
|
||||
public void checkCollision(Rectangle happyBird, Rectangle pipe) {
|
||||
/* Überprüft, ob der Vogel mit der Decke oder dem Boden kollidiert */
|
||||
if (happyBird.getLayoutY() > 330 || happyBird.getLayoutY() < -330) {
|
||||
/*Pausieren der Transitions/ Pipes*/
|
||||
for(Transition transition : transitions) {
|
||||
transition.pause();
|
||||
}
|
||||
|
||||
/*Pausieren der Timeline, sodass keine neuen Pipes spawnen*/
|
||||
timeline.stop();
|
||||
gameRunning = false;
|
||||
openEndScreen = true;
|
||||
}
|
||||
/* Überprüft, ob eine der Grenzen des Rechtecks des Birds mit einer übergebenen Pipe kollidiert
|
||||
* wenn ja, hält das Spiel an bzw. wird beendet */
|
||||
if(happyBird.getBoundsInParent().intersects(pipe.getBoundsInParent())) {
|
||||
|
||||
/*Pausieren der Transitions/ Pipes*/
|
||||
for(Transition transition : transitions) {
|
||||
transition.pause();
|
||||
}
|
||||
|
||||
/*Pausieren der Timeline, sodass keine neuen Pipes spawnen*/
|
||||
timeline.stop();
|
||||
gameRunning = false;
|
||||
openEndScreen = true;
|
||||
}
|
||||
if(happyBird.getBoundsInParent().getMaxX() > pipe.getBoundsInParent().getMaxX()) {
|
||||
collectedPoints++;
|
||||
int pointsToSet = collectedPoints / 2;
|
||||
currentScoreLabel.setText("SCORE: " + pointsToSet);
|
||||
if (pointsToSet > playerhighscore) {
|
||||
highscoreLabel.setText("HIGHSCORE: " + pointsToSet);
|
||||
}
|
||||
pipesToRemove.add(pipe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*** alle
|
||||
* Hauptmenü wird ausgeblendet, Nameneingabe folgt
|
||||
*/
|
||||
public void startButtonClick() {
|
||||
@@ -393,6 +487,13 @@ public class HappyBirdMain extends Application {
|
||||
for(Button button : buttons) {
|
||||
button.setVisible(false);
|
||||
}
|
||||
/*Label für Namenskonventionen*/
|
||||
checkNameLabel.setLayoutX(15);
|
||||
checkNameLabel.setLayoutY(290);
|
||||
|
||||
/*Label für Kürzelkonventionen*/
|
||||
checkAcronymLabel.setLayoutX(15);
|
||||
checkAcronymLabel.setLayoutY(440);
|
||||
|
||||
/*gebrauchte Buttons einblenden, ggf. anpassen*/
|
||||
menuButton.setVisible(true);
|
||||
@@ -408,18 +509,21 @@ public class HappyBirdMain extends Application {
|
||||
for (Label label : labels ) {
|
||||
label.setVisible(true);
|
||||
}
|
||||
|
||||
System.out.println(name.getLayoutY());
|
||||
System.out.println(acronym.getLayoutY());
|
||||
/*nicht verwendete Labels ausblenden*/
|
||||
highscoreLabel.setVisible(false);
|
||||
currentScoreLabel.setVisible(false);
|
||||
soundLabel.setVisible(false);
|
||||
highscoreMenuLabel.setVisible(false);
|
||||
checkAcronymLabel.setVisible(false);
|
||||
checkNameLabel.setVisible(false);
|
||||
|
||||
/*Click-Events*/
|
||||
startGameButton.setOnAction(event -> startGameButtonClick());
|
||||
}
|
||||
|
||||
/***
|
||||
/*** alle
|
||||
* Hauptmenü wird ausgeblendet, Einstellungen folgen
|
||||
*/
|
||||
public void settingsButtonClick() {
|
||||
@@ -456,7 +560,7 @@ public class HappyBirdMain extends Application {
|
||||
});
|
||||
}
|
||||
|
||||
/***
|
||||
/*** alle
|
||||
* Hauptmenü wird ausgeblendet, Einstellungen folgen
|
||||
*/
|
||||
public void settingsButtonPauseClick() {
|
||||
@@ -498,7 +602,7 @@ public class HappyBirdMain extends Application {
|
||||
});
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Hauptmenü wird ausgeblendet, Highscores folgen
|
||||
*/
|
||||
public void highscoresButtonClick() {
|
||||
@@ -522,7 +626,7 @@ public class HappyBirdMain extends Application {
|
||||
menuButton.setVisible(true);
|
||||
}
|
||||
|
||||
/***
|
||||
/*** alle
|
||||
* Nameneingabe, Einstellungen und Highscores werden ausgeblendet
|
||||
* Erneutes Anzeigen des Hauptmenüs
|
||||
*/
|
||||
@@ -544,9 +648,6 @@ public class HappyBirdMain extends Application {
|
||||
/*soundSlider ausblenden*/
|
||||
soundSlider.setVisible(false);
|
||||
|
||||
/*soundLabel ausblenden*/
|
||||
//soundLabel.setVisible(false);
|
||||
|
||||
/*Textfelder ausblenden*/
|
||||
for(TextField feld : inputFields) {
|
||||
feld.setVisible(false);
|
||||
@@ -558,35 +659,72 @@ public class HappyBirdMain extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Startet Spiel nach Namenseingabe
|
||||
*/
|
||||
|
||||
public void startGameButtonClick() {
|
||||
if (correctName() && correctAcronym())
|
||||
if (correctName() == 0 && correctAcronym() == 0)
|
||||
{
|
||||
generateGameScreen();
|
||||
System.out.println(this.gameRunning);
|
||||
pauseButton.setDefaultButton(false);
|
||||
|
||||
/*Klick auf den Pause-Button, um das Pause-Menü aufzurufen*/
|
||||
pauseButton.setOnAction(event -> {
|
||||
if(!menuScreenRunning) {
|
||||
pauseButtonClick(gameRunning);
|
||||
gameRunning = !gameRunning;
|
||||
if (!menuScreenRunning) {
|
||||
pauseButtonClick(this.gameRunning);
|
||||
this.gameRunning = !this.gameRunning;
|
||||
}
|
||||
});
|
||||
|
||||
/*ESC-Tast drücken, um das Pause-Menü aufzurufen*/
|
||||
scene.setOnKeyPressed(e -> {
|
||||
if(e.getCode() == KeyCode.ESCAPE && !menuScreenRunning) {
|
||||
pauseButtonClick(gameRunning);
|
||||
gameRunning = !gameRunning;
|
||||
|
||||
|
||||
/* ESC-Taste zum Öffnen des Pause-Screens einbinden -
|
||||
* Tasten W und S einbinden zum Verändern der Höhe des Vogels
|
||||
* (W bewegt den Vogel hoch / S bewegt den Vogel runter)
|
||||
*/
|
||||
birdPositionMovedBy = 0;
|
||||
scene.setOnKeyPressed(event -> {
|
||||
|
||||
if (event.getCode() == KeyCode.W) {
|
||||
moveBirdUp();
|
||||
}
|
||||
if (event.getCode() == KeyCode.S) {
|
||||
moveBirdDown();
|
||||
}
|
||||
|
||||
if (event.getCode() == KeyCode.ESCAPE && !menuScreenRunning) {
|
||||
pauseButtonClick(this.gameRunning);
|
||||
this.gameRunning = !this.gameRunning;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
System.out.println("Name oder Kürzel falsch!");
|
||||
checkNameLabel.setVisible(false);
|
||||
checkAcronymLabel.setVisible(false);
|
||||
if (correctName() == 1) {
|
||||
checkNameLabel.setText("nicht erlaubte Zeichen!");
|
||||
checkNameLabel.setVisible(true);
|
||||
} else if (correctName() == 2) {
|
||||
checkNameLabel.setText("1. Buchstabe muss groß!");
|
||||
checkNameLabel.setVisible(true);
|
||||
} else if (correctName() == 3) {
|
||||
checkNameLabel.setText("Name nicht leer!");
|
||||
checkNameLabel.setVisible(true);
|
||||
}
|
||||
if (correctAcronym() == 1) {
|
||||
checkAcronymLabel.setText("nicht erlaubte Zeichen!");
|
||||
checkAcronymLabel.setVisible(true);
|
||||
} else if (correctAcronym() == 2) {
|
||||
checkAcronymLabel.setText("Länge 3-10 Zeichen!");
|
||||
checkAcronymLabel.setVisible(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** alle
|
||||
* Zurück zum Spiel aus dem PauseScreen heraus
|
||||
*/
|
||||
public void continueButtonClick() {
|
||||
@@ -603,7 +741,7 @@ public class HappyBirdMain extends Application {
|
||||
/*Pausieren der Transitions/ Pipes*/
|
||||
for(Transition transition : transitions) {
|
||||
transition.play();
|
||||
System.out.println(transition.toString());
|
||||
//System.out.println(transition.toString());
|
||||
}
|
||||
|
||||
/*Pausieren der Timeline, sodass keine neuen Pipes spawnen*/
|
||||
@@ -613,13 +751,15 @@ public class HappyBirdMain extends Application {
|
||||
gameRunning = false;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** alle
|
||||
* alles vom pane entfernen, da als nächstes zum Hauptmenü
|
||||
*/
|
||||
private void menuButtonPauseClick() {
|
||||
/*alles vom pauseScreen entfernen*/
|
||||
pause.getChildren().clear();
|
||||
|
||||
pipesArrayList.clear();
|
||||
collectedPoints = 0;
|
||||
currentScoreLabel.setText("SCORE: " + collectedPoints);
|
||||
/*pause von pane entfernen*/
|
||||
pane.getChildren().clear();
|
||||
|
||||
@@ -627,7 +767,7 @@ public class HappyBirdMain extends Application {
|
||||
gameRunning = false;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Alteköster
|
||||
* Ruft das Pause-Menü im Spiel auf oder blendet es wieder aus
|
||||
*/
|
||||
public void pauseButtonClick(Boolean gameRuns) {
|
||||
@@ -707,7 +847,7 @@ public class HappyBirdMain extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Erste Datenabfrage als Test - wird später gelöscht
|
||||
*/
|
||||
public void dataQuery() {
|
||||
@@ -715,7 +855,8 @@ public class HappyBirdMain extends Application {
|
||||
try (ResultSet rs = datenbank.st.executeQuery(dataquery)) {
|
||||
while (rs.next())
|
||||
{
|
||||
System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4));
|
||||
System.out.println(rs.getString(1) + " " + rs.getString(2)
|
||||
+ " " + rs.getString(3) + " " + rs.getString(4));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -724,7 +865,7 @@ public class HappyBirdMain extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* getPlayerHighscore() berechnet den höchsten erreichten Wert des aktuellen Spielers
|
||||
* (nicht den gesamt höchsten Highscore)
|
||||
*
|
||||
@@ -748,7 +889,7 @@ public class HappyBirdMain extends Application {
|
||||
return highscore;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* calculateHighscores() gibt die Highscores aus ( die 5 höchsten Werte, die bis jetzt gespielt wurden )
|
||||
*
|
||||
* @return die 5 höchsten erreichten Scores
|
||||
@@ -770,16 +911,17 @@ public class HappyBirdMain extends Application {
|
||||
return bestFiveHighscores;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* calculatePersonalHighscores() berechnet die 5 höchsten erreichten Scores des aktuellen Spielers
|
||||
*
|
||||
* @return die 5 höchsten erreichten Scores des aktuellen Spielers
|
||||
*/
|
||||
public String calculatePersonalHighscores() {
|
||||
String bestFiveHighscores = "PLAYER\t\tSCORE\n\n";
|
||||
String currentPlayer = acronymLabel.getText();
|
||||
String currentPlayer = acronym.getText();
|
||||
int i = 0;
|
||||
String sql = "SELECT * FROM happybirddb WHERE kuerzel = '" + currentPlayer + "' ORDER BY punkte DESC LIMIT 5;";
|
||||
System.out.println(sql);
|
||||
try (ResultSet rs = datenbank.st.executeQuery(sql)) {
|
||||
while (rs.next())
|
||||
{
|
||||
@@ -793,20 +935,21 @@ public class HappyBirdMain extends Application {
|
||||
return bestFiveHighscores;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Fügt die erreichte Punktzahl des Spielers für den Spieler mit seinem Namen und Kürzel in die Datenbank ein
|
||||
* @param points die erreichten Punkte
|
||||
*
|
||||
*/
|
||||
public void writeIntoDatabase(int points) {
|
||||
public void writeIntoDatabase() {
|
||||
String playername = name.getText();
|
||||
String playeracronym = acronym.getText();
|
||||
/*String sql = "INSERT INTO happybirddb(name, kuerzel, punkte) VALUES ('" + playername + "', '" + points +
|
||||
"', '" + playeracronym + "');";*/
|
||||
String sql = "INSERT INTO happybirddb (name, kuerzel, punkte) VALUES (?, ?, ?);";
|
||||
try (PreparedStatement ps = datenbank.con.prepareStatement(sql)) {
|
||||
ps.setString(2, playername);
|
||||
ps.setInt(3, points);
|
||||
ps.setString(4, playeracronym);
|
||||
ps.setString(1, playername);
|
||||
ps.setString(2, playeracronym);
|
||||
ps.setInt(3, collectedPoints / 2);
|
||||
System.out.println(ps);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -815,60 +958,63 @@ public class HappyBirdMain extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Überprüft, ob der eingegebene Name den Vorgaben entspricht
|
||||
* (Erlaubte Zeichen: Groß- und Kleinbuchstaben, Umlaute und Leerzeichen
|
||||
*
|
||||
* @return true, wenn ja, sonst false
|
||||
* @return 0, wenn ja,
|
||||
* sonst: 1, wenn nicht erlaubte Zeichen verwendet
|
||||
* 2, wenn der 1. Buchstabe kleingeschrieben ist
|
||||
* 3, wenn der Name leer ist
|
||||
*/
|
||||
public boolean correctName() {
|
||||
public int correctName() {
|
||||
String nametext = name.getText();
|
||||
if (!nametext.matches("[a-zA-ZÄÖÜäöüß ]*"))
|
||||
{
|
||||
System.out.println("Fehler Schreibweise Name");
|
||||
return false;
|
||||
System.out.println("Fehler Schreibweise Name - nicht erlaubte Zeichen");
|
||||
return 1;
|
||||
}
|
||||
if (nametext.length() > 0)
|
||||
{
|
||||
if (nametext.charAt(0) < 'A' || nametext.charAt(0) > 'Z')
|
||||
{
|
||||
System.out.println("Fehler Schreibweise Name 1. Buchstabe");
|
||||
return false;
|
||||
System.out.println("Fehler Schreibweise Name - 1. Buchstabe muss großgeschrieben werden");
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("Name leer");
|
||||
return false;
|
||||
System.out.println("Name darf nicht leer sein");
|
||||
return 3;
|
||||
}
|
||||
return true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* Überprüft, ob das eingegebene Akronym den Vorgaben entspricht
|
||||
* ( >= 3 Zeichen, <= 12 Zeichen, Groß- und Kleinbuchstaben, Zahlen 0-9 -- keine Sonderzeichen)
|
||||
* @return true, wenn ja, sonst false
|
||||
* @return 0, wenn ja,
|
||||
* sonst: 1, wenn die Länge nicht korrekt ist
|
||||
* 2, wenn nicht erlaubte Zeichen verwendet werden
|
||||
*/
|
||||
public boolean correctAcronym() {
|
||||
public int correctAcronym() {
|
||||
String acronymtext = acronym.getText();
|
||||
System.out.println(acronymtext.length());
|
||||
System.out.println(acronymtext);
|
||||
if (acronymtext.length() < 3 || acronymtext.length() > 10)
|
||||
{
|
||||
System.out.println("Fehler Länge Kürzel");
|
||||
return false;
|
||||
}
|
||||
if (!acronymtext.matches("[A-Za-z0-9]*"))
|
||||
{
|
||||
System.out.println("Fehler Schreibweise Kürzel");
|
||||
return false;
|
||||
System.out.println("Fehler Schreibweise Kürzel - nur Buchstaben und Zahlen erlaubt");
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
if (acronymtext.length() < 3 || acronymtext.length() > 10)
|
||||
{
|
||||
System.out.println("Fehler Länge Kürzel (3-10 Zeichen)");
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***
|
||||
/*** Pape, Bickmann, Ekmen
|
||||
* public void generateEndScreen() generiert den Endscreen - sobald das Spiel beendet ist
|
||||
* (man verloren hat). Es werden die Punkte des Spielers angezeigt, und es bestehen die Möglichkeiten,
|
||||
* das Spiel neu zu starten
|
||||
@@ -876,20 +1022,18 @@ public class HappyBirdMain extends Application {
|
||||
* sich seine persänlichen Highscores anzeigen zu lassen
|
||||
*/
|
||||
public void generateEndScreen() {
|
||||
formatingClass.endScreenFormating(endScreen, pause, endScreenHeadline, currentScoreEndscreenLabel);
|
||||
formatingClass.endScreenFormating(endScreen, endScreenHeadline, currentScoreEndscreenLabel);
|
||||
/*Name und Highscores ausblenden, Pause-Button ausblenden*/
|
||||
nameLabel.setVisible(false);
|
||||
highscoreLabel.setVisible(false);
|
||||
pauseButton.setVisible(false);
|
||||
currentScoreLabel.setVisible(false);
|
||||
|
||||
/**/
|
||||
endScreen.setVisible(true);
|
||||
|
||||
endScreen.getChildren().add(endScreenHeadline);
|
||||
endScreenHeadline.setVisible(true);
|
||||
|
||||
endScreen.getChildren().add(currentScoreEndscreenLabel);
|
||||
currentScoreEndscreenLabel.setText("YOUR SCORE: " + collectedPoints / 2);
|
||||
currentScoreEndscreenLabel.setVisible(true);
|
||||
|
||||
/* Buttons einfügen */
|
||||
@@ -907,57 +1051,52 @@ public class HappyBirdMain extends Application {
|
||||
backMenuButton.setOnAction(event -> backMenuButtonClick());
|
||||
personalHighscoresButton.setOnAction(event -> personalHighscoresButtonClick());
|
||||
restartGameButton.setOnAction(event -> restartGameButtonClick());
|
||||
|
||||
//AB HIER MÜLL
|
||||
|
||||
/*Überschrift einblenden - Text auf Game Over setzen */
|
||||
headline.setVisible(true);
|
||||
headline.setText("GAME OVER");
|
||||
/*startGameButton anzeigen, Text zu "neu Starten" ändern und positionieren*/
|
||||
startGameButton.setVisible(true);
|
||||
startGameButton.setText("NEU STARTEN");
|
||||
/*Button fürs Hauptmenü einblenden und positionieren*/
|
||||
menuButton.setVisible(true);
|
||||
/*Button für persönliche Highscores einblenden und positionieren*/
|
||||
personalHighscoresButton.setVisible(true);
|
||||
//personalHighscoresButton.setLayoutX();
|
||||
//personalHighscoresButton.setLayoutY();
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape, Bickmann, Ekmen
|
||||
* die Funktion restartGameButtonClick() startet das Spiel neu
|
||||
*/
|
||||
private void restartGameButtonClick() {
|
||||
pane.getChildren().remove(endScreen);
|
||||
pane.getChildren().remove(happyBird);
|
||||
for (Rectangle pipe : pipesArrayList) {
|
||||
pane.getChildren().remove(pipe);
|
||||
}
|
||||
pipesArrayList.clear();
|
||||
collectedPoints = 0;
|
||||
currentScoreLabel.setText("SCORE: " + collectedPoints);
|
||||
endScreenOpened = false;
|
||||
openEndScreen = false;
|
||||
endScreen.getChildren().clear();
|
||||
startGameButtonClick();
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape
|
||||
* personalHighscoresButtonClick() zeigt bei Drücken des Highscore-Buttons im Endscreen
|
||||
* die persänlichen besten 5 Scores an
|
||||
*/
|
||||
private void personalHighscoresButtonClick() {
|
||||
/* alle Buttons ausblenden */
|
||||
System.out.println("Highscore-Button");
|
||||
for(Button button : endscreenButtons) {
|
||||
button.setVisible(false);
|
||||
}
|
||||
/* Back-Button einblenden */
|
||||
backEndscreenButton.setLayoutY(425);
|
||||
backEndscreenButton.setVisible(true);
|
||||
|
||||
/* Überschrift ändern */
|
||||
endScreenHeadline.setText("YOUR HIGHSCORES");
|
||||
endScreenHeadline.setText("YOUR SCORES");
|
||||
|
||||
/* Highscore ausblenden */
|
||||
currentScoreEndscreenLabel.setVisible(false);
|
||||
|
||||
/* Highscore-Label (Hintergrund) formatieren und einfügen */
|
||||
highscoreMenuLabel.setLayoutX(275);
|
||||
highscoreMenuLabel.setLayoutY(225);
|
||||
highscoreMenuLabel.setPrefHeight(300);
|
||||
highscoreMenuLabel.setPrefSize(250, 250);
|
||||
highscoreMenuLabel.setVisible(true);
|
||||
highscoreMenuLabel.setLayoutX(75);
|
||||
highscoreMenuLabel.setLayoutY(100);
|
||||
highscoreMenuLabel.setPrefSize(250, 300);
|
||||
endScreen.getChildren().add(highscoreMenuLabel);
|
||||
highscoreMenuLabel.setVisible(true);
|
||||
|
||||
/* Highscores des Spielers einfügen */
|
||||
String personalBestScores = calculatePersonalHighscores();
|
||||
@@ -973,14 +1112,44 @@ public class HappyBirdMain extends Application {
|
||||
currentScoreEndscreenLabel.setVisible(true);
|
||||
highscoreMenuLabel.setVisible(false);
|
||||
backEndscreenButton.setVisible(false);
|
||||
endScreen.getChildren().remove(highscoreMenuLabel);
|
||||
});
|
||||
}
|
||||
|
||||
/***
|
||||
/*** Pape, Bickmann, Ekmen
|
||||
* backMenuButtonClick() ruft aus dem Endscreen das Hauptmenü auf
|
||||
*/
|
||||
private void backMenuButtonClick() {
|
||||
pane.getChildren().remove(endScreen);
|
||||
pane.getChildren().clear();
|
||||
for (Rectangle pipe : pipesArrayList) {
|
||||
pane.getChildren().remove(pipe);
|
||||
}
|
||||
pipesArrayList.clear();
|
||||
collectedPoints = 0;
|
||||
currentScoreLabel.setText("SCORE: " + collectedPoints);
|
||||
endScreenOpened = false;
|
||||
openEndScreen = false;
|
||||
endScreen.getChildren().clear();
|
||||
generateMenueScreen();
|
||||
}
|
||||
|
||||
/*** Bickmann
|
||||
* Aufstieg dauert immer länger
|
||||
*/
|
||||
private void moveBirdUp() {
|
||||
velocity = (float) -4.5;
|
||||
var pos = velocity += gravity;
|
||||
birdPositionMovedBy += pos;
|
||||
happyBird.setLayoutY(birdPositionMovedBy);
|
||||
}
|
||||
|
||||
/*** Bickmann
|
||||
* Fall geht schneller
|
||||
*/
|
||||
private void moveBirdDown() {
|
||||
var pos = velocity -= gravity;
|
||||
birdPositionMovedBy -= pos;
|
||||
happyBird.setLayoutY(birdPositionMovedBy);
|
||||
}
|
||||
}
|
@@ -1,23 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class HelloApplication extends Application {
|
||||
@Override
|
||||
public void start(Stage stage) throws IOException {
|
||||
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
|
||||
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
|
||||
stage.setTitle("Hello!");
|
||||
stage.setScene(scene);
|
||||
stage.show();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
launch();
|
||||
}
|
||||
}
|
@@ -1,14 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Label;
|
||||
|
||||
public class HelloController {
|
||||
@FXML
|
||||
private Label welcomeText;
|
||||
|
||||
@FXML
|
||||
protected void onHelloButtonClick() {
|
||||
welcomeText.setText("Welcome to JavaFX Application!");
|
||||
}
|
||||
}
|
@@ -1,5 +1,6 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
/** Pape */
|
||||
import java.sql.*;
|
||||
public class MariaDB
|
||||
{
|
||||
|
@@ -1,7 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
public enum Movement {
|
||||
Up,
|
||||
Down,
|
||||
None
|
||||
}
|
@@ -1,104 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ImageObserver;
|
||||
|
||||
public class Pipe extends SpielObjekt {
|
||||
|
||||
private java.awt.Image lowerPipe;
|
||||
// private java.awt.Image lowerPipe = new java.awt.Image("file:src/main/resources/com/example/happy_bird/pics/PipeUnten.png", 86, 300, false, false);
|
||||
private int xWert = 0, yWert = 0;
|
||||
|
||||
public Pipe(int xWert, int yWert) {
|
||||
super(xWert, yWert);
|
||||
lowerPipe = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("com/example/happy_bird/"));
|
||||
//scale lowerPipe(initialWidth, initialHeight)
|
||||
}
|
||||
|
||||
public void scaleTopPipe(int width, int height) {
|
||||
lowerPipe = lowerPipe.getScaledInstance(width, height, Image.SCALE_SMOOTH);
|
||||
}
|
||||
|
||||
public Image getPipe() {
|
||||
return getPipe();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method um die Breite des BottomPipe-Objekts zu erhalten
|
||||
* @return int
|
||||
*/
|
||||
public int getWidth(int width) {
|
||||
return lowerPipe.getWidth(null);
|
||||
}
|
||||
/**
|
||||
* Methode um die Höhe des BottomPipe-Objekts zu erhalten
|
||||
* @return int
|
||||
*/
|
||||
public int getHeight(int height) {
|
||||
return lowerPipe.getHeight(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Festlegen der x-Position des BottomPipe-Objekts
|
||||
* @param x
|
||||
*/
|
||||
public void setX(int x) {
|
||||
xWert = x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Abrufen der x-Position des BottomPipe-Objekts
|
||||
* @return int
|
||||
*/
|
||||
public int getX() {
|
||||
return xWert;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Festlegen der y-Position des BottomPipe-Objekts
|
||||
* @param y
|
||||
*/
|
||||
public void setY(int y) {
|
||||
yWert = y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Abrufen der y-Position des BottomPipe-Objekts
|
||||
* @return int
|
||||
*/
|
||||
public int getY() {
|
||||
return yWert;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Erfassen eines Rechtecks, das das Bild des BottomPipe umreißt
|
||||
* @return Rechteck, das die Position des BottomPipe auf dem Bildschirm umreißt
|
||||
*/
|
||||
public Rectangle getRectangle() {
|
||||
return (new Rectangle(xWert, yWert, lowerPipe.getWidth(null), lowerPipe.getHeight(null)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Erfassen eines BufferedImage, das das Bildobjekt der TopPipe darstellt
|
||||
* @return TopPipe's BufferedImage-Objekt
|
||||
*/
|
||||
public BufferedImage getBI() {
|
||||
BufferedImage bi = new BufferedImage(lowerPipe.getWidth(null), lowerPipe.getHeight(null), BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics g = bi.getGraphics();
|
||||
g.drawImage(lowerPipe, 0, 0, null);
|
||||
g.dispose();
|
||||
return bi;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, ImageObserver obs) {
|
||||
|
||||
}
|
||||
}
|
@@ -1,103 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.Image;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
public class PipeTop {
|
||||
//global variables
|
||||
private Image topPipe;
|
||||
private int xLoc = 0, yLoc = 0;
|
||||
|
||||
public PipeTop(int initialWidth, int initialHeight) {
|
||||
topPipe = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/tube_top.png"));
|
||||
scaleTopPipe(initialWidth, initialHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Skalieren des topPipe-Sprites in die gewünschten Dimensionen
|
||||
* @param width Die gewünschte Breite der topPipe
|
||||
* @param height Die gewünschte Höhe der topPipe
|
||||
*/
|
||||
public void scaleTopPipe(int width, int height) {
|
||||
topPipe = topPipe.getScaledInstance(width, height, Image.SCALE_SMOOTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter-Methode für das TopPipe-Objekt.
|
||||
* @return-Image
|
||||
*/
|
||||
public Image getPipe() {
|
||||
return topPipe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Abrufen der Breite des TopPipe-Objekts
|
||||
* @return int
|
||||
*/
|
||||
public int getWidth() {
|
||||
return topPipe.getWidth(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode, um die Höhe des TopPipe-Objekts zu erhalten
|
||||
* @return int
|
||||
*/
|
||||
public int getHeight() {
|
||||
return topPipe.getHeight(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Festlegen der x-Position des TopPipe-Objekts
|
||||
* @param x
|
||||
*/
|
||||
public void setX(int x) {
|
||||
xLoc = x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Abrufen der x-Position des TopPipe-Objekts
|
||||
* @return int
|
||||
*/
|
||||
public int getX() {
|
||||
return xLoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Festlegen der y-Position des TopPipe-Objekts
|
||||
* @param y
|
||||
*/
|
||||
public void setY(int y) {
|
||||
yLoc = y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Abrufen der y-Position des TopPipe-Objekts
|
||||
* @return int
|
||||
*/
|
||||
public int getY() {
|
||||
return yLoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Erfassen eines Rechtecks, das das Bild der TopPipe umreißt
|
||||
* @return Rechteck, das die Position der TopPipe auf dem Bildschirm umreißt
|
||||
*/
|
||||
public Rectangle getRectangle() {
|
||||
return (new Rectangle(xLoc, yLoc, topPipe.getWidth(null), topPipe.getHeight(null)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode zum Erfassen eines BufferedImage, das das Bildobjekt der TopPipe darstellt
|
||||
* @return BufferedImage-Objekt von TopPipe
|
||||
*/
|
||||
public BufferedImage getBI() {
|
||||
BufferedImage bi = new BufferedImage(topPipe.getWidth(null), topPipe.getHeight(null), BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics g = bi.getGraphics();
|
||||
g.drawImage(topPipe, 0, 0, null);
|
||||
g.dispose();
|
||||
return bi;
|
||||
}
|
||||
}
|
@@ -1,110 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
import javafx.animation.AnimationTimer;
|
||||
import javafx.animation.Transition;
|
||||
import javafx.animation.TranslateTransition;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.Pane;
|
||||
import javafx.scene.paint.ImagePattern;
|
||||
import javafx.scene.shape.Rectangle;
|
||||
import javafx.animation.TranslateTransition;
|
||||
import javafx.util.Duration;
|
||||
|
||||
public class Pipes extends Rectangle {
|
||||
private int y;
|
||||
private Rectangle topPipe;
|
||||
private Rectangle bottomPipe;
|
||||
private int distanceBeweenPipes = 250;
|
||||
private boolean isPassedOn = false;
|
||||
/***
|
||||
* Konstruktor GameObject
|
||||
* Variablen werden zugewiesen
|
||||
* param x x-Position
|
||||
* param y y-Position
|
||||
* param width Breite
|
||||
* param height Höhe
|
||||
*/
|
||||
public Pipes(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Rectangle[] createPipes(Transition top, Transition bottom, Pane pane) {
|
||||
int y = (int) (Math.random() * (200))-300;
|
||||
Rectangle topPipe = new Rectangle(1000, y, 91, 500);
|
||||
Rectangle bottomPipe = new Rectangle(1000, y + 400 + 250, 91, 500);
|
||||
|
||||
|
||||
Image img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeTop.png");
|
||||
topPipe.setFill(new ImagePattern(img));
|
||||
|
||||
img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeBottom.png");
|
||||
bottomPipe.setFill(new ImagePattern(img));
|
||||
|
||||
top = new TranslateTransition();
|
||||
bottom = new TranslateTransition();
|
||||
|
||||
((TranslateTransition) top).setNode(topPipe);
|
||||
((TranslateTransition) top).setDuration(Duration.seconds(5));
|
||||
((TranslateTransition) top).setToX(-1200);
|
||||
top.setOnFinished(e -> {
|
||||
pane.getChildren().remove(topPipe);
|
||||
});
|
||||
|
||||
((TranslateTransition) bottom).setNode(bottomPipe);
|
||||
((TranslateTransition) bottom).setDuration(Duration.seconds(5));
|
||||
((TranslateTransition) bottom).setToX(-1200);
|
||||
bottom.setOnFinished(e -> {
|
||||
pane.getChildren().remove(bottomPipe);
|
||||
});
|
||||
|
||||
Rectangle[] pipes = {topPipe, bottomPipe};
|
||||
return pipes;
|
||||
}
|
||||
|
||||
public void destroy(Pane pane) {
|
||||
|
||||
pane.getChildren().remove(topPipe);
|
||||
pane.getChildren().remove(bottomPipe);
|
||||
}
|
||||
|
||||
/***
|
||||
* Setzt für die beiden Rechtecke der Pipes das Hintergrundbild
|
||||
*/
|
||||
public void setImage() {
|
||||
Image img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeTop.png");
|
||||
topPipe.setFill(new ImagePattern(img));
|
||||
|
||||
img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeBottom.png");
|
||||
bottomPipe.setFill(new ImagePattern(img));
|
||||
}
|
||||
|
||||
/***
|
||||
* Setzt ein Object auf eine neue Position
|
||||
* param newX neue x-Position
|
||||
*/
|
||||
public void resetToNewPosition(int newX) {
|
||||
topPipe.setX(newX);
|
||||
bottomPipe.setX(newX);
|
||||
//xKoord = newX;
|
||||
}
|
||||
|
||||
/*
|
||||
// Prüfung ob Rectangle true oder false ist
|
||||
public boolean intersect(Rectangle rectangle) {
|
||||
return rectangle.intersects(topPipe) || rectangle.intersects(bottomPipe);
|
||||
}
|
||||
|
||||
// Röhren Counter → Check, wenn Röhre durchflogen ist
|
||||
public boolean passedOn(Rectangle rectangle) {
|
||||
return rectangle.x > xKoord + width && !isPassedOn;
|
||||
}
|
||||
|
||||
// Bei Bewegung der X Koordinate werden Röhren generiert
|
||||
public void moveX(int dx) {
|
||||
xKoord -= dx;
|
||||
topPipe.x -= dx;
|
||||
bottomPipe.x -= dx;
|
||||
}*/
|
||||
}
|
@@ -1,80 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.image.ImageObserver;
|
||||
|
||||
public abstract class SpielObjekt {
|
||||
private int xWert;
|
||||
private int yWert;
|
||||
private int fxWert;
|
||||
private int fyWert;
|
||||
private int breite;
|
||||
private int hoehe;
|
||||
private Image bild;
|
||||
|
||||
public SpielObjekt(int xWert, int yWert) {
|
||||
this.xWert = xWert;
|
||||
this.yWert = yWert;
|
||||
}
|
||||
|
||||
public int getyWert() {
|
||||
return yWert;
|
||||
}
|
||||
|
||||
public void setyWert(int yWert) {
|
||||
this.yWert = yWert;
|
||||
}
|
||||
|
||||
public int getxWert() {
|
||||
return xWert;
|
||||
}
|
||||
|
||||
public void setxWert(int xWert) {
|
||||
this.xWert = xWert;
|
||||
}
|
||||
|
||||
public int getFxWert() {
|
||||
return fxWert;
|
||||
}
|
||||
|
||||
public void setFxWert(int fxWert) {
|
||||
this.fxWert = fxWert;
|
||||
}
|
||||
|
||||
public int getFyWert() {
|
||||
return fyWert;
|
||||
}
|
||||
|
||||
public void setFyWert(int fyWert) {
|
||||
this.fyWert = fyWert;
|
||||
}
|
||||
|
||||
public int getBreite() {
|
||||
return breite;
|
||||
}
|
||||
|
||||
public void setBreite(int breite) {
|
||||
this.breite = breite;
|
||||
}
|
||||
|
||||
public int getHoehe() {
|
||||
return hoehe;
|
||||
}
|
||||
|
||||
public void setHoehe(int hoehe) {
|
||||
this.hoehe = hoehe;
|
||||
}
|
||||
|
||||
public Image getBild() {
|
||||
return bild;
|
||||
}
|
||||
|
||||
public void setBild(Image bild) {
|
||||
this.bild = bild;
|
||||
}
|
||||
|
||||
|
||||
public abstract void tick();
|
||||
|
||||
public abstract void render(Graphics2D g, ImageObserver obs);
|
||||
}
|
@@ -1,10 +0,0 @@
|
||||
package com.example.happy_bird;
|
||||
|
||||
public class TopClass {
|
||||
|
||||
private static final int PIPE_GAP = 0;
|
||||
private static final int PIPE_WIDTH = 0;
|
||||
|
||||
|
||||
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
|
||||
<?import javafx.scene.control.Button?>
|
||||
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="com.example.happy_bird.HelloController">
|
||||
<padding>
|
||||
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
|
||||
</padding>
|
||||
|
||||
<Label fx:id="welcomeText"/>
|
||||
<Button text="Hello!" onAction="#onHelloButtonClick"/>
|
||||
</VBox>
|
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 65 KiB |
Binary file not shown.
Before Width: | Height: | Size: 126 KiB |
Reference in New Issue
Block a user