Se me ocurrió pensando en posibles secuencias que pudieran ser descritas en 4 líneas, usando un lenguaje simplificado que no es para meter en una máquina por ahora, así que Luis lo de probarlo en Actionscript no me llama la atención... el resultado podría ser cualquiera, desde un mensaje de error de sintaxis porque else sólo va luego de if, hasta que, para mi sorpresa, funcione bien, pero esto va más allá del lenguaje que yo use.
Lo que sucedió es que me sorprendió que eso nunca lo había visto, pero claro yo no ando mirando códigos de otra gente. Y así pues planteé el tema por curiosidad y en caso de ser algo nuevo y útil, darlo a conocer.
Dicho de otra fiorma estaba medio inventando un lenguaje y vi que en él era posible hacer algo de modo más simple que a como estoy acostumbrado.
Ya que lo dicho parece tan contradictorio, lo probé, pero debe entenderse que originalmente era un código para aplicar yo, entonces es mucho más simple de lo que se verá a continuación, porque yo no necesito poner cuando termina el bucle (es cuando yo pierda) ni que ciertas cosas pueden ocurrir siempre.
AccionesRealizadas = "";
PuntosDeVida = 3;
// Mientras no haya game over:
while (PuntosDeVida > 0) {
// Simulación de que el personaje puede ser golpeado o no:
PuntosDeVida = PuntosDeVida-random(2)*2;
// While en cuestión:
while (PuntosDeVida == 3) {
AccionesRealizadas = AccionesRealizadas+"Atacar ";
// Simulación para que el while pueda acabar:
PuntosDeVida = PuntosDeVida-random(2)*2;
} else {
AccionesRealizadas = AccionesRealizadas+"Curarse ";
PuntosDeVida = 3;
}
}
trace(AccionesRealizadas);Me dice:
Escena=Escena 1, Capa=Capa 1, Fotograma=1: Line 12: Se ha encontrado un operador 'else' que no coincide con 'if'
} else {
Nunca entendí mucho esos mensajes, pero parece que else debe seguir a un if.
Veo que ese código igual no tendría fin si funcionara bien. Puede que mi planteamiento haya sido demasiado abstracto. Sería así:
AccionesRealizadas = "";
PuntosDeVida = 3;
RecienGolpeado = false;
// Mientras no haya game over:
while (PuntosDeVida > 0) {
if (RecienGolpeado == false) {
AccionesRealizadas = AccionesRealizadas+"Puñetazo ";
} else {
AccionesRealizadas = AccionesRealizadas+"Patada ";
}
// Simulación de que el personaje puede ser golpeado o no:
if (random(5) == 0) {
RecienGolpeado = true;
PuntosDeVida--;
} else {
RecienGolpeado = false;
}
}
trace(AccionesRealizadas);Ahí no parece tener sentido poner un "while else", pero es que en mi caso el juego se encarga de lo contrario.
Mientras dure el juego
Mientras no me acaban de golpear
Puñetazo
sino
PatadaPoner un si en vez de mientras funcionaría igual, pasa que yo ni siquiera pensaba en el while inicial porque se sobre entiende. Pero acá tendría sentido:
Mientras dure el juego
Mientras no me acaban de golpear
Puñetazo
sino
Patada
CurarseConsiderando que se puede ser golpeado en cualquier momento, los resultados pueden:
A: Puñetazos hasta ser golpeado, luego curarse.
B: Patada, luego curarse.
Si en vez de un mientras se pone un if, lo de curarse ocurriría luego de cada puñetazo, no daría ni 2 seguidos.
Miren que me he mareado bastante, lo cierto es que se puede hacer de forma normal, esto sirve para evitar algunas líneas y quizá serviría para agilizar la ejecución.
while true
if "pasa_x_cosa"=true
accion B
break
accion A
if "pasa_lo_que_quieres_para_que_termine"=true
break
Eso ejecuta, pregunta y sale con B, sino hace la acción A hasta que pase algo que te saque del while
Queda más simple así:
do
if "pasa_x_cosa"=true
accion B
break
accion A
while "pasa_lo_que_quieres_para_que_termine"=false Pero eso no logra lo que decía al inicio, habría que poner un else arriba de action A.
Actualmente decidí hacer un programa que genere estructuras de códigos y no usar lo que planteé ni else if porque quitan posibilidades como esta:
Si Condición 1 == true
Acción A
sino
Acción B
Si Condición 2 == true
Acción C O sea si pones else if no hay espacio para la Acción B.
Pero luego de generados los códigos, puede que se requiera optimizarlos.
Bueno, eso es bastante offtopic, sólo digo.