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