Commit 7e825443 authored by nargessalehi98's avatar nargessalehi98

Add GameLoop class

parent daec45a6
/*** In The Name of Allah ***/
/**
* A very simple structure for the main game loop.
* THIS IS NOT PERFECT, but works for most situations.
* Note that to make this work, none of the 2 methods
* in the while loop (update() and render()) should be
* long running! Both must execute very quickly, without
* any waiting and blocking!
*
* Detailed discussion on different game loop design
* patterns is available in the following link:
* http://gameprogrammingpatterns.com/game-loop.html
*
* @author Seyed Mohammad Ghaffarian
*/
public class GameLoop implements Runnable {
/**
* Frame Per Second.
* Higher is better, but any value above 24 is fine.
*/
public static final int FPS = 30;
private GameFrame canvas;
private GameState state;
public GameLoop(GameFrame frame) {
canvas = frame;
}
/**
* This must be called before the game loop starts.
*/
public void init() {
state = new GameState();
canvas.addKeyListener(state.getKeyListener());
canvas.addMouseListener(state.getMouseListener());
canvas.addMouseMotionListener(state.getMouseMotionListener());
}
@Override
public void run() {
boolean gameOver = false;
while (!gameOver) {
try {
long start = System.currentTimeMillis();
//
state.update();
canvas.render(state);
gameOver = state.gameOver;
//
long delay = (1000 / FPS) - (System.currentTimeMillis() - start);
if (delay > 0)
Thread.sleep(delay);
} catch (InterruptedException ex) {
}
}
canvas.render(state);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment