El problema que intento resolver en cuanto a eso, es que puede poner una X donde ya hay, debo evitarlo.
Sé que debo poner algo como:
Código:
if (Situacion[Action] == "v") {
// Es realizable, realizarla...
sino
// No, ver si hay otra...
Aún no tengo el código completo. Díganme cómo pondrían uds ese if, dónde, o cómo harían.
Código
// 2 en línea horizontal, en tablero de 2x2, sólo X: // // Uso arrays porque es más fácil así modificar los nombres... // de variables: // // Los casilleros están numerados así: // 0 1 // 2 3 // Situación inicial (v es casillero vacío): SituacionBase = ["v", "v", "v", "v"]; // Ponerla en la lista de situaciones a experimentar: SaE1 = SituacionBase.slice(); // Situaciones a experimentar (cuántas son): SaE = 1; NroDeSExperimentandose = 1; NombreDeSE = "S"+(SaE1.join("")); // Acción a realizarse (casillero a marcar): Action = 0; function BuscarAccionesGanadoras () { PlantearSyActuar(); // ¿Ganó? // Para averiguarlo, calcular fila (contando desde 0): Fila = Math.floor(Action/2); // trace(" Fila: "+Fila); if (Situacion[Fila*2] == Situacion[Fila*2+1]) { // trace("Situacion[Fila*2] == Situacion[Fila*2+1]: "+Situacion[Fila*2]+" == "+Situacion[Fila*2+1]); // Sí, crear datos sobre eso: // En la situación base conviene la acción realizada: set (NombreDeSE+"BestAction", Action); // En esa situación se requiere 1 acción para ganar: set (NombreDeSE+"DistanciaaGanar", 1); trace("Ganó, ahora se sabe que en la situación "+SituacionBase+" se gana usando la acción "+Action); // ¿Aún hay situaciones a experimentar? if (SaE > NroDeSExperimentandose) { IniciarExperimentosEnOtraS(); } else { // Comenzar la etapa 2. IniciarEtapa2(); } } else { EvaluarConocimientoSobreSyEtc(); } } function PlantearSyActuar () { // Plantear situación porque puede modificarse pero... // podría requerirse su estado original luego: Situacion = SituacionBase.slice(); trace(" La situación experimentándose es "+Situacion); // Aplicación de la acción: Situacion[Action] = "X"; trace(" Se realizó la acción "+Action+"; ahora la situación es "+Situacion); } function IniciarExperimentosEnOtraS () { NroDeSExperimentandose++; SituacionBase = eval("SaE"+NroDeSExperimentandose); // trace("SituacionBase: "+SituacionBase); // Reset de la acción a probar: Action = 0; trace("Se inician experimentos en otra situación"); } function IniciarEtapa2 () { DistanciaaGanarAceptada = 1; trace("Se experimentaron todas las situaciones; se reexperimentarán buscando resultados menos óptimos"); trace("Son "+SaE+" situaciones; se acepta que la distancia a la victoria sea "+DistanciaaGanarAceptada); gotoAndStop (3); } function EvaluarConocimientoSobreSyEtc () { SituacionHechaTexto = Situacion.join(""); NombreDeSituacion = "S"+SituacionHechaTexto; Resumen = NombreDeSituacion+"BestAction"; if (eval(Resumen) == undefined) { // No, anotar que debe investigarse: SaE++; set ("SaE"+SaE, Situacion.slice()); trace("Esa situación no está anotada; se anota como nro "+SaE); // Esto para saber que está anotada: set (Resumen, "Desconocida"); } // ¿Queda alguna acción sin probar? if (Action < 3) { // Sí, probar otra: Action++; } else if (SaE > NroDeSExperimentandose) { // Sino si aún hay situaciones a experimentar: trace("No hay más acciones posibles en la situación"); IniciarExperimentosEnOtraS(); } else { // Comenzar la etapa 2. IniciarEtapa2(); } }
Ah, BuscarAccionesGanadoras se repite hasta que empiece la etapa 2.