Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROFESORES: Geo.Marcelo Cebollada y Verdague Ing. Esteban Papp ALUMNOS: ORTIZ, Javier Eduardo RUEDA, Alejandro Rene SOLER, Janet Alejandra
PROYECTO Aquinator
INDICE
1.
INTRODUCCION ........................................................................................................ 1 1.1 1.2 1.3 Objetivo Del Proyecto ....................................................................................... 1 Aspectos Importantes ....................................................................................... 1 Entregables Del Proyecto ................................................................................. 1
2.
MODELO DE TRABAJO ............................................................................................. 2 2.1 Modelo de Trabajo Utilizado .................................................................................. 2 2.2 Roles De Trabajo .................................................................................................... 3 2.3 Detalles de los Sprint Daily Meetings Ms Importantes ..................................... 3 2.3 Grfico Etapas De Trabajo ..................................................................................... 6
3. 4.
DOCUMENTO DE REQUERIMIENTOS ..................................................................... 7 UML LENGUAJE UNIFICADO DE MODELADO DEL PROYECTO ........................... 9 4.1 Diagrama de Paquetes ...................................................................................... 9
4.2 Diagrama De Clases ............................................................................................. 10 4.2.1 Diagrama de Clases De Clases de Package GUI ............................................ 10 4.2.2 Diagrama De Clases Package Jugador ........................................................... 11 4.2.3 Diagrama De Clases Package Objetos ............................................................ 12 4.2.4 Diagrama De Clases Package Recursos ......................................................... 13 4.2.5 Diagrama De Clases Package Compartido ...................................................... 14 4.2.6Diagrama de Clases Package Cerebro ............................................................. 15 4.3 Diagrama de Estados ........................................................................................... 16 4.3.1 Diagrama de Estados Cerebro ......................................................................... 16 4.3.2 Diagrama de Estados Para leer Mtodos ......................................................... 17 4.4 Diagrama De Secuencias ..................................................................................... 18 4.4.1 Diagrama de Secuencias Para Realizar Conexin .......................................... 18 4.4.2 Diagrama De Secuencias Para Mover un Jugador........................................... 19 4.5 Diagramas De Caso De Uso................................................................................. 20 4.5.1 Actor: Jugador ................................................................................................. 20 4.4.2 Diagrama Para Jugador ................................................................................... 20 4.5.3 Documentacin Diagrama Caso De Uso .......................................................... 21 5.1 CDIGO EN JAVA .................................................................................................... 23
5.1.2 Clase Cerebro.java .......................................................................................... 23 5.1.3 Clase Consola.java .......................................................................................... 26 5.1.4 ClaseEjecutorServidor.java .............................................................................. 27 5.1.5 ClaseEscritor.java ............................................................................................ 31 5.1.6 AuxLector.java ................................................................................................. 32 5.1.7BufferEventos.java ............................................................................................ 32 5.1.8 Datos Jugador.java .......................................................................................... 33 5.1.9 Lector.java ....................................................................................................... 34 5.1.10 Metodo.java ................................................................................................... 35 5.1.11 InterfazJugador.java ...................................................................................... 35 5.1.12 KeyListener.java ............................................................................................ 36 5.1.13 KeyListener.java ............................................................................................ 37 5.1.14 Ventana.java .................................................................................................. 39 5.1.15 Cliente.java .................................................................................................... 43 5.1.16 EscritorJugador.java ...................................................................................... 44 5.1.17 Jugador.java .................................................................................................. 44 5.1.18 Servidor.java ................................................................................................. 46 5.1.19 AutoJugador.java ........................................................................................... 48 5.1.20AutosLocos.java.............................................................................................. 49 5.1.21 Chocable.java ................................................................................................ 49 5.1.22 Comida.java ................................................................................................... 49 5.1.23 Fabrica.java ................................................................................................... 50 5.1.24 Manifestacion.java ........................................................................................ 51 5.1.25 ObjetosConImagen.java ................................................................................. 51 5.1.26 Objetos.java ................................................................................................... 52 5.1.27ObjetosInanimados.java.................................................................................. 52 5.1.28ObjetosInanimados.java.................................................................................. 53 5.1.29 Puente.java .................................................................................................... 53 5.1.30Ejecutor Cliente.java ....................................................................................... 54
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
1. INTRODUCCION
1.1 Objetivo Del Proyecto
Este trabajo tiene como finalidad poner en prctica lo aprendido durante el cursado de la asignatura Ingeniera Del Software. Esto se logra mediante el desarrollo de un producto de Software. Partiendo de la toma de requerimientos y siguiendo cada una de las etapas sistemticas que hacen al proyecto exitoso.
Programacin
Concurrente, por lo que los requerimientos en los cuales se bas el trabajo fueron dados por el Profesor de sta materia implementando as, los conceptos de concurrencia en Programacin Orientada a Objetos utilizando como lenguaje Java.
El trabajo cuenta con: - Documento de Requerimientos y Planificacin -Implementacin en Lenguaje Java - Anlisis de de los Casos de Concurrencia
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
2. MODELO DE TRABAJO
2.1 Modelo de Trabajo Utilizado Durante el trabajo se utiliz Scrum como metodologa para gestin y proceso de desarrollo del Software, el cual establece trabajo en Sprints en cada uno de estos se trat un tema en particular que hacan al avance del proyecto y mediante los cuales cada uno de nosotros se comprometa a realizar distintas actividades.
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 2.2 Roles De Trabajo Clientes: Product Owner
Es el encargado de administrar y dirigir el proyecto. Es capaz de determinar las Scrum Master reglas y pautas de trabajo y es responsable de que el equipo las cumpla.
Desarrolladores JAVA. Organizan el trabajo Team (equipo) y deben reportar la evolucin de cada tarea.
Utilizamos Scrum Dailys las cuales siempre se realizaron de manera personal con todos los integrantes del grupo presentes. Las reuniones no tuvieron ms de una hora de duracin.En las mismas cada uno se plante objetivos para la reunin siguiente y se plasmaron las tareas que se les exigi en la reunin anterior. Las Reuniones se realizaron con un intervalo de 2 o 3 por semana. Segn la necesidad y estado en la que se encontraba el proyecto. 3
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
Fecha de Reunin
Tema Tratado
Requerimientos 10/12/2010
proyecto en base a los requisitos de concurrencia que se deban cumplir indefectiblemente. Se establecieron los Roles de cada integrante en el proceso de desarrollo: -Lider de Proyecto -Lider Tcnico -Encargado de Testing Se pautaron las formas en cuanto al desarrollo de la Arquitectura del Trabajo, respetando siempre los requerimientos propuestos. Se definieron las herramientas de Desarrollo a utilizar entre las cuales estn: -Eclipse para el desarrollo del programa en JAVA -DropBox como herramienta de versionado y de backup - EnterPrice Architect para el desarrollo de Diagramas UML Se establecieron las clases ms importantes y
15/02/2011
Diagramar Clases
17/02/2011
Sockets
Se estudio las clases y mtodos con los que Java cuenta para la comunicacin de una 4
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC interfaz Cliente y una Servidor TCP-IP.
En esta etapa se llevo a cabo el desarrollo las funciones que hacen posible implementar la metodologa de juego.
En este Sprint se llevaron a cabo las pruebas de funcionamiento, que verificaron que el producto estaba siguiendo la Arquitectura planteada y cumpla con los requerimientos solicitados. Se definieron que nuevas fueron clases y nuevas para
funciones
necesarias
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 2.3 Grfico Etapas De Trabajo
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
3. DOCUMENTO DE REQUERIMIENTOS
-Referencias GUI MOT GEN RED Interfaz Grfica De Usuario Motor General Conexin
Nombre MOT0010
Estado Completado
Especificacin El Programa debe permitir al usuario elegir si jugar como Servidor o Cliente.
MOT0011
Completado
MOT0012
Completado
MOT0013
Completado
MOT0020
Completado
MOT0030
Completado
El hilo Jugador debe poder comunicarse de manera transparente con el hilo Cerebro. (Sin importar si la mquina corresponde a un servidor o un cliente). 7
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC MOT0040 Completado Los Jugadores envan Request a una cola del Cerebro y este les devuelve Response a una cola a los Jugadores.
MOT0050
Completado
Tanto el Cerebro como el Jugador deben poseer un Hilo revisor de Cola que se despierte cuando existan tareas para realizar.
MOT0010
Completado
El hilo Jugador debe generar un hilo que funcione como KeyListener -> Al presionar una tecla debe llamar a la funcin correspondiente moverArriba, etc) (moverDerecha, moverIzquierda,
RED0015
Completado
GEN0032
Completado
GEN0033
No implementado
GUI0009
Completado
GUI0010
Completado
Cada usuario puede ver como se desarrolla el juego de otros jugadores en su pantalla
GUI0011
Completado
GUI0012
No implementado
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
10
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.2.2 Diagrama De Clases Package Jugador
11
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.2.3 Diagrama De Clases Package Objetos
12
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.2.4 Diagrama De Clases Package Recursos
Imgenes
13
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.2.5 Diagrama De Clases Package Compartido
14
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.2.6Diagrama de Clases Package Cerebro
15
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.3 Diagrama de Estados 4.3.1 Diagrama de Estados Cerebro
16
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.3.2 Diagrama de Estados Para leer Mtodos
17
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.4 Diagrama De Secuencias 4.4.1 Diagrama de Secuencias Para Realizar Conexin
18
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.4.2 Diagrama De Secuencias Para Mover un Jugador
19
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.5 Diagramas De Caso De Uso 4.5.1 Actor: Jugador
20
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 4.5.3 Documentacin Diagrama Caso De Uso
Caso 1 Nombre Actor Descripcin Iniciar Juego Jugador El Jugador especifica su Rol ya sea como Cliente o como Servidor y adems establece el puerto por el cual la conexin es llevada a cabo Precondicin Secuencia Principal Ninguna 1- Se abre el Juego 2- Se establece en la GUI de inicio la condicin de Cliente o de Servidor 3- Se especifica el Puerto para establecer la conexin 4- Se inicia el Juego 5- El sistema muestra al Pantalla de Juego Errores Comentarios No
Caso 2 Nombre Actor Descripcin Mover Jugador Jugador Se le asigna un Auto jugador a cada participante el cual puede ser movido por los mismos mediante el teclado. Se deben recoger los elementos establecidos respetando las condiciones impuestas por el Juego. Precondicin Secuencia Principal Iniciar Partida 1- Se le asigna a cada Jugador un Auto Jugador 2- Cada Jugador mueve el auto mediante el teclado 3- Si su movimiento puede llevarse a cabo, el Sistema se lo indica Errores Comentarios No
21
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC Caso 3 Nombre Actor Descripcin Precondicin Secuencia Principal Finalizar Juego Jugador El Jugador termina su partida cuando cumple con el objetivo del Juego. Moverse- Juntar Elementos 1- El Jugador debe mover correctamente el Auto Jugador asignado 2- Se debe cumplir con el Objetivo propuesto 3- Cierra la Ventana de Juego Errores Comentarios No
22
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
import compartido.BufferEventos; import compartido.DatosJugador; //import objetos.Comida; import objetos.Fabrica; import objetos.Objeto; import objetos.ObjetosInanimados; public class Cerebro { private Escritor escritor; private BufferEventos bufferEventos; private EjecutorServidor ejecutor; private Map<String,Objeto> vectorObjetos; private Vector<Socket> vectorSockets; private Map<String,Integer> contadores; private Consola consola; private Map<String,DatosJugador> datos; public Cerebro (){ consola = new Consola (); bufferEventos=new BufferEventos(); // Buffer de Entrada desde los jugadores ("Sockets-Lectores" escriben) ejecutor = new EjecutorServidor(this); // Consumer del BufferEventos escritor=new Escritor(this); vectorSockets = new Vector <Socket>(); vectorObjetos=new HashMap<String,Objeto>(); datos= new HashMap<String,DatosJugador>(); contadores=new HashMap<String,Integer>(); contadores.put("AutoJugador", 0); contadores.put("Comida", 0); contadores.put("ObjetosInanimados", 0);
23
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
//PLAZAS vectorObjetos.put("plaza1",new ObjetosInanimados("plaza1",62,120,81,95)); vectorObjetos.put("plaza2",new ObjetosInanimados("plaza2",193,120,81,95)); vectorObjetos.put("plaza3",new ObjetosInanimados("plaza3",193,258,81,95)); vectorObjetos.put("plaza4",new ObjetosInanimados("plaza4",62,258,81,95)); //CASAS vectorObjetos.put("casa1",new ObjetosInanimados("casa1",54,28,229,70)); vectorObjetos.put("casa2",new ObjetosInanimados("casa2",54,404,94,72)); vectorObjetos.put("casa3",new ObjetosInanimados("casa3",194,404,94,72)); //AGUA //AGUA 1 vectorObjetos.put("agua1a",new ObjetosInanimados("agua1a",381,0,108,214)); vectorObjetos.put("agua1b",new ObjetosInanimados("agua1b",489,0,203,71)); //AGUA //AGUA 2 vectorObjetos.put("agua2a",new ObjetosInanimados("agua2a",381,245,106,286)); vectorObjetos.put("agua2b",new ObjetosInanimados("agua2a",485,405,490,409)); vectorObjetos.put("fab1",new Fabrica("fab1",640,187,21,25)); vectorObjetos.put("fab2",new Fabrica("fab2",643,335,21,25)); /***************************/ //Agregar Comida /***************************/ for (int i = 0; i< 10; i++) { ejecutor.agregarRandom("Comida",new String []{}); } consola.out("Carga finalizada"); consola.out("Listo"); } public Escritor getEscritor() { return escritor; } public BufferEventos getBufferEventos() { return bufferEventos; }
24
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
public synchronized Map<String, Objeto> getVectorObjetos() { return vectorObjetos; } public Vector<Socket> getVectorSockets() { return vectorSockets; } public Map<String, Integer> getContadores() { return contadores; } public Map<String, DatosJugador> getDatos() { return datos; } public synchronized EjecutorServidor getEjecutor() { return ejecutor; } public Integer getContador(String que){ contadores.put(que,contadores.get(que)+1); return contadores.get(que); } public void add(Socket socket) { vectorSockets.add(socket); } public Consola getConsola() { return consola; }
25
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.3 Clase Consola.java
package cerebro; import import import import javax.swing.*; java.awt.*; java.text.SimpleDateFormat; java.util.Date;
public class Consola extends JFrame { private static final long serialVersionUID = 1L; private JTextArea text_area; private JScrollPane scrollPanel; public Consola() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Panel principal = new Panel (); setTitle("Servidor v 1.3.1"); setSize(580,320); setLocationRelativeTo(null); text_area = new JTextArea(); text_area.setBackground(Color.BLACK); text_area.setForeground(Color.GREEN); scrollPanel = new JScrollPane(text_area); scrollPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_ NEEDED); text_area.setEditable(false); add(principal); principal.add(scrollPanel); principal.setLayout(new GridLayout()); setVisible(true); } public void out(String mensaje) { SimpleDateFormat formato = new SimpleDateFormat("H:mm:ss"); text_area.setText(text_area.getText()+formato.format(new Date(System.currentTimeMillis())) +" @Servidor: "+mensaje+"\n"); } }
26
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.4 ClaseEjecutorServidor.java
package cerebro; import java.awt.Point; import java.util.Iterator; import java.util.Map; import import import import compartido.DatosJugador; compartido.Metodo; objetos.AutoJugador; objetos.Objeto;
public class EjecutorServidor extends Thread { private Cerebro cerebro; private boolean yaChoco; private boolean seDebeMover; public EjecutorServidor(Cerebro cerebro) { this.cerebro = cerebro; } public void run () { while (true) //Consumidor { Metodo met = cerebro.getBufferEventos().getEvento(); try { // // this.getClass().getMethod(met.getQue(),String.class,String.class) .invoke(this, met.getQuien(),met.getArgs()[0]); //Constructor
this.getClass().getMethod(met.getQue(),String.class,String.class) .invoke(new EjecutorServidor(cerebro), met.getQuien(),met.getArgs()[0]); } catch (Exception e){e.printStackTrace();} } } //Quien: "Jugador1" //args: "Derecha" @SuppressWarnings("rawtypes") public void quererMover(String quien, String args) { yaChoco = false; seDebeMover=false; AutoJugador autoOriginal = (AutoJugador) cerebro.getVectorObjetos().get("AutoJugador"+quien);
27
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
AutoJugador autoTemp = new AutoJugador(); autoTemp.setBounds(autoOriginal.getBounds()); autoTemp.setNombre(autoOriginal.getNombre()); try { autoTemp.getClass().getMethod("mover"+args).invoke(autoTemp, new Object[]{}); } catch (Exception e1) {e1.printStackTrace();} AutoJugador elMismo = (AutoJugador)cerebro.getVectorObjetos().remove("AutoJugador"+quien); Iterator it = cerebro.getVectorObjetos().entrySet().iterator(); while(it.hasNext()&&!yaChoco){ Map.Entry e = (Map.Entry)it.next(); Objeto obj= (Objeto) e.getValue(); try { this.getClass().getMethod("choco_"+obj.intersects(autoTemp),String. class,Objeto.class) .invoke(this, new Object[]{"AutoJugador"+quien,obj}); } catch (Exception e1) {e1.printStackTrace();} } cerebro.getVectorObjetos().put("AutoJugador"+quien, elMismo); try { this.getClass().getMethod("mover_"+!seDebeMover,String.class,Point. class) .invoke(this,new Object[]{"AutoJugador"+quien,autoTemp.getLocation()}); } catch (Exception e) {e.printStackTrace();} } public void mover_true(String quien, Point nuevaUbicacion){ actualizarPosicion(quien, new String[]{ String.valueOf((int)nuevaUbicacion.getX()), String.valueOf((int)nuevaUbicacion.getY()), }); }; public void mover_false(String quien, Point nuevaUbicacion){ } public void choco_false (String quien, Objeto conQue){ } // quien: "autoJugadro1" public void choco_true (String quien, Objeto conQue){ seDebeMover = conQue.chocar(quien, cerebro);
28
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
yaChoco=true; } // Quien: "Manzana" // Args: "X","Y" public void agregarObjeto (String que, String[] args){ try { Objeto obj = (Objeto) Class.forName("objetos."+que).getConstructor().newInstance(); obj.setLocation(Integer.parseInt(args[0]), Integer.parseInt(args[1])); obj.setSize(Integer.parseInt(args[2]), Integer.parseInt(args[3])); String nombre = que+cerebro.getContador(que); obj.setNombre(nombre); cerebro.getVectorObjetos().put(nombre, obj); Metodo metTemp=new Metodo("objetos."+que,"agregarObjeto",new String[]{nombre,args[0],args[1],args[2],args[3]}); cerebro.getEscritor().sendAll(metTemp); } catch (Exception e) {e.printStackTrace();} } // Quien: "Manzana1" // Args = {} public void removerObjetos(String quien, String[] args){ cerebro.getVectorObjetos().remove(quien); cerebro.getEscritor().sendAll(new Metodo(quien,"removerObjetos",new String[]{})); } //Quien: "AutoJavi" //Args: "X","Y" public void actualizarPosicion(String quien, String[] args){ cerebro.getVectorObjetos().get(quien).setLocation(Integer.parseInt( args[0]), Integer.parseInt(args[1])); cerebro.getEscritor().sendAll(new Metodo(quien,"actualizarPosicion",new String[]{args[0],args[1]})); } public void setChoco(boolean b){ yaChoco = b; } @SuppressWarnings("rawtypes") public void clienteListo (String ID, String args) throws InterruptedException{ Iterator it = cerebro.getVectorObjetos().entrySet().iterator();
29
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
while(it.hasNext()){ Map.Entry e = (Map.Entry)it.next(); Objeto obj= (Objeto) e.getValue(); Metodo met = new Metodo(obj.getClass().getName(),"agregarObjeto",new String []{new String (obj.getNombre()),new String (Integer.toString((int)obj.getX())),new String (Integer.toString((int)obj.getY())),new String(Integer.toString((int) obj.getWidth())),new String (Integer.toString((int)obj.getHeight()))}); cerebro.getEscritor().send(met, Integer.parseInt(ID)); } it = cerebro.getDatos().entrySet().iterator(); while(it.hasNext()){ Map.Entry e = (Map.Entry)it.next(); DatosJugador dj = (DatosJugador) e.getValue(); Metodo met = new Metodo(String.valueOf(e.getKey()),"agregarDatos",new String[]{String.valueOf(dj.getCarga()),String.valueOf(dj.getPuntuacion()) }); cerebro.getEscritor().send(met, Integer.parseInt(ID)); } //cerebro.getEjecutor().agregarObjeto("AutoJugador", new String [] {"10","10","20","20"}); } }
30
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.5 ClaseEscritor.java
package cerebro; import import import import java.io.BufferedOutputStream; java.io.IOException; java.io.ObjectOutputStream; compartido.Metodo;
public class Escritor extends Thread { Cerebro cerebro; ObjectOutputStream out; public Escritor (Cerebro cerebro) { this.cerebro = cerebro; } public void sendAll (Metodo met) { for (int i=0; i <cerebro.getVectorSockets().size();i++) { send(met,i); } } public void send (Metodo met,int ID) { try { System.out.println("EscritorServidor enviando: Metodo: "+met.getQue()+" "+met.getQuien()); out = new ObjectOutputStream(new BufferedOutputStream(cerebro.getVectorSockets().get(ID).getOutputStream() )); out.writeObject(met); out.flush(); out.reset(); // int i = 50000; // while(i-->0); } catch (IOException e) { cerebro.getConsola().out("Cliente Descoectado: "+cerebro.getVectorSockets().get(ID).getInetAddress());; cerebro.getVectorSockets().remove(ID);} } }
31
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.6 AuxLector.java
/** * */ package compartido; /** * @author Javier * */ public class AuxLector extends Thread{ private BufferEventos out; private Metodo met; public AuxLector(BufferEventos out, Metodo met){ this.out=out; this.met=met; } public void run(){ out.addEvento(met); } }
5.1.7BufferEventos.java
package compartido; import java.util.Vector; public class BufferEventos { private Vector <Metodo>
eventos;
public BufferEventos () //Constructor { eventos = new Vector <Metodo>(); } public synchronized void addEvento (Metodo evento) { this.eventos.add(evento); notifyAll(); } public synchronized Metodo getEvento () { while (eventos.isEmpty()) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return eventos.remove(0); }
32
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.8 Datos Jugador.java
package compartido; public class DatosJugador { private int puntuacion; private int carga; /** * @param puntuacion * @param carga */ public DatosJugador(int puntuacion, int carga) { super(); this.puntuacion = puntuacion; this.carga = carga; } public int getPuntuacion() { return puntuacion; } public void setPuntuacion(int puntuacion) { this.puntuacion = puntuacion; } public int getCarga() { return carga; } public void setCarga(int carga) { this.carga = carga; } public void aumentarPuntuacion(int deMas){ puntuacion+=deMas; } public void vaciarCarga(){ carga=0; } public void aumentarCarga(){ carga++; } }
33
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.9 Lector.java
package compartido; import java.io.BufferedInputStream; import java.io.ObjectInputStream; import java.net.Socket; public class Lector extends Thread { private Socket socket; private boolean live; private BufferEventos out; private ObjectInputStream in; public Lector (Socket socket, BufferEventos out) { this.socket= socket; this.out = out; live = true; } public void run() { while (live) { try { in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); Metodo met = (Metodo)in.readObject(); System.out.println("Lector recibiendo: Metodo: "+met.getQue()+" "+met.getQuien()); out.addEvento(met); } catch (Exception ex) { System.out.println("Conexion Perdida"); kill(); } } } private void kill () { live = false; } }
34
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.10 Metodo.java
package compartido; import java.io.Serializable; public class Metodo implements Serializable { private static final long serialVersionUID = 1L; private String quien; private String que; private String[] args; public Metodo (String quien,String que,String[] args) { this.quien = quien; this.que = que; this.args = args; } public String getQuien() { return quien; } public String getQue() { return que; } public String[] getArgs() { return args; } }
5.1.11 InterfazJugador.java
package gui; import javax.swing.*; import jugador.Jugador; public class InterfazJugador extends JFrame { private static final long serialVersionUID = 1L; private int width = 900; private int height = 530; private Jugador jugador; public InterfazJugador (Jugador jugador) { this.jugador = jugador;
35
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
add(new Painter (this.jugador)); //add(new JPanel()); addKeyListener(new keyListener(this.jugador)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(width,height); setLocationRelativeTo(null); setTitle("Juego"); setResizable(false); setVisible(true); } }
5.1.12 KeyListener.java
package gui; import import import import import java.awt.event.KeyAdapter; java.awt.event.KeyEvent; java.util.HashMap; compartido.Metodo; jugador.Jugador;
public class keyListener extends KeyAdapter { private HashMap <Integer,String> map; private Jugador jugador; public keyListener (Jugador jugador) { this.jugador = jugador; map = new HashMap <Integer,String> (); map.put(KeyEvent.VK_DOWN, "Abajo"); map.put(KeyEvent.VK_UP, "Arriba"); map.put(KeyEvent.VK_LEFT, "Izquierda"); map.put(KeyEvent.VK_RIGHT, "Derecha"); } public void keyPressed(KeyEvent e){KeyPressed (e);} /****************************************************/ //Detecta que tecla se presiono //y se lo manda al Servidor /***************************************************/ private void KeyPressed(KeyEvent e) { try { jugador.getEscritor().escribir(new Metodo(String.valueOf(jugador.getID()+1),"quererMover",new String[]{map.get(e.getKeyCode())})); } catch (Exception e1) {e1.printStackTrace();}
36
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.13 KeyListener.java
package gui; import import import import import import import import import java.awt.Color; java.awt.Font; java.awt.Graphics; java.awt.Graphics2D; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.util.Iterator; java.util.Map; javax.swing.*;
import compartido.DatosJugador; import objetos.ObjConImagen; import recursos.Recursos; import jugador.Jugador; public class Painter extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private Timer time; private Recursos recurso; private Font font; Jugador jugador; private Timer timer2 ; public Painter (Jugador jugador) { this.jugador = jugador; recurso = new Recursos (); setDoubleBuffered(true); setTimer(20); timer2 = new Timer (3000,new ActionListener(){public void actionPerformed(ActionEvent arg0) {time.start();timer2.stop();}}); timer2.start(); } @SuppressWarnings("rawtypes") public void paint (Graphics g) { Graphics2D grid = (Graphics2D) g; font = new Font("Arial", Font.BOLD grid.setFont(font);
, 15);
37
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
/****************************************************/ //Aca se recorre el vector de Objetos a ser pintados// /****************************************************/ Iterator it = jugador.getVectorObjetos().entrySet().iterator(); while (it.hasNext()) { try { Map.Entry e = (Map.Entry)it.next(); ObjConImagen obj= (ObjConImagen) e.getValue(); grid.drawImage(recurso.getRecurso(obj.getClass().getName()), (int)obj.getX(),(int)obj.getY(), this);} catch (Exception e2) {} } /****************************************************/ //Aca se recorre el vector de Datos// /****************************************************/ int pos = 40; it = jugador.getDatos().entrySet().iterator(); while (it.hasNext()) { grid.setColor(new Color (138, pos, 200)); try { Map.Entry e = (Map.Entry)it.next(); DatosJugador obj= (DatosJugador) e.getValue(); grid.drawString("Carga: "+obj.getCarga(),700 ,pos); grid.drawString("Puntuacion: "+obj.getPuntuacion(),700 ,pos+10); } catch (Exception e2) {} pos = pos + 40; } } public void actionPerformed(ActionEvent arg0) {repaint();} public void setTimer(int time) {this.time = new Timer (time,this);} }
38
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.14 Ventana.java
package gui; import import import import import import import import import import import import java.awt.Color; java.awt.Font; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.lang.reflect.InvocationTargetException; javax.swing.ButtonGroup; javax.swing.JButton; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.JRadioButton; javax.swing.JTextField;
import cerebro.Servidor; import jugador.Cliente; public class Ventana extends JFrame { private private private private static final long serialVersionUID = 1L; int width = 210; int height = 195; String ser;
JTextField direccion; JTextField puerto; JLabel direccion_label; JLabel mensaje; public Ventana () { ser = "serServer"; setea a Server
/*******************************/ //Configuraciones de la Ventana /*******************************/ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setFocusable(true); setSize(width, height); setResizable(false); setTitle("[CONSOFT] v1.3"); setLocationRelativeTo(null); JPanel principal = new JPanel(); Color color = new Color (194, 218, 252); principal.setBackground(color); /**********************************/ //Componentes que van sobre el panel /**********************************/
39
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
direccion_label = new JLabel ("Direccion:"); direccion_label.setEnabled(false); direccion_label.setBounds(10,50,100,25); JLabel puerto_label = new JLabel ("Puerto:"); puerto_label.setBounds(10,80,100,25); mensaje = new JLabel (); mensaje.setBounds(10,140,200,25); direccion = new JTextField ("127.0.0.1"); //Campo de Texto direccion.setToolTipText("Ejemplo: 127.0.0.1"); direccion.setEnabled(false); direccion.setBounds(115, 50, 80, 20); puerto = new JTextField ("1234");//Campo de Texto puerto.setToolTipText("Ejemplo: 8080"); puerto.setBounds(115, 80, 80, 20);
JRadioButton servidor = new JRadioButton ("Servidor"); servidor.setBackground(color); servidor.setBounds(10, 10, 80, 25); servidor.setSelected(true); JRadioButton cliente = new JRadioButton ("Cliente"); cliente.setBackground(color); cliente.setBounds(110,10, 80, 25); ButtonGroup grupo = new ButtonGroup(); // Agrupa los RadioButton, hace que sean excluyentes grupo.add (servidor); grupo.add (cliente); JButton button_jugar = new JButton("Jugar"); button_jugar.setBounds(10, 110, 80, 25); JButton button_salir = new JButton("Salir"); button_salir.setBounds(115, 110, 80, 25);
principal.setLayout(null); /***********************************************************/ //Acciones (Boton Jugar,Salir RadioButton Cliente, Servidor) /*********************************************************/ servidor.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) {
40
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
ser = "serServer"; direccion.setEnabled(false); direccion.setText("127.0.0.1"); direccion_label.setEnabled(false); }}); cliente.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { ser = "serCliente"; direccion.setText("127.0.0.1"); direccion.setEnabled(true); direccion_label.setEnabled(true); }}); button_jugar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { comprobar_campos(); } }); button_salir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0){salir ();} }); /***********************************************************/ //Agrego todos los objetos al Panel /*********************************************************/ principal.add(servidor); //RadioButton principal.add(cliente); //RadioButton principal.add(button_jugar); //Boton principal.add(button_salir); //Boton principal.add(direccion); //Campo de Texto principal.add(puerto); //Campo de Texto principal.add(direccion_label); //Texto:direccion principal.add(puerto_label); //Texto:puerto principal.add(mensaje); //Texto:puerto add(principal); setVisible(true); }
41
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
try {this.getClass().getMethod("jugar_"+(!(puerto.getText().isEmpty())&&!(dir eccion.getText().isEmpty()))).invoke(this, new Object[]{});} catch (Exception e) {} } public void jugar_false () { Font font = new Font ("ITALIC",10,10); mensaje.setFont(font); mensaje.setText("Debe Completar los campos necesarios"); } public void jugar_true () { try { this.getClass().getMethod(getSer()).invoke(this, new Object[0]); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.dispose(); } public void salir () { System.exit(0); } public void serCliente () throws Exception { new Cliente (direccion.getText(),Integer.parseInt(puerto.getText())); } public void serServer() throws Exception { Servidor serv; serv = new Servidor (Integer.parseInt(puerto.getText())); serv.start(); new Cliente ("localhost",Integer.parseInt(puerto.getText())); }
42
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
/************************************/ //Hilo Principal /***********************************/ public static void main(String[] args) { new Ventana (); } }
5.1.15 Cliente.java
package jugador; import gui.InterfazJugador; import java.net.Socket; import compartido.Lector; public class Cliente { private Socket socket; private Jugador jug; public Cliente(String direccion, int puerto) { System.out.println("Intentar conectar con:"); System.out.println("Servidor: "+direccion); System.out.println("Puerto : "+puerto); try { socket = new Socket (direccion,puerto); System.out.println("Conectado exito"); jug = new Jugador (); jug.setSocket(socket); new Lector(socket,jug.getBufferEventos()).start(); new InterfazJugador(jug); new EjecutorCliente (jug).start(); } catch (Exception e) {e.printStackTrace();System.out.println("No se puedo conectar");}; } public Jugador getJugador() { return jug; } }
43
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.16 EscritorJugador.java
package jugador; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import compartido.Metodo; public class EscritorJugador { Jugador jugador; public EscritorJugador (Jugador jugador) { this.jugador = jugador; } public void escribir (Metodo met) { System.out.println("Escritor Jugador enviando: Metodo: "+met.getQue()+" "+met.getQuien()); ObjectOutputStream out; try { out = new ObjectOutputStream(new BufferedOutputStream(jugador.getSocket().getOutputStream())); out.writeObject(met); out.flush(); } catch (IOException e) {e.printStackTrace();}
} }
5.1.17 Jugador.java
package jugador; import java.net.Socket; import java.util.HashMap; import java.util.Map; import compartido.BufferEventos; import compartido.DatosJugador; import objetos.Objeto; public class Jugador {
44
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
private Integer ID; private BufferEventos bufferEventos; private HashMap<String,Objeto> vectorObjetos; private Socket socket; private EscritorJugador escritor; private Map<String, DatosJugador> datos; // Agregar KeyListener public Jugador() { bufferEventos = new BufferEventos(); vectorObjetos = new HashMap <String,Objeto> (); escritor= new EscritorJugador (this); datos = new HashMap<String,DatosJugador>(); } public BufferEventos getBufferEventos() { return bufferEventos; } public synchronized HashMap<String, Objeto> getVectorObjetos() { return vectorObjetos; } /** * @param iD the iD to set */ public void setID(Integer iD) { ID = iD; } /** * @return the iD */ public Integer getID() { return ID; } public void setSocket(Socket socket) { this.socket = socket; } public Socket getSocket() { return socket; } public EscritorJugador getEscritor() { return escritor; } public Map<String, DatosJugador> getDatos() { return datos; } }
45
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.18 Servidor.java
package cerebro; import import import import import import import import import import java.io.BufferedOutputStream; java.io.ObjectOutputStream; java.net.ServerSocket; java.net.Socket; java.util.Iterator; java.util.Map; objetos.Objeto; compartido.DatosJugador; compartido.Lector; compartido.Metodo; extends Thread
Socket socket; ServerSocket conexion; Cerebro cerebro; int puerto; int ID;
public Servidor (int puerto) throws Exception { cerebro = new Cerebro (); ID=0; this.puerto = puerto; } @SuppressWarnings("rawtypes") public void run () { try { conexion = new ServerSocket(puerto); while (true) { socket=conexion.accept(); cerebro.add(socket); new Lector (socket, cerebro.getBufferEventos()).start(); ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); out.writeObject(new Metodo (Integer.toString(ID++),"setID",new String[]{})); out.flush(); cerebro.getDatos().put("AutoJugador"+Integer.toString(ID), new DatosJugador(0, 0)); new EjecutorServidor(cerebro).start(); cerebro.getConsola().out("Nueva Conexion: "+socket.getInetAddress());
46
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
cerebro.getEjecutor().agregarObjeto("AutoJugador", new String [] {"10","10","20","20"}); Iterator it = cerebro.getVectorObjetos().entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry)it.next(); Objeto obj= (Objeto) e.getValue(); out = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); Metodo met = new Metodo(obj.getClass().getName(),"agregarObjeto",new String []{new String (obj.getNombre()),new String (Integer.toString((int)obj.getX())),new String (Integer.toString((int)obj.getY())),new String(Integer.toString((int) obj.getWidth())),new String (Integer.toString((int)obj.getHeight()))}); out.writeObject(met); out.flush(); out.reset(); sleep(100); } it = cerebro.getDatos().entrySet().iterator(); while(it.hasNext()){ Map.Entry e = (Map.Entry)it.next(); DatosJugador dj = (DatosJugador) e.getValue(); out = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); Metodo met = new Metodo(String.valueOf(e.getKey()),"agregarDatos",new String[]{String.valueOf(dj.getPuntuacion()),String.valueOf(dj.getCarga()) }); out.writeObject(met); out.flush(); out.reset(); sleep(100); } } } catch (Exception e) {e.printStackTrace();} } }
47
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
5.1.19 AutoJugador.java
package objetos; import java.awt.Point; import compartido.Metodo; import cerebro.Cerebro; @SuppressWarnings("serial") public class AutoJugador extends ObjConImagen { public AutoJugador(){ } /*****************/ //Funciones MOVER// /*****************/ public void moverDerecha () { this.setLocation(new Point ((int)this.getX()+5,(int)this.getY())); } public void moverArriba () { this.setLocation(new Point ((int)this.getX(),(int)this.getY()-5)); } public void moverAbajo () { this.setLocation(new Point ((int)this.getX(),(int)this.getY()+5)); } public void moverIzquierda () { this.setLocation(new Point ((int)this.getX()5,(int)this.getY())); } /****************************************************************** *****/ public boolean chocar(String nombreObjeto, Cerebro cerebro) { cerebro.getDatos().get(this.getNombre()).vaciarCarga(); cerebro.getEscritor().sendAll(new Metodo(this.getNombre(),"actualizarCarga", new String[]{"0"}));
48
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
return true; }
5.1.20AutosLocos.java
package objetos; import cerebro.Cerebro; public class AutosLocos extends ObjConImagen { private static final long serialVersionUID = 1L; public AutosLocos () { this.setSize(20,20); } public boolean chocar(String nombreObjeto, Cerebro cerebro) { return true; } }
5.1.21 Chocable.java
package objetos; import cerebro.Cerebro; public interface Chocable { public boolean chocar(String nombreObjeto, Cerebro cerebro); }
5.1.22 Comida.java
package objetos; import compartido.Metodo; import cerebro.Cerebro; public class Comida extends ObjConImagen { private static final long serialVersionUID = 1L; public Comida ()
49
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
{ } public Comida(String nombre,int x, int y, int width, int height) { this.setNombre(nombre); this.x = x; this.y = y; this.width = width; this.height = height; } public boolean chocar(String nombreObjeto, Cerebro cerebro) { cerebro.getEjecutor().removerObjetos(this.getNombre(), new String[]{}); cerebro.getDatos().get(nombreObjeto).aumentarCarga(); cerebro.getEscritor().sendAll(new Metodo(nombreObjeto,"actualizarCarga", new String[]{String.valueOf(cerebro.getDatos().get(nombreObjeto).getCarga())} )); return false; } }
5.1.23 Fabrica.java
package objetos; import compartido.Metodo; import cerebro.Cerebro; public class Fabrica extends ObjSinImagen { private static final long serialVersionUID = 1L; public Fabrica() { // TODO Auto-generated constructor stub } public Fabrica(String nombre,int x, int y, int width, int height) { this.setNombre(nombre); this.x = x; this.y = y; this.width = width; this.height = height; } public boolean chocar(String nombreObjeto, Cerebro cerebro) { cerebro.getDatos().get(nombreObjeto).aumentarPuntuacion(cerebro.get Datos().get(nombreObjeto).getCarga()); cerebro.getDatos().get(nombreObjeto).vaciarCarga();
50
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
cerebro.getEscritor().sendAll(new Metodo(nombreObjeto,"actualizarPuntuacion", new String[]{String.valueOf(cerebro.getDatos().get(nombreObjeto).getPuntuacio n())})); cerebro.getEscritor().sendAll(new Metodo(nombreObjeto,"actualizarCarga", new String[]{"0"})); return true; } }
5.1.24 Manifestacion.java
package objetos; import cerebro.Cerebro; public class Manifestacion extends ObjSinImagen { private static final long serialVersionUID = 1L; public boolean chocar(String nombreObjeto, Cerebro cerebro) { return true; } }
5.1.25 ObjetosConImagen.java
package objetos; import java.awt.Image; public abstract class ObjConImagen extends Objeto { private static final long serialVersionUID = 1L; private Image imagen; public Image getImagen() { return imagen; } public void setImagen(Image imagen) { this.imagen = imagen; }
51
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
public void setImagen(String nombreImage){}//acepta imagen con el nombre
5.1.26 Objetos.java
package objetos; import java.awt.Rectangle; public abstract class Objeto extends Rectangle implements Chocable { private String nombre; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } private static final long serialVersionUID = 1L; }
5.1.27ObjetosInanimados.java
package objetos; import cerebro.Cerebro; public class ObjetosInanimados extends ObjSinImagen {
public ObjetosInanimados () { } public ObjetosInanimados (String nombre,int x,int y, int width,int height) { this.setNombre(nombre); this.x = x; this.y = y;
52
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
this.width = width; this.height = height; } private static final long serialVersionUID = 1L; public boolean chocar(String nombreObjeto, Cerebro cerebro) { //System.out.println("Choco con Objeto Inanimado"); return true; }
5.1.28ObjetosInanimados.java
package objetos; public abstract class ObjSinImagen extends Objeto { private static final long serialVersionUID = 1L; }
5.1.29 Puente.java
package objetos; import cerebro.Cerebro; public class Puente extends ObjSinImagen { private static final long serialVersionUID = 1L; public boolean chocar(String nombreObjeto, Cerebro cerebro) { return false; }
53
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC 5.1.30Ejecutor Cliente.java
package jugador; import objetos.Objeto; import compartido.DatosJugador; import compartido.Metodo; public class EjecutorCliente extends Thread { private Jugador jugador; public EjecutorCliente(Jugador jugador) { this.jugador = jugador; } public void run () { while (true) { Metodo met = jugador.getBufferEventos().getEvento(); try { this.getClass().getMethod(met.getQue(),String.class,String[].class) .invoke(this, new Object[]{met.getQuien(),met.getArgs()}); } catch (Exception e){ e.printStackTrace(); } } } public void setID (String quien, String[] args) throws InterruptedException{ jugador.setID(Integer.parseInt(quien)); } // Quien: "Comida" // Args: "Nombre","X","Y","Ancho","Largo" public void agregarObjeto (String quien, String[] args){ try { Objeto obj = (Objeto) Class.forName(quien).getConstructor().newInstance(); obj.setLocation(Integer.parseInt(args[1]), Integer.parseInt(args[2])); obj.setSize(Integer.parseInt(args[3]), Integer.parseInt(args[4])); jugador.getVectorObjetos().put(args[0], obj);
54
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
} catch (Exception e) {e.printStackTrace();} } // Quien: "Manzana1" // Args = {} public void removerObjetos(String quien, String[] args){ jugador.getVectorObjetos().remove(quien); } //Quien: "AutoJugador1" //Args: "X","Y" public void actualizarPosicion(String quien, String[] args){ try{ jugador.getVectorObjetos().get(quien).setLocation(Integer.parseInt( args[0]), Integer.parseInt(args[1])); } catch(Exception e){e.printStackTrace();} } public void actualizarCarga(String quien, String[] args){ //System.out.println(args[0]); //System.out.println(jugador.getDatos().get(quien)); jugador.getDatos().get(quien).setCarga(Integer.parseInt(args[0])); System.out.println("Carga: "+jugador.getDatos().get(quien).getCarga()); System.out.println("Puntuacion: "+jugador.getDatos().get(quien).getPuntuacion()); } public void actualizarPuntuacion(String quien, String[] args){ jugador.getDatos().get(quien).setPuntuacion(Integer.parseInt(args[0 ])); System.out.println("Carga: "+jugador.getDatos().get(quien).getCarga()); System.out.println("Puntuacion: "+jugador.getDatos().get(quien).getPuntuacion()); } public void agregarDatos(String quien, String[] args){ jugador.getDatos().put(quien, new DatosJugador(Integer.parseInt(args[0]),Integer.parseInt(args[1]))); } // Actualizar Puntuacion // Actualizar Target }
55
Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC
56