import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import java.lang.*; /** * Clase encargada de inicializar y mostrar la ventana grafica del programa cliente, * configura la barra de menu, atiende eventos de barra de menu, atiende eventos * de mouse y teclado. (Incompleto aun) * */ public class ClientFrame extends JFrame implements ActionListener { /** * Encargado de manejar la conexion al servidor. */ private Connection conn; /** * (uso interno) */ private Container contentPane; /** * Barra de menu. */ private JMenuBar menuBar; private Panel panel; /** * Identificador del jugador, para que los jugadores sea claramente distinguibles. */ private int myID = 0; /** * Inicializa la ventana grafica, crea la estructura de menus. */ public ClientFrame() { setTitle("KaBoom"); setResizable(false); setSize(800, 600); menuBar = new JMenuBar(); JMenu menuJuego = new JMenu("Juego"); menuBar.add(menuJuego); JMenuItem menuJuegoConectar = new JMenuItem("Conectar a"); menuJuego.add(menuJuegoConectar); menuJuegoConectar.addActionListener(this); JMenuItem menuJuegoSalir = new JMenuItem("Salir"); menuJuego.add(menuJuegoSalir); menuJuegoSalir.addActionListener(this); setJMenuBar(menuBar); panel = new Panel(); contentPane = getContentPane(); contentPane.add(panel); //menuPanel.buildMainMenu(); contentPane.validate(); setVisible(true); conn = new Connection(); } /** * Atiende eventos de la barra de menu. (Incompleto aun) por ahora contiene tambien * una secuencia de comandos de prueba que son enviados al servidor. * @param e (uso interno) */ public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); String data; ArrayList _data; if(cmd.equals("Conectar a")) { String servAddr = JOptionPane.showInputDialog("Ingrese direccion del servidor", "192.168.0.150"); String _port = JOptionPane.showInputDialog("Ingrese puerto", "10000"); int port = Integer.parseInt(_port); String err = conn.connect(servAddr, port); if (!err.equals("success")) { JOptionPane.showMessageDialog(this, "No se pudo establecer la conexion", "Error de conexion", JOptionPane.ERROR_MESSAGE); return; } else if (err.equals("wrongserver")) { JOptionPane.showMessageDialog(this, "No es un servidor de KaBoom", "Error de servidor", JOptionPane.ERROR_MESSAGE); return; } data = conn.recv(true); myID = Integer.parseInt(data); System.out.println("myId = " + myID); _data = new ArrayList(); data = conn.recv(true); while (!data.equals("END_MAP")) { _data.add(new String(data)); data = conn.recv(true); } //panel.createMap(_data); _data = new ArrayList(); data = conn.recv(true); while (!data.equals("END_WARRIOR")) { _data.add(new String(data)); data = conn.recv(true); } panel.initWarriors(_data); System.out.println("initWarriors"); panel.repaint(); data = conn.recv(true); while (!data.equals("END_GAME")) { //panel.startClock(60); if (Integer.parseInt(data) == myID) { //mi turno try { Thread.sleep(3000); conn.send("move " + myID + " r"); panel.doCmd("move " + myID + " r"); panel.repaint(); contentPane.validate(); repaint(); Thread.sleep(3000); conn.send("move " + myID + " r"); panel.doCmd("move " + myID + " r"); panel.repaint(); validate(); repaint(); Thread.sleep(3000); conn.send("END_GAME"); System.exit(0); } catch (InterruptedException ei) { System.out.println("sleep error"); System.exit(-1); } } else { //turno ajeno data = conn.recv(true); System.out.println("recibido: " + data); while (!data.equals("END_TURN")) { panel.doCmd(data); panel.repaint(); contentPane.validate(); repaint(); data = conn.recv(true); System.out.println("recivido: " + data); } } } return; } else if (cmd.equals("Salir")) { System.exit(0); } } }