From b0ceb684cb23d5b48007186c1e59f6ad6f993e6c Mon Sep 17 00:00:00 2001 From: David96 Date: Thu, 31 Dec 2020 13:29:21 +0100 Subject: [PATCH] Move states in their own classes --- Bird.java | 4 +- GameScreen.java | 49 +++++++++++++ IntroScreen.java | 142 +++++++++++++++++++++++++++++++++++++ Manager.java | 177 +++-------------------------------------------- Welt.java | 4 +- 5 files changed, 204 insertions(+), 172 deletions(-) create mode 100644 GameScreen.java create mode 100644 IntroScreen.java diff --git a/Bird.java b/Bird.java index bf96ac0..6ecc3b9 100644 --- a/Bird.java +++ b/Bird.java @@ -5,10 +5,10 @@ public class Bird private final Rectangle _rect; private double _speed; - public Bird(Manager man) + public Bird(GameScreen game) { _rect = new Rectangle(20, 20, 20, 20, "cyan", true); - man.addDrawable(_rect); + game.addDrawable(_rect); } public void reset() diff --git a/GameScreen.java b/GameScreen.java new file mode 100644 index 0000000..df964e4 --- /dev/null +++ b/GameScreen.java @@ -0,0 +1,49 @@ +import java.util.List; +import java.util.ArrayList; + +class GameScreen +{ + private final List _drawables; + private final Bird _bird; + private final Welt _welt; + + public GameScreen() + { + _drawables = new ArrayList(); + _bird = new Bird(this); + _welt = new Welt(this); + } + + public void update(double elapsed) + { + _bird.update(elapsed); + _welt.update(elapsed); + + if (_welt.checkCollision(_bird.getRect()) || + _bird.getRect().getY() + _bird.getRect().getHeight() > TurtleWelt.HEIGHT) + { + _bird.reset(); + _welt.reset(); + } + } + + + public void draw(Turtle turtle, double elapsed) + { + TurtleWelt.globaleWelt.bildschirmEinfaerben(255, 255, 255); + for (var d : _drawables) + { + d.draw(turtle, elapsed); + } + } + + public void addDrawable(Drawable d) + { + _drawables.add(d); + } + + public void jump() + { + _bird.jump(); + } +} diff --git a/IntroScreen.java b/IntroScreen.java new file mode 100644 index 0000000..c7b618c --- /dev/null +++ b/IntroScreen.java @@ -0,0 +1,142 @@ +class IntroScreen +{ + private boolean _introDrawn; + + public IntroScreen() {} + + private void goTo(Turtle t, int x, int y) + { + t.hinterlasseKeineSpur(); + t.geheZu(x, y); + t.hinterlasseSpur(); + } + + /* + * Draws Flappy Bird on screen. + * There are surely much nicer ways of doing this but this had the least + * cognitive overhead. + */ + public void draw(Turtle t) + { + if (!_introDrawn) + { + TurtleWelt.globaleWelt.bildschirmEinfaerben(0, 0, 0); + _introDrawn = true; + + t.setzeFarbe("gruen"); + // F + goTo(t, 100, 100); + t.setzeGeschwindigkeit(1); + t.setzeRichtung(180); + t.geheVor(50); + t.setzeRichtung(90); + t.geheVor(50); + t.setzeRichtung(0); + t.geheVor(40); + t.setzeRichtung(180); + t.geheVor(40); + t.setzeRichtung(90); + t.geheVor(50); + + // L + goTo(t, 110, 100); + t.setzeRichtung(90); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(50); + + // A + goTo(t, 170, 200); + t.setzeRichtung(-90); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(50); + t.setzeRichtung(90); + t.geheVor(50); + t.setzeRichtung(180); + t.geheVor(50); + t.geheVor(-50); + t.setzeRichtung(90); + t.geheVor(50); + + // PP + goTo(t, 230, 200); + for (int i = 0; i < 2; ++i) + { + t.setzeRichtung(-90); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(50); + t.setzeRichtung(90); + t.geheVor(50); + t.setzeRichtung(180); + t.geheVor(50); + goTo(t, 290, 200); + } + + // Y + goTo(t, 350, 100); + t.setzeRichtung(90); + t.geheVor(50); + t.setzeRichtung(0); + t.geheVor(25); + t.setzeRichtung(90); + t.geheVor(50); + t.geheVor(-50); + t.setzeRichtung(0); + t.geheVor(25); + t.setzeRichtung(-90); + t.geheVor(50); + + t.setzeFarbe("blau"); + // B + goTo(t, 50, 210); + t.setzeRichtung(90); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(50); + t.setzeRichtung(-90); + t.geheVor(50); + t.setzeRichtung(180); + t.geheVor(50); + t.geheVor(-40); + t.setzeRichtung(-90); + t.geheVor(50); + t.setzeRichtung(180); + t.geheVor(40); + + // I + goTo(t, 110, 210); + t.setzeRichtung(90); + t.geheVor(100); + + // R + goTo(t, 170, 310); + t.setzeRichtung(-90); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(40); + t.setzeRichtung(90); + t.geheVor(50); + t.setzeRichtung(180); + t.geheVor(40); + t.geheVor(-50); + t.setzeRichtung(90); + t.geheVor(50); + + // D + goTo(t, 235, 210); + t.geheVor(100); + t.setzeRichtung(0); + t.geheVor(-5); + t.geheVor(50); + t.setzeRichtung(-90); + t.geheVor(100); + t.setzeRichtung(180); + t.geheVor(50); + + t.setzeGeschwindigkeit(10); + } + } + +} diff --git a/Manager.java b/Manager.java index c764685..017f00f 100644 --- a/Manager.java +++ b/Manager.java @@ -17,15 +17,11 @@ class Manager implements KeyListener "Simple version of Flappy Bird\n" + "Press SPACE to jump!\n" + "------------------------------\n"; - private final List _drawables; - private Bird _bird; - private Welt _welt; + private final GameScreen _game; private States _state; - private boolean _introDrawn; public Manager() { - _drawables = new ArrayList(); Turtle turtle = new Turtle(); turtle.setzeGeschwindigkeit(10); @@ -50,7 +46,8 @@ class Manager implements KeyListener System.out.print(USAGE); - //startGame(); + IntroScreen intro = new IntroScreen(); + _game = new GameScreen(); _state = States.INTRO; long lastNanos, elapsed; @@ -65,13 +62,13 @@ class Manager implements KeyListener switch (_state) { case GAME: - updateGame(elapsed * 1e-6d); - drawGame(turtle, elapsed * 1e-6d); + _game.update(elapsed * 1e-6d); + _game.draw(turtle, elapsed * 1e-6d); break; case INTRO: - drawIntro(turtle); - // Start game after 4 seconds - if (total > 4e9) + intro.draw(turtle); + // Start game after 3 seconds + if (total > 3e9) { startGame(); } @@ -90,172 +87,16 @@ class Manager implements KeyListener } } - private void goTo(Turtle t, int x, int y) - { - t.hinterlasseKeineSpur(); - t.geheZu(x, y); - t.hinterlasseSpur(); - } - - private void drawIntro(Turtle t) - { - if (!_introDrawn) - { - _introDrawn = true; - - // F - goTo(t, 100, 100); - t.setzeGeschwindigkeit(1); - t.setzeRichtung(180); - t.geheVor(50); - t.setzeRichtung(90); - t.geheVor(50); - t.setzeRichtung(0); - t.geheVor(40); - t.setzeRichtung(180); - t.geheVor(40); - t.setzeRichtung(90); - t.geheVor(50); - - // L - goTo(t, 110, 100); - t.setzeRichtung(90); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(50); - - // A - goTo(t, 170, 200); - t.setzeRichtung(-90); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(50); - t.setzeRichtung(90); - t.geheVor(50); - t.setzeRichtung(180); - t.geheVor(50); - t.geheVor(-50); - t.setzeRichtung(90); - t.geheVor(50); - - // PP - goTo(t, 230, 200); - for (int i = 0; i < 2; ++i) - { - t.setzeRichtung(-90); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(50); - t.setzeRichtung(90); - t.geheVor(50); - t.setzeRichtung(180); - t.geheVor(50); - goTo(t, 290, 200); - } - - // Y - goTo(t, 350, 100); - t.setzeRichtung(90); - t.geheVor(50); - t.setzeRichtung(0); - t.geheVor(25); - t.setzeRichtung(90); - t.geheVor(50); - t.geheVor(-50); - t.setzeRichtung(0); - t.geheVor(25); - t.setzeRichtung(-90); - t.geheVor(50); - - // B - goTo(t, 50, 210); - t.setzeRichtung(90); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(50); - t.setzeRichtung(-90); - t.geheVor(50); - t.setzeRichtung(180); - t.geheVor(50); - t.geheVor(-40); - t.setzeRichtung(-90); - t.geheVor(50); - t.setzeRichtung(180); - t.geheVor(40); - - // I - goTo(t, 110, 210); - t.setzeRichtung(90); - t.geheVor(100); - - // R - goTo(t, 170, 310); - t.setzeRichtung(-90); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(40); - t.setzeRichtung(90); - t.geheVor(50); - t.setzeRichtung(180); - t.geheVor(40); - t.geheVor(-50); - t.setzeRichtung(90); - t.geheVor(50); - - // D - goTo(t, 235, 210); - t.geheVor(100); - t.setzeRichtung(0); - t.geheVor(-5); - t.geheVor(50); - t.setzeRichtung(-90); - t.geheVor(100); - t.setzeRichtung(180); - t.geheVor(50); - - t.setzeGeschwindigkeit(10); - } - } - private void startGame() { _state = States.GAME; - _bird = new Bird(this); - _welt = new Welt(this); - } - - private void updateGame(double elapsed) - { - _bird.update(elapsed); - _welt.update(elapsed); - - if (_welt.checkCollision(_bird.getRect()) || - _bird.getRect().getY() + _bird.getRect().getHeight() > TurtleWelt.HEIGHT) - { - _bird.reset(); - _welt.reset(); - } - } - - private void drawGame(Turtle turtle, double elapsed) - { - TurtleWelt.globaleWelt.bildschirmEinfaerben(255, 255, 255); - for (var d : _drawables) - { - d.draw(turtle, elapsed); - } - } - - public void addDrawable(Drawable d) - { - _drawables.add(d); } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { - _bird.jump(); + _game.jump(); } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { diff --git a/Welt.java b/Welt.java index b9cd519..0c70e60 100644 --- a/Welt.java +++ b/Welt.java @@ -9,9 +9,9 @@ class Welt implements Drawable private double _acc = 2; private final Random _random; - public Welt(Manager manager) + public Welt(GameScreen game) { - manager.addDrawable(this); + game.addDrawable(this); _random = new Random(); _obstacles = new ArrayList(); reset();