FlappyTurtle/Manager.java
David96 4a1bbf2be0 Use proper Color class to animate everything
Don't need to care about not modifying Turtle.java anymore
2021-01-07 20:24:40 +01:00

109 lines
2.8 KiB
Java

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
class Manager implements KeyListener
{
enum States
{
INTRO,
GAME
}
private final String USAGE =
"------------------------------\n" +
"Simple version of Flappy Bird\n" +
"Press SPACE to jump!\n" +
"------------------------------\n";
private final GameScreen _game;
private States _state;
public Manager()
{
Turtle turtle = new Turtle();
turtle.setzeGeschwindigkeit(10);
JFrame fieldValue = new JFrame();
// Modifying Turtle.java is forbidden so use reflection to get the JFrame and add
// a KeyListener lol
try
{
Field frameField = TurtleWelt.class.getDeclaredField("_frame");
frameField.setAccessible(true);
fieldValue = (JFrame) frameField.get(TurtleWelt.globaleWelt);
fieldValue.addKeyListener(this);
}
catch (Exception ex)
{
System.out.println("Reflection hack failed");
System.exit(-1);
}
System.out.print(USAGE);
IntroScreen intro = new IntroScreen();
_game = new GameScreen();
_state = States.INTRO;
long lastNanos, elapsed;
long total = 0;
lastNanos = System.nanoTime();
while (true)
{
elapsed = System.nanoTime() - lastNanos;
total += elapsed;
lastNanos = System.nanoTime();
switch (_state)
{
case GAME:
_game.update(elapsed * 1e-6d);
_game.draw(turtle, elapsed * 1e-6d);
break;
case INTRO:
intro.draw(turtle);
// Start game after 3 seconds
if (total > 3e9)
{
startGame();
}
break;
}
// Try to achieve approximately 60 FPS (1000ms / 60 FPS = 16.666ms)
int missingMs = (int)(16 - (System.nanoTime() - lastNanos) * 1e-6d);
if (missingMs > 0)
{
try
{
Thread.sleep(missingMs);
} catch (Exception e) {}
}
}
}
private void startGame()
{
_state = States.GAME;
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_SPACE)
{
_game.jump();
}
else if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
{
System.exit(0);
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}