1 {** Distintos tipos de Naves Enemigas }
\r
16 {** Es una nave con misiles y lasers (igual que la propia)
\r
17 que se desplaza por el epacio hasta que encuentra una nave propia para atacar.<br>
\r
18 <u>Características:</u>
\r
21 Potencia: 2 Cantidad de daño que hace por intervalo de tiempo
\r
22 Energía: 100 Cantidad de daño que soporta antes de ser destruída
\r
23 Velocidad máxima: 0,17 metros/milisegundos (612 km/h)
\r
24 Campo de radar: 2500 metros (2,5 km)
\r
26 Misiles Dirigidos: 2
\r
28 cNavePesada = class( cNaveEnemiga )
\r
30 aRadioMinimo: tLongitud; // Distancia minima a la nave propia
\r
32 {** Hace que se dispare un arma (todavía no está implementado)}
\r
33 procedure mDisparar;
\r
36 constructor create( pos : cVector = nil; vel : cVector = nil );
\r
37 {** Método heredado que hace que la nave reaccione ante la presencia
\r
38 de la nave propia (en este caso la atacará con lasers y misiles)}
\r
39 procedure mReaccionar( np : cNavePropia );override;
\r
40 {** Método heredado, se sobreescribe porque se dibuja de forma distinta}
\r
41 function mDibujar: string; override;
\r
44 {** Es una nave sin misiles, solo con lasers que
\r
45 se desplaza por el epacio hasta que encuentra una nave propia para atacar.<br>
\r
46 <u>Características:</u>
\r
49 Potencia: 1 Cantidad de daño que hace por intervalo de tiempo
\r
50 Energía: 60 Cantidad de daño que soporta antes de ser destruída
\r
51 Velocidad máxima: 0,18 metros/milisegundos (648 km/h)
\r
52 Campo de radar: 2000 metros (2 km)
\r
54 Misiles Dirigidos: 0
\r
56 cNaveLiviana = class( cNaveEnemiga )
\r
58 aRadioMinimo: tLongitud; // Distancia minima a la nave propia
\r
60 {** Dispara el laser (todavía no está implementado)}
\r
61 procedure mDisparar;
\r
64 constructor create( pos : cVector = nil; vel : cVector = nil );
\r
65 {** Método heredado que hace que la nave reaccione ante la presencia
\r
66 de la nave propia (en este caso la atacará con lasers)}
\r
67 procedure mReaccionar( np : cNavePropia );override;
\r
68 {** Método heredado, se sobreescribe porque se dibuja de forma distinta}
\r
69 function mDibujar: string; override;
\r
72 {** Es una nave sin armas que se desplaza por el epacio
\r
73 hasta que encuentra una nave propia, en ese momento empieza a huir avisando a
\r
74 las demas naves enemigas la ultima posicion de la nave propia.<br>
\r
75 <u>Características:</u>
\r
78 Potencia: 1 Cantidad de daño que hace por intervalo de tiempo
\r
79 Energía: 30 Cantidad de daño que soporta antes de ser destruída
\r
80 Velocidad máxima: 0,2 metros/milisegundos (720 km/h)
\r
81 Campo de radar: 1500 metros (1,5 km)
\r
83 Misiles Dirigidos: 0
\r
85 cNaveEspia = class( cNaveEnemiga )
\r
87 aPosicionEnemiga: cVector; // Indica la posicion de la nave propia. Si todavía no
\r
88 // la encontró, su valor es nil
\r
90 {** Método heredado se modifica porque su forma de modificar la velocidad es diferente al
\r
91 resto de las naves enemigas}
\r
92 procedure mModificarVelocidad( np: cNavePropia; modulo: tLongitud = -1 ); override;
\r
95 constructor create( pos : cVector = nil; vel : cVector = nil );
\r
96 {** Método que indica si está avisando }
\r
97 function mAvisando: boolean;
\r
98 {** Método que devuelve la última posición en dónde vió a la nave propia (si está avisando)}
\r
99 function mGetPosicionEnemiga: cVector;
\r
100 {** Método heredado que hace que la nave reaccione ante la presencia
\r
101 de la nave propia (en este caso huirá y empezará a avisar al resto de las naves que encuentre
\r
102 sobre la última posición de la nave propia)}
\r
103 procedure mReaccionar( np : cNavePropia );override;
\r
105 destructor destroy; override;
\r
106 {** Método heredado, se sobreescribe porque se dibuja de forma distinta}
\r
107 function mDibujar: string; override;
\r
110 {** Es una nave sin armas que se desplaza por el epacio
\r
111 hasta que encuentra una nave propia y trata de chocarla.<br>
\r
112 <u>Características:</u>
\r
114 Dimensión: 2 metros
\r
115 Potencia: 1 Cantidad de daño que hace por intervalo de tiempo
\r
116 Energía: 30 Cantidad de daño que soporta antes de ser destruída
\r
117 Velocidad máxima: 0,2 metros/milisegundos (720 km/h)
\r
118 Campo de radar: 1000 metros (1 km)
\r
120 Misiles Dirigidos: 0
\r
122 cNaveSuicida = class( cNaveEnemiga )
\r
125 constructor create( pos : cVector = nil; vel : cVector = nil );
\r
126 {** Método heredado que hace que la nave reaccione ante la presencia
\r
127 de la nave propia (en este caso tratará de chocarla)}
\r
128 procedure mReaccionar( np : cNavePropia );override;
\r
129 {** Método heredado, se sobreescribe porque se dibuja de forma distinta}
\r
130 function mDibujar: string; override;
\r
137 {** Crea una instancia de una nave pesada.
\r
138 @param pos Vector posición
\r
139 @param vel Vector velocidad}
\r
140 constructor cNavePesada.create(pos, vel: cVector);
\r
142 // La dimensión es 5 m de radio, la potencia 2, la energía 100, tiene 5 misiles comunes,
\r
143 // 2 dirigidos, su velocidad maxima es 0,17 m/mseg (612 km/h) y su Campo de radar 2,5 km
\r
144 inherited create( pos, vel, 5 , 2, 100, 5 , 2, 0.17, 2500);
\r
145 aRadioMinimo := 500;
\r
148 {** Hace que se dispare un arma (todavía no está implementado)}
\r
149 function cNavePesada.mDibujar: string;
\r
151 result := '.\bitmaps\navepesada.bmp';
\r
154 procedure cNavePesada.mDisparar;
\r
156 // Todavía no está implementado
\r
159 {** Método heredado que hace que la nave reaccione ante la presencia
\r
160 de la nave propia cerca (en este caso la atacará con lasers y misiles)
\r
161 @param np Nave Propia con la cual esta reaccionando}
\r
162 procedure cNavePesada.mReaccionar(np: cNavePropia);
\r
166 modulo := mGetVelMax; // nuevo modulo de la velocidad igual a la velocidad maxima
\r
167 if mGetDistancia( np ) < aRadioMinimo then // si esta cerca de la nave propia...
\r
168 if np.mGetVelModulo < mGetVelMax then // si la vel de la nave propia es menor a la maxima
\r
169 modulo := np.mGetVelocidad.mGetModulo; // nuevo modulo de la velocidad igual al de la nave propia
\r
170 mModificarVelocidad( np, modulo ); // cambiar la velocidad segun la nave propia y el nuevo modulo
\r
171 // Falta implementar la parte de disparos...
\r
177 {** Crea una instancia de una nave liviana.
\r
178 @param pos Vector posición
\r
179 @param vel Vector velocidad}
\r
180 constructor cNaveLiviana.create(pos, vel: cVector);
\r
182 // La dimensión es 3 m de radio, la potencia 1, la energía 60, no tiene misiles comunes
\r
183 // ni dirigidos, su velocidad maxima es 0,18 m/mseg (648 km/h) y su Campo de radar 2 km
\r
184 inherited create( pos, vel, 3, 1,60, 0, 0, 0.18, 2000);
\r
185 aRadioMinimo := 250;
\r
188 {** Hace que se dispare un arma (todavía no está implementado)}
\r
189 function cNaveLiviana.mDibujar: string;
\r
191 result := '.\bitmaps\naveliviana.bmp';
\r
194 procedure cNaveLiviana.mDisparar;
\r
196 // Todavía no está implementado
\r
199 {** Método heredado que hace que la nave reaccione ante la presencia
\r
200 de la nave propia (en este caso la atacará con lasers)
\r
201 @param np Nave Propia con la cual esta reaccionando}
\r
202 procedure cNaveLiviana.mReaccionar(np: cNavePropia);
\r
206 modulo := mGetVelMax; // nuevo modulo de la velocidad igual a la velocidad maxima
\r
207 if mGetDistancia( np ) < aRadioMinimo then // si esta cerca de la nave propia...
\r
208 if np.mGetVelModulo < mGetVelMax then // si la vel de la nave propia es menor a la maxima
\r
209 modulo := np.mGetVelocidad.mGetModulo; // nuevo modulo de la velocidad igual al de la nave propia
\r
210 mModificarVelocidad( np, modulo ); // cambiar la velocidad segun la nave propia y el nuevo modulo
\r
211 // Falta implementar la parte de disparos...
\r
217 {** Crea una instancia de una nave espía.
\r
218 @param pos Vector posición
\r
219 @param vel Vector velocidad}
\r
220 constructor cNaveEspia.create(pos, vel: cVector);
\r
222 // La dimensión es 2 m de radio, la potencia 1, la energía 30, no tiene misiles comunes
\r
223 // ni dirigidos, su velocidad maxima es 0,2 m/mseg (720 km/h) y su Campo de radar 1,5 km
\r
224 inherited create( pos, vel, 2, 1, 30, 0, 0, 0.2, 1500 );
\r
225 aPosicionEnemiga := nil;
\r
229 destructor cNaveEspia.destroy;
\r
231 aPosicionEnemiga.free;
\r
235 {** Método que indica si está avisando
\r
236 @return <i>true</i> si está avisando, <i>false</i> si no lo está}
\r
237 function cNaveEspia.mAvisando: boolean;
\r
239 result := ( aPosicionEnemiga <> nil ); // True si la posicion no es nil
\r
242 {** Método que devuelve la última posición en dónde vió a la nave propia (si está avisando)
\r
243 @return Última posición donde detectó a la nave propia (<i>nil</i> si no la detecto nunca)}
\r
244 function cNaveEspia.mDibujar: string;
\r
246 result := '.\bitmaps\naveespia.bmp';
\r
249 function cNaveEspia.mGetPosicionEnemiga: cVector;
\r
251 result := cVector.create( aPosicionEnemiga );
\r
254 {** Modifica la velocidad de la nave en base a la nave propia.
\r
255 @param np Nave propia con la cual se calculará la dirección de la nueva velocidad
\r
256 @param modulo Nuevo módulo de la velocidad}
\r
257 procedure cNaveEspia.mModificarVelocidad(np: cNavePropia; modulo: tLongitud);
\r
259 pos, // Vector temporal
\r
260 vel: cVector; // Vector temporal
\r
262 pos := np.mGetPosicion;
\r
263 vel := mGetPosicion.mRestar( pos ); // Crea un vector igual a su posicion
\r
264 // Le resta la posicion de la nave propia
\r
265 mSetVelModulo( mGetVelMax ); // Setea el modulo al maximo
\r
266 mSetVelDir( vel ); // Copia el vector a su velocidad
\r
267 vel.free; // Libera el vector temporal
\r
268 pos.free; // Libera el vector temporal
\r
271 {** Método heredado que hace que la nave reaccione ante la presencia
\r
272 de la nave propia (en este caso huirá y empezará a avisar al resto de las naves que encuentre
\r
273 sobre la última posición de la nave propia)
\r
274 @param np Nave Propia con la cual esta reaccionando}
\r
275 procedure cNaveEspia.mReaccionar(np: cNavePropia);
\r
277 mModificarVelocidad( np );
\r
278 // Si ya tiene una posición, la modifica, si no crea una nueva
\r
279 if aPosicionEnemiga <> nil then
\r
280 aPosicionEnemiga.free;
\r
281 aPosicionEnemiga := np.mGetPosicion;
\r
286 {** Crea una instancia de una nave suicida.
\r
287 @param pos Vector posición
\r
288 @param vel Vector velocidad}
\r
289 constructor cNaveSuicida.create(pos, vel: cVector);
\r
291 // La dimensión es 2 m de radio, la potencia 1, la energía 30, no tiene misiles comunes
\r
292 // ni dirigidos, su velocidad maxima es 0,2 m/mseg (720 km/h) y su Campo de radar 1 km
\r
293 inherited create( pos, vel, 2, 1, 30, 0, 0, 0.2, 1000);
\r
296 {** Método heredado que hace que la nave reaccione ante la presencia
\r
297 de la nave propia (en este caso tratará de chocarla)
\r
298 @param np Nave Propia con la cual esta reaccionando}
\r
299 function cNaveSuicida.mDibujar: string;
\r
301 result := '.\bitmaps\navesuicida.bmp';
\r
304 procedure cNaveSuicida.mReaccionar(np: cNavePropia);
\r
306 mModificarVelocidad( np );
\r