Antes de iniciar esto, recuerden que hacer un UML en netbeans tiene sus ventajas, como por ejemplo si le dan anticlic (clic derecho) al proyecto le sale una opción generar código, apuntan a un proyecto e insertan automáticamente el esqueleto de las clases
A pedido de Andrew (En su código ^_^) le pongo un enlace a su libro… Recuerden que esto es una versión beta del libro, la versión final esta impresa y esta muy barata, compren la
Ahora si, la clase WormChase, no usaremos el Java 3D timer, por lo tanto primero declaramos las variables globales:
private static int DEFAULT_FPS = 80; private WormPanel wp; // Donde se dibuja el gusano private JTextField jtfBox; // muesra el numero de cajas usadas private JTextField jtfTime; // muestra el tiempo usado en el juego
Ahora viene el constructor
public WormChase(int period) { super("The Worm Chase"); makeGUI(period);// Creamos la pantalla addWindowListener(this);//por aca escucha todos los eventos de pantalla pack();//auto regula el tamaño de la pantalla setResizable(false); setVisible(true); } // fin de el constructor WormChase()
ahora una función que hace la pantalla
private void makeGUI(int period) { Container c = getContentPane(); // BorderLayout usado por defecto wp = new WormPanel(this, period);// nuevo objeto WormPanel c.add(wp, "Center"); JPanel ctrls = new JPanel(); // una fila de campos ctrls.setLayout( new BoxLayout(ctrls, BoxLayout.X_AXIS));//http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html jtfBox = new JTextField("Cajas usadas: 0");//caja de texto jtfBox.setEditable(false); ctrls.add(jtfBox);// la agrega jtfTime = new JTextField("Tiempo usado: 0 secs"); jtfTime.setEditable(false); ctrls.add(jtfTime); c.add(ctrls, "South");// agrega el boxlayout al container } // fin de makeGUI()
Si queremos modificar el texto de las cajas usamos dos funciones
public void setBoxNumber (int no) { jtfBox.setText("Boxes used: " + no); } public void setTimeSpent (long t) { jtfTime.setText("Time Spent: " + t + " secs"); }
setBoxNumber es una función utilizada por el objeto Obstacles cuando se crea una nueva caja
Ahora la función principal
public static void main(String args[]) { int fps = DEFAULT_FPS; if (args.length != 0)//lee de la linea de comandos fps = Integer.parseInt(args[0]); int period = (int) 1000.0/fps; System.out.println("fps: " + fps + "; period: " + period + " ms"); new WormChase(period); // pasamos el tiempo }
Las funciones que quedan son para la pausa, reanudación y fin del juego, y seran manejado por WindowListener
public void windowOpened (WindowEvent e) { } public void windowIconified(WindowEvent e) { wp.pauseGame(); } public void windowDeiconified(WindowEvent e) { wp.resumeGame(); } public void windowDeactivated(WindowEvent e) { wp.pauseGame(); } public void windowClosing(WindowEvent e) { wp.stopGame(); } public void windowClosed (WindowEvent e) { } public void windowActivated(WindowEvent e) { wp.resumeGame(); }