-
Notifications
You must be signed in to change notification settings - Fork 0
/
administradorDeEnemigos.wlk
69 lines (56 loc) · 2.68 KB
/
administradorDeEnemigos.wlk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import game.*
import slime.*
import administradorDeOleadas.*
/* =======================================
Administrador de Enemigos: Gestión de enemigos en el juego
======================================= */
object administradorDeEnemigos {
// constantes
const maxEnemigosEnPantalla = 8
// Propiedades
var nombreEnemigo = 10000
var enemigos = #{}
// Métodos de Consulta
method enemigos() = enemigos
method columnaOcupada() = enemigos.filter({ enemigo => enemigo.position().x() == 14 }).size() == 5 // Verifica si la columna de posición x=14 está ocupada por 5 enemigos
method nombre() = nombreEnemigo
method pocosEnemigosEnPantalla() = administradorDeOleadas.enemigosVivos() < maxEnemigosEnPantalla
// Genera un nuevo nombre para los enemigos
method sumarEnemigo() { nombreEnemigo += 1 }
// Genera un nuevo enemigo del tipo especificado, si hay espacio en la columna
method generarEnemigo(tipo) {
if (not self.columnaOcupada() && self.pocosEnemigosEnPantalla()) {
const posicionTemporal = new MutablePosition(x = 14, y = 0.randomUpTo(5).truncate(0))
var nombreParaEnemigo = self.nombre()
/* Solo genera el enemigo si la posición temporal está vacía */
if (game.getObjectsIn(posicionTemporal).isEmpty()) {
nombreParaEnemigo = new Slime(position = posicionTemporal, tipo = tipo)
enemigos.add(nombreParaEnemigo) /* Añade el nuevo enemigo a la colección de enemigos activos */
self.sumarEnemigo() /* Incrementa el contador de enemigos en el administrador */
administradorDeOleadas.sumarEnemigo() /* Notifica al administrador de oleadas */
return game.addVisual(nombreParaEnemigo) /* Muestra al enemigo en el juego */
} else {
return /* No genera el enemigo si la posición está ocupada */
}
}
}
// Elimina un enemigo específico de la colección de enemigos activos
method eliminarEnemigo(enemigo) {
administradorDeOleadas.reducirEnemigo()
enemigos.remove(enemigo)
}
// Resetea el estado del administrador, eliminando todos los enemigos y reiniciando el contador
method reset() {
enemigos.forEach({ enemigo => enemigo.eliminar() })
nombreEnemigo = 0
enemigos = []
}
// Verifica si los enemigos están muertos
method estanMuertos() {
enemigos.forEach({ enemigo => enemigo.estaMuerto() })
}
// Ordena a cada enemigo ejecutar la función de movimiento
method moverEnemigos() {
enemigos.forEach({ enemigo => enemigo.movete() })
}
}