En el ejemplo del "generador de lluvia". Se presentan dos formas de resolver el mismo problema.
El autor del libro lo resuelve con el uso de banderas pero también hace referencia que se puede
resolver con el uso de "else".
Este es como se hace en gambas, aprovechando el tiempo Unix.
La idea del problema es averiguar cuando una gota de lluvia pasa de la altura de la ventana para eliminarla del grupo
que forma "el chaparrón" o también si está sobre el personaje Mike. Cuando la gota de lluvia está sobre Mike
se debe almacenar ese momento de tiempo para luego compararlo con el momento que ya no le llueve encima.
Van a ser muchas las gotas que les va a caer.
Esto es con el uso de banderas.
i = 0
While i < unanube.chaparron.Length
unanube.chaparron[i].Mover()
unanube.chaparron[i].dibujar()
bandera = False
If unanube.chaparron[i].fueradepantalla() Then bandera = True
If unMike.TocadoPor(unanube.chaparron[i]) Then
bandera = True
unMike.tiempodeimpacto = ModuloTiempo.SegundosDesdeEpoch()
Endif
If bandera
unanube.chaparron.Remove(i)
i -= 1
Endif
i += 1
Wend
While i < unanube.chaparron.Length
unanube.chaparron[i].Mover()
unanube.chaparron[i].dibujar()
bandera = False
If unanube.chaparron[i].fueradepantalla() Then bandera = True
If unMike.TocadoPor(unanube.chaparron[i]) Then
bandera = True
unMike.tiempodeimpacto = ModuloTiempo.SegundosDesdeEpoch()
Endif
If bandera
unanube.chaparron.Remove(i)
i -= 1
Endif
i += 1
Wend
Y ahora este mismo problema pero sin el uso de banderas.
Lo hice rápidamente.
i = 0
While i < unanube.chaparron.Length
unanube.chaparron[i].Mover()
unanube.chaparron[i].dibujar()
If unanube.chaparron[i].fueradepantalla() Then
unanube.chaparron.Remove(i)
i -= 1
Else If unMike.TocadoPor(unanube.chaparron[i]) Then
unMike.tiempodeimpacto = ModuloTiempo.SegundosDesdeEpoch()
unanube.chaparron.Remove(i)
i -= 1
Endif
i += 1
Wend
While i < unanube.chaparron.Length
unanube.chaparron[i].Mover()
unanube.chaparron[i].dibujar()
If unanube.chaparron[i].fueradepantalla() Then
unanube.chaparron.Remove(i)
i -= 1
Else If unMike.TocadoPor(unanube.chaparron[i]) Then
unMike.tiempodeimpacto = ModuloTiempo.SegundosDesdeEpoch()
unanube.chaparron.Remove(i)
i -= 1
Endif
i += 1
Wend
¿ Qué os parece sin banderas ?. Se repite código. En las dos condiciones se debe eliminar una gota de lluvia.
Y es lo que se repite de esta forma.
Ahora ya sabemos que puede ser más practico el uso de banderas cuando en nuestra condicional se van
a repetir las mismas instrucciones. En este caso son dos condiciones distintas que acaban haciendo lo mismo
eliminar los objetos gotas de lluvia del array chaparrón que pertenece a la nube.
Saludos