Código
// Este programa genera una comparación simple y su evaluación, pero: // Debe haber alguna parte cuyo contenido no está definido. // Ejemplo: 1 < ... : true // Luego intenta asignar los contenidos faltantes. // Las siguientes funciones se usan en Resolvedor: function Comparacion() { trace("Probando: "+P1+" "+P2+" "+P3+": "+P4); if (P2 == "==") { Resultado = P1 == P3; } else if (P2 == "!=") { Resultado = P1 != P3; } else if (P2 == "<=") { Resultado = P1 <= P3; } else if (P2 == ">=") { Resultado = P1 >= P3; } else if (P2 == "<") { Resultado = P1 < P3; } else { Resultado = P1 > P3; } return Resultado+"" == P4; } function ModificarP1() { if (P1<10) { P1++; } else { Puntero++; // ¿Se puede modificar el contenido de otra parte? if (Puntero > Indefinidos) { // Sí, resetear esta y modificar esa: P1 = 0; eval("ModificarP"+eval("Indefinido"+Puntero))(); } else { // No, indicar que el resolvedor se detenga: Continuar = "No"; } } } function ModificarP2() { if (P2Valor<6) { P2Valor++; P2 = PosiblesSignos[P2Valor]; Puntero = 1; } else { Puntero++; // ¿Se puede modificar el contenido de otra parte? if (Puntero > Indefinidos) { // Sí, resetear esta y modificar esa: P2Valor = 0; P2 = "=="; eval("ModificarP"+eval("Indefinido"+Puntero))(); } else { // No, indicar que el resolvedor se detenga: Continuar = "No"; } } } function ModificarP3() { if (P3<10) { P3++; Puntero = 1; } else { Puntero++; // ¿Se puede modificar el contenido de otra parte? if (Puntero > Indefinidos) { // Sí, resetear esta y modificar esa: P3 = 0; eval("ModificarP"+eval("Indefinido"+Puntero))(); } else { // No, indicar que el resolvedor se detenga: Continuar = "No"; } } } function ModificarP4() { if (P4 == "true") { P4 = "false"; Puntero = 1; } else { Puntero++; // ¿Se puede modificar el contenido de otra parte? if (Puntero > Indefinidos) { // Sí, resetear esta y modificar esa: P4 = "true"; eval("ModificarP"+eval("Indefinido"+Puntero))(); } else { // No, indicar que el resolvedor se detenga: Continuar = "No"; } } } // Se repite en F2: function Resolvedor () { if (Comparacion()) { trace ("Solución hallada, ver respuesta."); Mensaje = Mensaje+"\n"+P1+" "+P2+" "+P3+": "+P4; gotoAndStop (3); } else if (Continuar == "Sí") { // Se modificará el candidato: eval(ModificadoraUsar)(); } else { trace ("No se pudo hallar una solución."); gotoAndStop (3); } } PosiblesTiposDeContenido = ["Normal", "Indefinido"]; PosiblesSignos = ["==", "!=", "<=", ">=", "<", ">"]; // Generar los contenidos de las 4 partes hasta que alguno sea indefinido: do { Indefinidos = 0; // Parte 1 (cosa 1 a comparar): TipoDelParte1 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)]; if (TipoDelParte1 == "Normal") { Parte1 = random(10); } else { Parte1 = "..."; Indefinidos++; set("Indefinido"+Indefinidos, 1); } // Parte 2 (símbolo comparador): TipoDelParte2 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)]; if (TipoDelParte2 == "Normal") { Parte2 = PosiblesSignos[random(6)]; } else { Parte2 = "..."; Indefinidos++; set("Indefinido"+Indefinidos, 2); } // Parte 3 (cosa 2 a comparar): TipoDelParte3 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)]; if (TipoDelParte3 == "Normal") { Parte3 = random(10); } else { Parte3 = "..."; Indefinidos++; set("Indefinido"+Indefinidos, 3); } // Parte 4 (evaluación): TipoDelParte4 = PosiblesTiposDeContenido[random(PosiblesTiposDeContenido.length)]; if (TipoDelParte4 == "Normal") { // Definir esta parte según las anteriores: // ¿Fueron definidas? if (Parte1 != "..." && Parte2 != "..." && Parte3 != "...") { // Sí, ver qué definición corresponde: if (Parte2 == "==") { Parte4 = Parte1 == Parte3; } else if (Parte2 == "!=") { Parte4 = Parte1 != Parte3; } else if (Parte2 == "<=") { Parte4 = Parte1 <= Parte3; } else if (Parte2 == ">=") { Parte4 = Parte1 >= Parte3; } else if (Parte2 == "<") { Parte4 = Parte1 < Parte3; } else { Parte4 = Parte1 > Parte3; } } else { // No toda parte fue definida, // definir esta al azar: Parte4 = random(2); if (Parte4 == 0) { Parte4 = "true"; } else { Parte4 = "false"; } } } else { Parte4 = "..."; Indefinidos++; set("Indefinido"+Indefinidos, 4); } } while (Indefinidos == 0); Mensaje = Parte1+" "+Parte2+" "+Parte3+": "+Parte4; // Preparar variables, asignar valores a los contenidos indefinidos: // Parte 1: if (Parte1 != "...") { P1 = Parte1; } else { P1 = 0; } // Parte 2: if (Parte2 != "...") { P2 = Parte2; } else { P2Valor = 0; P2 = "=="; } // Parte 3: if (Parte3 != "...") { P3 = Parte3; } else { P3 = 0; } // Parte 4: if (Parte4 != "...") { P4 = Parte4; } else { P4 = "true"; } // Usado para variar qué contenido de P se modifica: Puntero = 1; ModificadoraUsar = "ModificarP"+Indefinido1; // Marca si algún cantenido puede modificarse: Continuar = "Sí";
Ejemplo:
8 ... ...: ...
Probando: 8 == 0: true
Probando: 8 != 0: true
Solución hallada, ver respuesta.
Otro ejemplo:
... > 4: ...
Probando: 0 > 4: true
Probando: 1 > 4: true
Probando: 2 > 4: true
Probando: 3 > 4: true
Probando: 4 > 4: true
Probando: 5 > 4: true
Solución hallada, ver respuesta.
¿Funciona bien siempre? ¿detectan algo en el código que podría generar fallas?
Si pongo un botón de resetear ¿habrá problema? Pondría las funciones en el frame 1, la comparación se generaría en el 2 y el resolvedor se repetiría en el 3; mi temor es que una variable no eliminada, que no estaba definida al inicio, cause un error.
Lo último: El programa muestra mensajes usando trace, el equivalente de print. Pero eso sólo funciona usando el editor de Flash. Quisiera que esos mensajes se muestren también en un swf o exe. El problema es si el mensaje tiene muchas líneas, no sé cómo ponerle scroll. Voy a mirar el tutorial pero si me dicen mejor.