Compare commits

...

23 Commits

Author SHA1 Message Date
d707be3e4c Namen in die Kommentare 2022-02-10 13:16:28 +01:00
88b0ba5d05 Code Cleaning 2022-02-10 08:47:16 +01:00
4f2eeb5040 Gravitation & Velocity Jump Fix &
Pipe anpassen
2022-02-10 08:35:39 +01:00
a60eb17230 Gravitation & Velocity Jump Fix &
Pipe anpassen
2022-02-10 08:33:07 +01:00
0f2352e003 Gravitation & Velocity Jump Fix &
Pipe anpassen
2022-02-10 08:32:00 +01:00
e21b4c0f2d Gravitation & Velocity Jump Fix 2022-02-09 14:55:20 +01:00
d835ec3460 Unnötige Variable entfernt 2022-02-09 14:02:01 +01:00
635aef047a Kleine Bugfixes - Punkte werden beim Pause-Button ins Hauptmenü zurückgesetzt & ESC-Taste im Spiel fixen 2022-02-09 13:56:56 +01:00
f2f88c404d Zeilenlänge anpassen nach Coding-Guidelines 2022-02-08 11:09:45 +01:00
8f5a4e6a74 Kollision Decke/Boden 2022-02-08 11:03:52 +01:00
fcb650ffef Verbesserung einer Formatierungsfunktion 2022-02-07 15:01:37 +01:00
79db8a088a Highscores-Überschrift wird geändert 2022-02-07 11:24:04 +01:00
b37993d9a2 Labels für Hinweise zu Namens/Kürzelkonventionen eingefügt 2022-01-31 10:32:18 +01:00
1f0fedeaac Korrekturen am Neustart-Button, Hauptmenü-Button aus dem End-Screen, Fix der INSERT-Abfrage 2022-01-25 13:39:53 +01:00
43ba9226e2 Fix für den Restart-Button - mehrere Neustarts ergeben keine Fehler 2022-01-25 12:57:24 +01:00
3610c3fb7a End-Screen - anfang des Eingbindens des Spiel-Neustarts & Persönliche Highscores 2022-01-25 12:45:32 +01:00
98bcfec0fd Endscreen formatieren 2022-01-25 11:42:39 +01:00
af010b5bd8 Current Score Zähler einbauen 2022-01-25 10:58:35 +01:00
b5daf848c4 Movement über Keys einbauen (W/S) 2022-01-25 10:44:35 +01:00
46bf46f92c Kollisionsabfrage 2022-01-24 15:11:57 +01:00
5894de5567 Kollisionsabfrage 2022-01-24 15:07:01 +01:00
680a80d210 kliene Änderung 2022-01-24 13:40:52 +01:00
1cd92601e1 kleine Änderungen 2022-01-24 13:39:55 +01:00
33 changed files with 346 additions and 765 deletions

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />

View File

@@ -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>

View File

@@ -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.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -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) {
}
}

View File

@@ -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) {
}
}

View File

@@ -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;
}*/
}

View File

@@ -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
{
}

View File

@@ -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 {
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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!");
}
}

View File

@@ -1,5 +1,6 @@
package com.example.happy_bird;
/** Pape */
import java.sql.*;
public class MariaDB
{

View File

@@ -1,7 +0,0 @@
package com.example.happy_bird;
public enum Movement {
Up,
Down,
None
}

View File

@@ -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) {
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}*/
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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