Comunidad de diseño web y desarrollo en internet online

correccion de codigo...

Citar            
MensajeEscrito el 07 Abr 2006 07:34 pm
hola, tengo un codigo que funciona relativamente bien,

Código :

function seleccion (celda){
   //if (ganador==0){
   if (triqui [celda] == ""){
      _root ["celda_" + celda].attachMovie ("x_mc", "x_mc", 1);
      triqui [celda] = 1;
      jugadas = jugadas ++;
      for (n = 1; n <= 8; n ++){
         if ((triqui [ganadora [n][1]] == 1) && (triqui [ganadora [n][2]] == 1) && (triqui [ganadora [n][3]] == 1)){
            resultado = "GANASTE!!!";
         } else {
            if (jugadas > 8){
               resultado = "EMPATE";
               stop ();
            } else {
               turnopc ();
               gotoAndPlay ("tr1");
            }
         }
      }
   }
}
pero no muestra correctamente la palabra GANASTE!!!, si comento la linea turnopc(); si que funciona bien, entonces usando algunos traces llegue a la conclusion que cuando evalua si hay ganador el ejecuta lo que hay en el else, me explico, si no hay ganador el pasa a evaluar si hay empate, si no hay, permite que se ejecute turnopc(), ese es el comportamiento logico, pero cuando hay ganador no debe evaluar el empate y mucho menos dejar que turnopc() se ejecute, pero no es asi, cuando hay ganador no muestra el mensaje de ganador y ademas se ejecuta turnopc(), alguien podria decirme donde esta mi error??.. muchas gracias...

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 07:42 pm
Gana una u otra pero no las 2? ---> entonces no && es ||

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 07:47 pm
no teseo... tiene que cumplirse la condicion, las tres tienen que ser iguales, y de hecho el codigo funciona si comento la linea turnopc(), lo que sucede es que cuando pasa el if y encuentra el ganador no deberia ejecutar lo que esta dentro de el else, pero lo hace y po eso es que no funciona correctamente, pero ni idea de que pasa...

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 07:52 pm
repaso...........es un tres en raya.
entonces como, al parecer, la condicion siempre sale falsa...........fallan los elementos de la condición.
Y falta código para saber por qué?
efectua un trace a la condición justo antes de ejecutarse.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 07:57 pm
gracias por la atencion Teseo..
sip es un tres en raya, y ya lo probe sin la fincion pcturn, funciona correctamente, muestra los mensajes en el momento en que tienen que salir, pero cuando esta la linea de turnopc(), que como podras notar esta dentro de un else que se cumple solo si no hay ganador, esta se ejecuta si o si sin importar que se cunpla la condicion de ganador...
lo curioso es que la funcion turnopc() tiene un codigo similar y esta si funciona bien...

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 09:27 pm
pues si las condiciones son correctas queda...........
que el bucle for traiga o lleve una variable consigo.
Es decir: la n del bucle no sea local pues venga de una llamada recursiva.
pon:
for (var n = 1; n <= 8; n ++){
y a ver.........sin más código es muy dificil definir el fallo. Solo especular.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 09:41 pm
pues puse lo que dijiste y empeoro la situacion al punto que me cerro el flash... :crap:

creo que sera mas facil si te pongo el codigo.. esto va en el primer frame y define las variables y funciones...

Código :

var resultado;
var respuesta;
var jugadas;
var temp;
var triqui = new Array();   //definicion de el arreglo que contiene las 9 opciones de juego
   triqui[11]=""; triqui[12]=""; triqui[13]=""; triqui[21]=""; triqui[22]=""; triqui[23]=""; triqui[31]=""; triqui[32]=""; triqui[33]="";

var opciones = [11,12,13,21,22,23,31,32,33];
   
//arreglo que contiene las nueve opciones ganadoras, permite comparar
//luego de cada jugada si hay ganador
var ganadora = new Array();
   ganadora[1]=[0,11,12,13];
   ganadora[2]=[0,21,22,23];
   ganadora[3]=[0,31,32,33];
   ganadora[4]=[0,11,21,31];
   ganadora[5]=[0,12,22,32];
   ganadora[6]=[0,13,23,33];
   ganadora[7]=[0,11,22,33];
   ganadora[8]=[0,13,22,31];


function seleccion (celda){
   if (triqui [celda] == ""){
      _root ["celda_" + celda].attachMovie ("x_mc", "x_mc", 1);
      triqui [celda] = 1;
      jugadas = jugadas ++;
      for (n = 1; n <= 8; n ++){
         if ((triqui [ganadora [n][1]] == 1) && (triqui [ganadora [n][2]] == 1) && (triqui [ganadora [n][3]] == 1)){
            resultado = "GANASTE!!!";
            trace("prueba");
            gotoAndStop("over");
         } else {
            if (jugadas > 8){
               resultado = "EMPATE";
               gotoAndStop("over");
               } else {
                  turnopc ();
                  gotoAndPlay ("tr1");
               }
            }
         }
   }
}

function pcrandom(){
   do{
      temp = opciones [Math.floor (Math.random()*9)];
   } while (triqui [temp]!="");
}

function turnopc(){
   pcrandom();
   _root ["celda_" + temp].attachMovie ("o_mc", "o_mc", 1);
   triqui [temp] = 0;
   jugadas = jugadas ++;
   for (n = 0; n <= 8; n ++){
         if ((triqui [ganadora [n][1]] == 0) && (triqui [ganadora [n][2]] == 0) && (triqui [ganadora [n][3]] == 0)){
            resultado = "PERDISTE!!!";
            gotoAndPlay("over");
            } else {
               if (jugadas > 8){
                  resultado = "EMPATE";
                  gotoAndPlay("over");
                  } else {
                     gotoAndPlay ("tr1");
                  }
               }
            }
}

esto va en el frame donde esta el tres en linea... y es el llamado de las funciones clikando sobre los espacios del juego....

Código :

stop();

question ="Seleccione una jugada en el triqui";

if (respuesta == 1){
   celda_11.onRelease = function (){
      seleccion (11);
   }
   celda_12.onRelease = function (){
      seleccion (12);
   }
   celda_13.onRelease = function (){
      seleccion (13);
   }
   celda_21.onRelease = function (){
      seleccion (21);
   }
   celda_22.onRelease = function (){
      seleccion (22);
   }
   celda_23.onRelease = function (){
      seleccion (23);
   }
   celda_31.onRelease = function (){
      seleccion (31);
   }
   celda_32.onRelease = function (){
      seleccion (32);
   }
   celda_33.onRelease = function (){
      seleccion (33);
   }
} else {
   turnopc ();
}

el error esta en los if, a pesar de que cumplan la funcion por verdadero, ejecuta lo que hay dentro del else y eso no es logico...

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 09:55 pm
pues creo que tengo razón........
si no ganadora-----> turnopc() y entra a otro for con n tambien
sale de esa funcion y regresa DENTRO DEL FOR ANTERIOR pasando su n al for de seleccion() en el siguiente paso
Resultado: hay casos de bucle infinito!!

solución:
pon var en los 2 for o llama distinto a cada for n y m por ejemplo.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 10:05 pm
cambio una de las variables contadoras a m, y si el turno es del jugador, cuando selecciono un campo me llena los 8 restantes con la jugada del pc!!!! eso esta enredado... por que si el for esta es solo en la evaluacion del ganador por que repite el attach del signo que esta fuera de ese for?? pfff...

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 10:09 pm
cambia tambien los n de dentro del for.


ganadora [n][1]] == 0) && (triqui [ganadora [n][........

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 10:26 pm
ya lo habia hecho

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox
Citar            
MensajeEscrito el 07 Abr 2006 10:51 pm
bueno, creo que ya quitamos un fallo. Y esto enseña el siguiente.
Ahora falla la lógica del juego:
mira la linea de jugada.........si jugamos algo........pasamos el turno a pc.........
pc juega y.........vuelve a tr1........y se encuentra con:
ejecutar el if (respuesta == 1){ celda_11............ etc.
y su else { turnopc () } evidentemente vuelve a jugar pc.
el stop() solo detiene el frame, pero sus acciones se ejecutan. Eso es así.

Debes definir el turno de otra manera.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 07 Abr 2006 11:35 pm
sip, en eso tienes razon, la logica del juego ya la corregi pero aun no termino el codigo, me explico ya evalua correctamente las jugadas y si hay ganador o perdedor me envia a un frame neutro donde me muestra un resultado, pero tengo que modificar el codigo que evalua el empate, me genera un error por ser la ultima jugada, voy a intentar ponerlo a funcionar ahora si no ya sera mañana, te muestro el codigo como quedo:

Código :

function seleccion (celda){
   if (triqui [celda] == ""){
      _root ["celda_" + celda].attachMovie ("x_mc", "x_mc", 1);
      triqui [celda] = 1;
      jugadas = jugadas ++;
      for (n = 1; n <= 8; n ++){
         if ((triqui [ganadora [n][1]] == 1) && (triqui [ganadora [n][2]] == 1) && (triqui [ganadora [n][3]] == 1)){
            question = "GANASTE!!!";
            ganador=true;
         }
      }
      if (ganador==true){
         gotoAndStop("over");
      } else {
      /*if (jugadas > 8){
         resultado = "EMPATE";
         gotoAndStop("over");
      } else {*/
         turnopc();
      }
   }
}


function pcrandom(){
   do{
      temp = opciones [Math.floor (Math.random()*9)];
   } while (triqui [temp]!="");
}

function turnopc(){
   pcrandom();
   _root ["celda_" + temp].attachMovie ("o_mc", "o_mc", 1);
   triqui [temp] = 0;
   jugadas = jugadas ++;
   for (m = 0; m <= 8; m ++){
         if ((triqui [ganadora [m][1]] == 0) && (triqui [ganadora [m][2]] == 0) && (triqui [ganadora [m][3]] == 0)){
            question = "PERDISTE!!!";
            ganador = true;
         }
      }
      if (ganador==true){
         gotoAndStop("over");
      } else {/*
      if (jugadas > 8){
         resultado = "EMPATE";
         gotoAndPlay("over");
      } else {*/
         gotoAndPlay ("tr1");
      }
}

lo de el empate y lo de enviarlo al otro frame lo saque del for y eso soluciono el problema, ahora me pongo en lo del empate y cualquier cosa posteo ;) , de todas formas Muchas gracias Teseo por la atencion y la ayuda, en realidad fue muy util!

Por Finvara

807 de clabLevel



 

EL reino de los duendes...

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.