110 lines
2.8 KiB
Java
110 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) {}
|
|
}
|