package gametemplate; import javax.swing.JPanel; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class GamePanel extends JPanel { private GameApplet ga; private Game game; private boolean paused=true; AnimationThread thread; //the time in miliseconds between every repaint. private int sleeptime=40; public GamePanel(Game g){ game=g; addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e){ game.mousePressed(e); } public void mouseClicked(MouseEvent e){ game.mouseClicked(e); } public void mouseReleased(MouseEvent e){ game.mouseReleased(e); } public void mouseEntered(MouseEvent e){ game.mouseEntered(e); } public void mouseExited(MouseEvent e){ game.mouseExited(e); } }); addKeyListener( new KeyAdapter( ) { public void keyPressed(KeyEvent e){ game.keyPressed(e); } public void keyTyped(KeyEvent e){ game.keyTyped(e); } public void keyReleased(KeyEvent e){ game.keyReleased(e); } }); } public void setPause(boolean p){ paused=p; } public void start(){ thread= new AnimationThread(this); thread.start(); } public void setSleepTime(int ms){ sleeptime=ms; } public void stop(){ game.stop(); } public boolean isPaused(){ return paused; } public void paint(Graphics g){ //Fills everything with background color. //You might want to skip this part if you do not need to clear the panel every frame //To do this, add an abstract method to Game, called "public boolean clearPanel()" that //will tell whether the panel should be cleared. Color c=game.getBackgroundColor(); if(c!=null){ g.setColor(c); g.fillRect(0,0,getWidth(), getHeight()); } game.paint(g); } class AnimationThread extends Thread { private GamePanel gp; AnimationThread(GamePanel g) { gp=g; } public void run() { while(true){ try{ sleep(sleeptime); } catch (Exception e){ e.printStackTrace(System.err); } if(!gp.isPaused()) gp.repaint(); } } } }