-
Notifications
You must be signed in to change notification settings - Fork 0
/
magos.wlk
199 lines (145 loc) · 5.68 KB
/
magos.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
// ===============================
// Revisado
// ===============================
import game.*
import administradorDeMagos.*
import puntaje.*
import proyectil.*
import adminProyectiles.*
import administradorDeEnemigos.*
// ===============================
// Clase Base: Mago
// ===============================
class Mago {
// Propiedades
const position
var property vida
var property imagen = imagenBase
const imagenBase
// Métodos
method frenarEnemigo() = true
method position() = position
method image() = imagen
method disparar() {}
method recibeDanioEnemigo(_danio,proyectil) { return false }
method recibeDanioMago(_danio,enemigo) {
self.vida(self.vida() - _danio)
enemigo.cambiarAccion(enemigo.tipo().atacar())
self.matar()
return true
}
method sePuedeSuperponer() = false
method valorAgregado() = 0
// agregar metodo
method estaMuerto() {
return self.vida() <= 0
}
method matar(){
if (self.estaMuerto()) self.eliminar()
}
method eliminar() {
game.removeVisual(self)
administradorDeMagos.eliminarMago(self)
}
method matarSlime(){}
method cambiarAccion(accionNueva){}
method tipo()=descartable
method proyectil() = false
method mejorar(){}
}
class MagoQueDispara inherits Mago{
const proyectilBase
const imagenQueDispara
override method disparar(){
const hayEnemigo = self.enemigoEnSuFila()
imagen = imagenBase
if (hayEnemigo) {
const posicionProyectil = new MutablePosition(x = self.position().x(), y = self.position().y())
administradorDeProyectiles.generarProyectil(posicionProyectil, proyectilBase)
imagen = imagenQueDispara
}
}
method enemigoEnSuFila() = administradorDeEnemigos.hayEnemigoFila(self.position().y())
}
// ===============================
// Subclases de Mago: Tipos de magos
// ===============================
// Mago de Fuego
class MagoFuego inherits MagoQueDispara(vida = 100, imagenBase = "magoFuego.png", imagenQueDispara = "magoFuegoDispara.png", proyectilBase = proyectilNormal){}
// Mago Irlandés (sanador)
class MagoIrlandes inherits Mago(vida = 100, imagenBase = "magoHealer.png") {
override method valorAgregado() = 10
}
// Mago de Hielo
class MagoHielo inherits MagoQueDispara(vida = 100, imagenBase = "magoHielo.png", imagenQueDispara = "magoHieloDispara.png", proyectilBase = proyectilPenetrante){}
class MagoStop inherits MagoQueDispara(vida = 100, imagenBase = "magoStop.png", imagenQueDispara = "magoStopDispara.png", proyectilBase = proyectilDeStop){}
// Mago de Piedra
class MagoPiedra inherits Mago(vida = 400, imagenBase = "magoPiedra.png") {}
// Mago Explosivo
class MagoExplosivo inherits Mago(vida = 1000, imagenBase = "magoExplosivo.png") {
const explosion = game.sound("m.explosion.mp3")
override method matar() {
self.vida(0)
const posicionEnFrente = new MutablePosition(x = position.x() + 1, y = position.y())
const enemigoEnFrente = game.getObjectsIn(posicionEnFrente)
explosion.volume(0.1)
explosion.play()
enemigoEnFrente.forEach({ objeto => objeto.matarSlime() }) //Map devuelve lista, usar forEach
self.eliminar()
}
}
// ===============================
// Tiendas de Magos: Creación de Magos desde la tienda
// ======r()=========================
class MagoTienda{
const position
const costo
method position() = position
method image() = ""
method text() = costo.toString() + "$"
method textColor() = "ffec00ff"
method puedeGenerarMago(){
if(puntaje.puntos() < costo){
throw new DomainException(message="No hay suficiente dinero para comprar esta Mago")
}
}
method magoQueGenera(posicionMago){return}
method generarMago(posicionMago){
self.puedeGenerarMago()//Idem en todo mago
puntaje.restarPuntos(costo)//Idem en todo mago
const mago = self.magoQueGenera(posicionMago)
return mago
}
method recibeDanioMago(danio,enemigo){}
method frenarEnemigo()= true
// method efectoDeInvocacion(){} //esto estaba porque antes los magos irlandeses interactuaban directamente con el contador de puntos
}
// Mago de Piedra en Tienda
object magoPiedraTienda inherits MagoTienda(position = new MutablePosition(x = 0, y = 5), costo = 100) {
override method magoQueGenera(posicionMago){return new MagoPiedra(position = posicionMago)}
override method image() = "magoPiedra.png"
}
// Mago de Fuego en Tienda
object magoFuegoTienda inherits MagoTienda(position = new MutablePosition(x = 1, y = 5), costo = 100) {
override method magoQueGenera(posicionMago){return new MagoFuego(position = posicionMago)}
override method image() = "magoFuego.png"
}
// Mago Irlandés en Tienda
object magoIrlandesTienda inherits MagoTienda(position = new MutablePosition(x = 2, y = 5), costo = 75) {
override method magoQueGenera(posicionMago){return new MagoIrlandes(position = posicionMago)}
override method image() = "magoHealer.png"
}
// Mago de Hielo en Tienda
object magoHieloTienda inherits MagoTienda(position = new MutablePosition(x = 3, y = 5), costo = 250) { //Nico: ver si 250 es una banda o no
override method magoQueGenera(posicionMago){return new MagoHielo(position = posicionMago)}
override method image() = "magoHielo.png"
}
// Mago Explosivo en Tienda
object magoExplosivoTienda inherits MagoTienda(position = new MutablePosition(x = 4, y = 5), costo = 400) {
override method magoQueGenera(posicionMago){return new MagoExplosivo(position = posicionMago)}
override method image() = "magoExplosivo.png"
}
object magoStopTienda inherits MagoTienda(position = new MutablePosition(x = 5, y = 5), costo = 300) { //Nico: ver si 250 es una banda o no
override method magoQueGenera(posicionMago){return new MagoStop(position = posicionMago)}
override method image() = "magoStop.png"
}