Hola amigos,
¿alguien le puede hechar un vistazo a este código y decirme porque no hace caso de lo que le intento decir?
¿Que puede estar mal? o ¿De que otra manera se podría hacer esto?
[gml]if (n != 36)
    {global.mensaje = "La combinacion no es correcta.#Sigue probando.";
        alarm[0] = 90}
else
{
   if global.level3[0]-global.level3[3] and global.level3[3]-global.level3[0] = global.level3[4]{
   if global.level3[1]-global.level3[2] and global.level3[2]-global.level3[1] = global.level3[6]{
   if global.level3[0]-global.level3[1] and global.level3[1]-global.level3[0] = global.level3[5]{
   if global.level3[3]-global.level3[2] and global.level3[2]-global.level3[3] = global.level3[7]{
   global.mensaje = "¡PERFECTO! Has resuelto este juego."
   instance_create(room_width/2,room_height/2,obj_cargando);}}}}}
}else{
    global.mensaje = "La combinacion no es correcta.#Sigue probando.";}
if llamada == true {
    alarm[0] = 90;
    llamada = false;
}[/gml]

Explico de que va el código, la cosa es que al acabar una pantalla me verifica si "n es igual o no a 36" y de ser igual, tiene que comprobarme si las las restas "if global.level3[0]-global.level3[3]" es igual que el resultado de su otra variable "global.level3[4]".

Y tiene que hacer la misma comprobación en las otras 3 variables que tiene.

#1 Abril 28, 2016, 03:35:48 AM Ultima modificación: Abril 28, 2016, 03:38:22 AM por NiuWeb
El error, si no me equivoco, puede estar en las comprobaciones, en esta parte:
[gml]
global.level3[0]-global.level3[3] and global.level3[3]-global.level3[0]
[/gml]
Esta expresión sólo devolverá un valor booleano. Es decir, de la siguiente forma:

Los primeros dos valores antes del and (global.level3[0]-global.level3[3]) devolverán un número x. Si este número es mayor a 0.5, se tomará como true; de lo contrario, se tomará como false.

Lo mismo con la segunda (después del and), y los resultados serían uno de estos:
[gml]
true and false //'true' es el resultado de la primera resta, y 'false' el de la segunda... Esta expresión devuelve 'false'
false and false //Devuelve 'false'
false and true //Devuelve 'false'
true and true //Devuelve 'true'
[/gml]
Si sabemos que true es 1, y false es 0, también sabemos que en esta condición:
[gml]
if global.level3[0]-global.level3[3] and global.level3[3]-global.level3[0] = global.level3[4]
[/gml]
La variable global.level3[4] debe tener sólo un valor entre 0 y 1 (dependiendo del resultado de la expresión anterior).

Bueno, creo que es ese el problema. Para solucionarlo podrías alargar la condición así:
[gml]
if (global.level3[0]-global.level3[3]) = global.level3[4] and (global.level3[3]-global.level3[0]) = global.level3[4]
[/gml]
alaberga regué el café.

BA:STFW&RTFM

Gracias NiuWeb me a funcionado, pero he cambiado los "and" por "or" ya que la misma resta no puede dar el mismo resultado de derecha a izquierda que de izquierda a derecha asi que lo cambie a "or" para que cualquiera de las dos maneras sea válida. ¿Funciona así esa expresión no?

Por otra parte me encuentro con otro pequeño problema, las llaves de cierre supongo que son el problema y que depende de como esten puestas en esa parte del código funcionan unas cosas y otras no. Te explico.
[gml]if (n != 36)
    {global.mensaje = "La combinacion no es correcta.#Sigue probando.";
        alarm[0] = 90}
else
{
   if (global.level3[0]-global.level3[3]) = global.level3[4] or (global.level3[3]-global.level3[0]) = global.level3[4]{
   if (global.level3[1]-global.level3[2]) = global.level3[6] or (global.level3[2]-global.level3[1]) = global.level3[6]{
   if (global.level3[0]-global.level3[1]) = global.level3[5] or (global.level3[1]-global.level3[0]) = global.level3[5]{
   if (global.level3[3]-global.level3[2]) = global.level3[7] or (global.level3[2]-global.level3[3]) = global.level3[7]
   {
    global.mensaje = "¡PERFECTO! Has resuelto este juego."
    instance_create(room_width/2,room_height/2,obj_cargando);
   }
else
   {global.mensaje = "La combinacion no es correcta.#Sigue probando.";}
if llamada == true {
    alarm[0] = 90;
    llamada = false;
}}}}}}[/gml]
Como ves en todos los IF de antes he cambiado por "or" pero todo lo de abajo pasará siempre y cuando pase la primera condición, verdad? Entonces, si nada de eso pasa... me tendría que sacar el[gml]{global.mensaje = "La combinacion no es correcta.#Sigue probando.";}[/gml] que hay despues de else y no me lo saca directamente no me saca el mensaje, solo me lo saca si n != 36, en ese caso si funciona pero en el de abajo no.

He de decirte que antes de poner las condiciones "IF" si que mostraba el mensaje eh, así que deduzco que el código está mal ordenado en cuestion de llaves y tal.

¿Me lo puedes mirar?

Hola otra vez, he estado haciendo cambios en el código para intentar resolver el misterio de porque no salta el "ELSE".
[gml]if (n != 36)
    {global.mensaje = "La combinacion no es correcta.#Sigue probando.";
        alarm[0] = 90}
else
   {
    if (global.filaarriba) = (global.level3[4]){
    if (global.filaabajo) = (global.level3[6]){
    if (global.columnaizquierda) = (global.level3[5]){
    if (global.columnaderecha) = (global.level3[7])
    {
        global.mensaje = "¡PERFECTO! Has resuelto este juego."
        instance_create(room_width/2,room_height/2,obj_cargando);
    }else{
        global.mensaje = "La combinacion no es correcta.#Sigue probando.";
        alarm[0] = 9
    }}}}}
}[/gml]
El código funciona bien cuando se cumple esta parte[gml]if (n != 36)
    {global.mensaje = "La combinacion no es correcta.#Sigue probando.";
        alarm[0] = 90}[/gml]
El resto no consigo hacer que funcione, en teoría tendria que verificar que si lo de arriba se cumple entonces compruebe si esas 4 variables son iguales que las otras 4 y de ser así que salte el mensaje de correcto y de no ser así que salte el mensaje de no es correcto.

Pero por alguna extraña razón no funciona y no logro saber porque.
Una ayuda a los profesionales please!

Ya esta solucionado!!

El error era que solo estaba especificando un mensaje de error a una sola condición "IF" cuando tengo 4 condiciones "IF". La solución era poner el mensaje de error al final de cada una de las llaves de cierre de cada condición "IF". Por eso no me leia el mensaje de "no es correcto" porque ese mensaje solo es válido si la última condición falla y no las demás.