/** * Metodo que añade un disparo realizar a la lista de disparos. - Si el disparo es un * DisparoHumano y la nave humana aun no ha realizado el maximo de disparos permitidos, se inserta * el disparo, si no se omite y no se inserta. - Si el disparo es un DisparoAlien, se inserta * siempre. * * @param pDisparo */ public void anadirDisparo(Disparo pDisparo) { // Los 3 primeros disparos son humanos, el resto de disparos son disparos alien if (pDisparo instanceof DisparoHumano && cantidadDisparosHumanos < MAX_DISPAROS_HUMANOS) { lista.insertFirst(pDisparo); cantidadDisparosHumanos++; } else { lista.insertFirst(pDisparo); } }
/** Metodo que desplaza los disparos a lo largo de la pantalla */ public void desplazarDisparos() { Disparo d1 = null; lista.goFirst(); // nos situamos al inicio de la lista de disparos while (lista.hasNext()) { // mientras haya mas disparos d1 = lista.get(); d1.mover(); if (d1.getY() < 0 || d1.getY() > 650) { // si se ha salido de la pantalla eliminarDisparo(d1); if (d1 instanceof DisparoHumano) { cantidadDisparosHumanos--; } } lista.goNext(); } }
/** * Metodo que devuelve una lista ligada de Strings que contiene lo siguiente "ID;posX;posY" * * @return SimpleLinkedList<String> */ public SimpleLinkedList<String> obtenerDatosDisparos() { SimpleLinkedList<String> listaDatos = new SimpleLinkedList<String>(); lista.goFirst(); while (lista.hasNext()) { listaDatos.insert(lista.get().toString()); lista.goNext(); } return listaDatos; }
/** * Metodo que comprueba si alguno de los disparos impacta alguna nave, en caso de que haya * impactado elimina el disparo e inserta la nave en una lista, porque puede suceder que dos * disparos impacten al mismo tiempo en distintas naves. * * @return una lista ligada de los id de las naves */ public SimpleLinkedList<String> comprobarImpactos() { SimpleLinkedList<String> listaNavesImpactadas = new SimpleLinkedList<String>(); Nave naveImpactada; lista.goFirst(); while (lista.hasNext()) { Disparo d1 = lista.get(); naveImpactada = ListaNaves.getMiListaNaves().hayImpactos(d1); if (naveImpactada != null) { // si la nave ha sido impactada // insertamos el identificador de la nave para que el controlador grafico sepa cual hay que // borrar listaNavesImpactadas.insertFirst(naveImpactada.getId()); if (d1 instanceof DisparoHumano) { // si el disparo es humano, restamos en 1 los disparos humanos // realizados cantidadDisparosHumanos--; // Si el disparo es humano sabemos que la nave que hemos devuelto es alien, asique podemos // hacer cast y aumentar // la puntuacion obtenida por la nave humana NaveHumana.getMiNaveHumana() .aumentarPuntuacion(((NaveAlien) naveImpactada).getPuntuacion()); } eliminarDisparo(d1); } lista.goNext(); } return listaNavesImpactadas; }
/** * Metodo que dado un disparo lo elimina de la lista * * @param pDisparo */ private void eliminarDisparo(Disparo pDisparo) { lista.remove(pDisparo); }