Está en la página 1de 60

UNIVERSIDAD NACIONAL DE CORDOBA FACULTAD DE CIENCIAS EXACTAS, FSICAS Y NATURALES

Ingeniera Del Software Trabajo Final

PROFESORES: Geo.Marcelo Cebollada y Verdague Ing. Esteban Papp ALUMNOS: ORTIZ, Javier Eduardo RUEDA, Alejandro Rene SOLER, Janet Alejandra

Crdoba Febrero de 2011

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.

1.2 Aspectos Importantes

El proyecto es realizado en conjunto con la Asignatura

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.

1.3 Entregables Del Proyecto

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

-Geo.Marcelo Cebollada -Ing. Orlando Micolinni Javier Ortiz

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.

Alejandro Rueda- Javier Ortiz- Janet Soler

Desarrolladores JAVA. Organizan el trabajo Team (equipo) y deben reportar la evolucin de cada tarea.

Personas relacionadas con el proyecto pero no de una manera directa StakeHolders

2.3 Detalles de los Sprint Daily Meetings Ms Importantes

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

Comentarios Durante esta etapa de planificacin se confeccionaron los requerimientos del

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

-Arquitectura de trabajo 20/12/2010 -Roles -Eleccin de herramientas para el desarrollo.

15/02/2011

Diagramar Clases

de detallaron las formas de comunicacin entre las mismas.

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.

Funciones Propias 20/02/2011 del Juego

En esta etapa se llevo a cabo el desarrollo las funciones que hacen posible implementar la metodologa de juego.

-Pruebas -Definir nuevas 23/02/2011 tareas

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

terminar con xito el proceso.

-Puesta a Punto de 27/02/2011 Interfaz Grfica

Se eligieron las imgenes que forman parte de la interfaz grfica.

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

En caso de Servidor, el sistema debe mostrar la IP para que el cliente se conecte.

MOT0012

Completado

En caso de Cliente, el sistema debe requerir la IP para conectarse al servidor.

MOT0013

Completado

En caso de Servidor, el programa debe generar un hilo Cerebro.

MOT0020

Completado

El sistema debe ser capaz de generar un hilo Jugador y comenzar el juego.

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

La conexin entre jugadores debe ser de tipo TCP IP

GEN0032

Completado

Debe poder ser multijugador

GEN0033

No implementado

Cada Jugador puede elegir entre distintos escenarios.

GUI0009

Completado

Cada usuario debe poder ver el avance del juego en pantalla

GUI0010

Completado

Cada usuario puede ver como se desarrolla el juego de otros jugadores en su pantalla

GUI0011

Completado

La pantalla debe mostrar la puntuacin obtenida en todo momento.

GUI0012

No implementado

La interfaz de usuario puede ser modificada por cada jugador

Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC

4. UML LENGUAJE UNIFICADO DE MODELADO DEL PROYECTO


4.1 Diagrama de Paquetes

Ingeniera Del Software -Trabajo FinalFacultad de Ciencias Exactas Fsicas y Naturales UNC

4.2 Diagrama De Clases 4.2.1 Diagrama de Clases De Clases de Package GUI

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

4.4.2 Diagrama Para 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

5.1 CDIGO EN JAVA


5.1.2 Clase Cerebro.java
package cerebro; import import import import java.net.Socket; java.util.HashMap; java.util.Map; java.util.Vector;

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);

consola.out(""); consola.out("Cargando Objetos..."); //FABRICAS vectorObjetos.put("fabrica1",new ObjetosInanimados("fabrica1",525,251,116,109)); vectorObjetos.put("fabrica2",new ObjetosInanimados("fabrica2",525,102,116,109));

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);

grid.drawImage(recurso.getRecurso("Fondo"), 0, 0, this); //Imagen de fondo

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

//identifica si es server o Cliente se

/*******************************/ //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); }

public String getSer () { return ser; } private void comprobar_campos() {

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

public class Servidor { private private private private private

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

También podría gustarte