import java.awt.*; import java.awt.event.*; import java.util.Date; import physics2D.*; class SpaceBattle extends Frame implements KeyListener, MouseListener, WindowListener { public static void main(String[] args) { SpaceBattle sb = new SpaceBattle(); } // -------------------------------------------------------------------------------- // Data Members // -------------------------------------------------------------------------------- private Space space; private Insets insets; private int windowWidth = 800, windowHeight = 600, increment = 100, maxIncrement = 100, gameWidth, gameHeight; private boolean loop; private Graphics2D graphics2D; private Date startTime, endTime; // -------------------------------------------------------------------------------- // Constructor // -------------------------------------------------------------------------------- public SpaceBattle() { // call parent constructor super("SpaceBattle v0.000000001"); // set frame properties insets = getInsets(); gameWidth = windowWidth - insets.left - insets.right; gameHeight = windowHeight - insets.top - insets.bottom; setSize(windowWidth, windowHeight); setResizable(false); Toolkit toolkit = Toolkit.getDefaultToolkit(); int xLocation = (toolkit.getScreenSize().width - windowWidth) / 2; int yLocation = (toolkit.getScreenSize().height - windowHeight) / 2; setLocation(xLocation,yLocation); setBackground(Color.black); show(); graphics2D = (Graphics2D) getGraphics(); validate(); reset(); // regester this frame as its own key and window listener addWindowListener(this); addKeyListener(this); // start infinate loop startTime = new Date(); run(); } // -------------------------------------------------------------------------------- // Methods // -------------------------------------------------------------------------------- public void run() { loop = true; while (true) while (loop) { space.advanceTime(increment); graphics2D.drawImage(space.getImage(), insets.left, insets.top, this); endTime = new Date(); System.out.println(increment + " " + (int) (endTime.getTime() - startTime.getTime())); increment = (int) (increment + endTime.getTime() - startTime.getTime()) / 2; if (increment > maxIncrement) { increment = maxIncrement; } startTime.setTime(endTime.getTime()); } } private void reset() { space = new Space(gameWidth, gameHeight, createImage(gameWidth, gameHeight)); } // implementation of mouse listener public void mouseClicked(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mousePressed(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} // implementation of key listener public void keyTyped(KeyEvent event) {} public void keyReleased(KeyEvent event) { if (event.getKeyCode() == KeyEvent.VK_UP) { space.getUserShip().thrusterOff(); } else if (event.getKeyCode() == KeyEvent.VK_LEFT || event.getKeyCode() == KeyEvent.VK_RIGHT || event.getKeyCode() == KeyEvent.VK_DOWN) { space.getUserShip().stopTurn(); } else if (event.getKeyCode() == KeyEvent.VK_SPACE || event.getKeyCode() == KeyEvent.VK_F3) { if (loop == false) loop = true; } else if (event.getKeyCode() == KeyEvent.VK_P) { loop = false; } else if (event.getKeyCode() == KeyEvent.VK_F2) { reset(); } } public void keyPressed(KeyEvent event) { if (event.getKeyCode() == KeyEvent.VK_UP) { space.getUserShip().thrusterOn(); } else if (event.getKeyCode() == KeyEvent.VK_LEFT) { space.getUserShip().turnLeft(); } else if (event.getKeyCode() == KeyEvent.VK_RIGHT) { space.getUserShip().turnRight(); } } // implementation of window listener to activate close button public void windowClosing(WindowEvent event) { loop = false; dispose(); System.exit(0); } public void windowActivated(WindowEvent event) {} public void windowClosed(WindowEvent event) {} public void windowDeactivated(WindowEvent event) {} public void windowDeiconified(WindowEvent event) {} public void windowIconified(WindowEvent event) {} public void windowOpened(WindowEvent event) {} }