Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - JohnW

61
Cita de: Clamud en Abril 26, 2016, 06:15:35 PM
Lo que falta es dibujar el texto justo después de definir sus características:
[gml]
draw_set_color(c_white);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
draw_set_font(fnt_texto1);

draw_text( x,y, texto );
[/gml]
Y el código debe estar en el evento Draw.

Sisi eso ya lo sé, solo he puesto ese código como ejemplo, a lo que me refiero es que si yo dibujo un texto con su color, alineación, fuente y demás... luego si creas otro objeto diferente para dibujar otro texto y quieres que este otro sea de otro color al anterior y diferente alineación y fuente, pues al colocar ambos objetos en la room uno de los 2 opta por coger el código del otro para que ambos textos sean iguales y no diferentes.

A eso me referia.

¿Es posible hacer esto?
62
Hola amigos!
Tengo una pequeña duda con los textos dentro del juego. Cuando quieres poner varios objetos de texto todos cogen el mismo estilo y no son independientes, es decir.
Yo creo un objeto de texto con
[gml]draw_set_color(c_white);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
draw_set_font(fnt_texto1);[/gml]
Bien pues si luego creo otro objeto con otro texto, y le pongo que este segundo sea de otro color y que en vez de alinearse al centro se alinee por ejemplo a la izquierda... pues el primer texto no hace caso a su programación y obta por coger la programación de su segundo objeto o viceversa.

Me explico? Entonces la pregunta es ¿como se puede poner varios textos con varios estilos cada uno de fuentes, colores y alineaciones sin que este afecte a los demas textos?

He probado con cosas asi y nada
[gml]with (obj_texto1){
     draw_set_color(c_white);
     draw_set_halign(fa_center);
     draw_set_valign(fa_middle);
     draw_set_font(fnt_texto1);
}
with (obj_texto2){
     draw_set_color(c_lime);
     draw_set_halign(fa_left);
     draw_set_valign(fa_left);
     draw_set_font(fnt_texto2);
}[/gml]
Esto lo he probado de poner todo en un mismo objeto o cada with en su respectivo objeto y no funciona de ninguna manera.

Gracias!
63
Cita de: NiuWeb en Abril 26, 2016, 04:24:42 AM
¿Al final fue el break lo que lo solucionó?
Como no se me ocurrió antes  :'( :-[ xD

PD: Vampy, en GM no es necesario este cambio de operador, la comprobación funciona perfectamente igual con los dos operadores, ni tampoco son necesarios los paréntesis.
Probé las dos formas que me dijiste, primero hize lo del show_message y si que funcionaba aunque el show_message al saltar en la pantalla la ventanita esa, saltaba 5 o 6 veces seguidas.
Pero al ponerlo todo como antes, y añadir el break; quedó perfecto :)

Yo la verdad tampoco había caído en eso pero más que nada por que pensaba que el código break; solo se usaba en los scripts cuando hacias una lista de opciones por ejemplo para un menú pero desconocia que también se usáran en el resto del programa.
:) Me queda mucho por aprender aún.
64
Genial!!
Ahora si funciona, me sale el mensaje de incorrecto y el panel no suma 72 en ningún caso, me sale el mensaje de incorrecto si el panel suma 72 pero hay algún número que está repetido y me sale el mensaje de correcto si el panel suma 72 y ningún circulo se repite con otro. :)

Gracias por tu ayuda y paciencia NiuWeb, eres un crack!
65
He copiado ese código tal cual y he añadido en el mismo "btn_confirmar" en "Create" el código[gml]llamada = true[/gml]
Pero sigue pasando lo mismo, rellenas los circulos con cualquier número que este repetido en otro circulo y me lo da por válido no me dice que la combinación no es correcta.

Yo creo que el código solo ve que el panel suma todo 72 y no hace caso al primer código para verificar si hay algún número repetido.

Lo de las alarmas despues de cada mensaje no tiene nada que ver con esta parte del juego, es simplemente que yo tengo una ventanita en el juego donde salen todos los mensajes para que el usuario vaya leyendo lo que el juego le dice y tras sacar X mensaje pues salta la alarma en 90 pasos y lo que hace esa alarma es que la variable de mensajes la ponga en cero, es decir que borra el mensaje que a escrito para que la ventana quede limpia.

A lo que iba, que no me detecta si los números se repiten, me lo da válido siempre que el panel sume un total de 72 puntos.
66
Acabo de darme cuenta que en la parte del código [gml]for(var i = 0; i < array_length_1d(global.circulo); i++) {[/gml]
tenía puesto global.circulo y se lo he quitado.

Ahora con ese cambio, si rellenas los circulos con los mismos números repitiendolos, me lo da por válido sin hacer caso al primer código que tendría que verificar si hay alguno repetido.

El código actualmente lo tengo así[gml]var lista = ds_list_create();
var circulo, add;
for(var i = 0; i < array_length_1d(global.circulo); i++) {
    circulo = global.circulo;
    add = ds_list_find_index(lista, circulo);
    if add = -1
        ds_list_add(lista, circulo);
    else
    global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90
        //Error, un círculo tiene el mismo valor que otro
}
ds_list_destroy(lista);

var n = 0;
for(var i = 0; i < array_length_1d(global.circulo); i++) {
    n += global.circulo;
}
if (n != 72)
    {global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90}
else
   { global.mensaje = string("¡PERFECTO! Has resuelto este juego.")}[/gml]
67
Cita de: NiuWeb en Abril 26, 2016, 03:19:56 AM
El error es que estás intentando, en alguna parte del código en el evento <left pressed>, leer un array llamado global.circulos, cuando el array se llama global.circulo
Vale, he cambiado esa variable por circulo quedando el código de tal manera[gml]var lista = ds_list_create();
var circulo, add;
for(var i = 0; i < array_length_1d(global.circulo); i++) {
    circulo = global.circulo;
    add = ds_list_find_index(lista, circulo);
    if add = -1
        ds_list_add(lista, circulo);
    else
    global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90
        //Error, un círculo tiene el mismo valor que otro
}
ds_list_destroy(lista);

var n = 0;
for(var i = 0; i < array_length_1d(global.circulo); i++) {
    n += global.circulo;
}
if (n != 72)
    {global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90}
else
   { global.mensaje = string("¡PERFECTO! Has resuelto este juego.")}[/gml]
Ahora no me tira ningún error pero ponga el número que ponga en los circulos, me salta el mensaje que tengo predefinido como error.[gml]global.mensaje = string("La combinacion no es correcta.#Sigue probando.");[/gml]
Y aunque ponga los números correctos y sin repetir ninguno para pasar el nivel, al darle a confirmar me sigue leyendo esa parte del código y no la parte esta[gml]{ global.mensaje = string("¡PERFECTO! Has resuelto este juego.")}[/gml]
68
Buenas de nuevo!
He borrado todos los códigos "Create" de cada circulo y he creado en un "obj_control" en "Create" el código [gml]global.circulo[7] = 0;[/gml]
He probado que al clicar cada circulo siga funcionando la suma de números y funciona correctamente.

En el botón "btn_confirmar" en el evento "Left Pressed" he copiado tal cual tus códigos de esta manera[gml]var lista = ds_list_create();
var circulo, add;
for(var i = 0; i < array_length_1d(global.circulos); i++) {
    circulo = global.circulos;
    add = ds_list_find_index(lista, circulo);
    if add = -1
        ds_list_add(lista, circulo);
    else
    global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90
        //Error, un círculo tiene el mismo valor que otro
}
ds_list_destroy(lista);

var n = 0;
for(var i = 0; i < array_length_1d(global.circulo); i++) {
    n += global.circulo;
}
if (n != 72)
    {global.mensaje = string("La combinacion no es correcta.#Sigue probando.");
        alarm[0] = 90}
else
   { global.mensaje = string("¡PERFECTO! Has resuelto este juego.")}[/gml]
Y al clicar dicho botón dentro del juego, me salta el error[gml]Push :: Execution Error - Variable Get -5.circulos(100031, -2147483648)
at gml_Object_btn_confirmar_2_LeftButtonPressed_2 (line 8) - for(var i = 0; i < array_length_1d(global.circulos); i++) {
############################################################################################[/gml]
69
Hola NiuWeb, otra vez por aquí, es que no consigo entender como va esto. Si podrias decirme donde poner cada código te lo agradecería, porque ando bastante perdido y por muchas pruebas que yo haga, no entiendo mucho como funciona.

Te explico lo que he echo hasta ahora.

1. En cada botón circulo, en el evento "Create" he puesto [gml]global.circulo[7] = 0;[/gml]
el mismo código en los 8 circulos eh con el [7].

2. En cada botón circulo en el evento "Left Pressed" he puesto [gml]global.circulo[0] += 2;[/gml]
pero en cada circulo hasta el 8 he ido cambiando el
  • por 1,2,3,4,5,6 y 7.
    3. En cada evento "Draw" de cada botón, he echo que dibuje los números de tal variable encima de cada circulo.

    Hasta ahí todo funciona bien, das click en los circulos y te va sumando los números de cada uno de 2 en 2 ya que los números tienen que ser pares.

    El problema ahora es que el código que tu me pusiste primero, para verificar que no se repita ningún número en los circulos y que todo sume 72 para pasarte la pantalla... no se como y donde ponerlo.

    lo puse todo en el botón de confirmar que tengo en "Left Pressed" pero me tira error porque seguramente ahí no va.
    Y claro el botón confirmar es lo que a de verificar que al pulsarlo, lea todos los circulos y me tire un mensaje de error si hay alguno repetido o no suman 72 o me tire un mensaje correcto si no hay nada repetido y todo suma 72.

    ¿Me podrias guiar en esto último please? Soy un poco novato aún en esto.
    Luego me dado cuenta que en el código me pones la global.circulos como si fuera una general, pero yo esa global general no la tengo porque lo hacia indicivuales y claro al quitar todas las variables para crear la lista que tu me dijiste pues ya no me sirve ese metodo.

    Gracias por tu paciencia!
70
Nada, sigo sin poder hacer funcionar el sistema que yo quiero. ¿Alguien se le ocurre de que otra manera podría hacerse? Teniendo en cuenta lo que he comentado antes, de que cada circulo es un boton que va cambiando el número y una vez puestos todos... el usuario tiene que dar a otro boton "confirmar" y que ese boton verifique el tablero.

Gracias.
71
Cita de: NiuWeb en Abril 25, 2016, 04:56:19 AM
Hmmm... Lo que quieres es tener una serie de variables asignadas, todas con un valor X de los posibles: {2,4,6,8,10,12,14,16,18}.

Si hay alguna variable que tenga el mismo valor que la otra, dar error.
Si todas son diferentes, pero la suma de éstas no es 72, dar error.
Si todas son diferentes, y la suma de éstas sí es 72, aprobar.

(Antes que nada recomiendo que uses arrays en vez de diferentes variables para optimizar memoria)
Entonces, se me ocurre que podrías insertar los datos de las variables en una lista si este dato no existe, pero de hacerlo, saltar error.

Gracias por la respuesta ta rápida, te explico. Esto no me sirve o no lo se hacer funcionar bien. Te explico más detalladamente.
Cada circulo tiene asignada una variable distinta "global.circulo1" 2, 3, 4 asi hasta 8 circulos, por que cada circulo es un botón que al ser pulsado suma 2 puntos a la variable esa y si es mayor que 16 la pone en 0 y vuelve a empezar.

Entonces lo que me has puesto no me serviria por que no es una lista para ir sumando números si no que son variables diferentes para que el jugador vaya pulsando los botones y cambiando su número y en el circulo se ve con un "draw" el número que está saliendo en ese momento.

No se si me explicado bien, entonces lo que es el juego son clics en botones y luego aparte tengo la variable contador y otra variable que me suma los circulos por parejas para verificar que cada una sume 18 (que es el reto del juego, 2 circulos tienen que sumar 18 pero sin repetir ningún número).

A lo que voy, si cada circulo es un botón, como podría hacer para hacer eso que tu dices? y de que manera? tendría que modificar todo lo que llevo de juego, imagenes, diseño, y tal?

Te pongo una imagen de los circulos para que lo veas más claro.

EDITO: En el juego tengo un botón aparte que es el de confirmar, que al ser pulsado comprueba todos los circulos "de ahí el primer código que he pegado"

72
Hola amigos!
Aver si me podeis ayudar, estoy creando un juego matemático en el cual debo comprobar que unas variables no sean iguales que otras y si lo fueran que de error y si no lo fueran lo de por correcto.
Me explico mejor, el jeugo trata de resolver unos rompecabezas de números colocando unos números que yo tengo asignados en cada variable pero que no los puedan repetir por ejemplo si variable1 = 1 y variable2 = 1 (error) algo asi.

Tengo puesto este código:
if (global.circulosarriba)+(global.circulosizquierda)+(global.circulosabajo)+(global.circulosderecha) = 72
{
    if (global.contador2 = 72)
    {
        if (global.circuloclick1)and(global.circuloclick2)and(global.circuloclick3)and(global.circuloclick4)and(global.circuloclick5)and(global.circuloclick6)and(global.circuloclick7)and(global.circuloclick8) != (global.circuloclick1)and(global.circuloclick2)and(global.circuloclick3)and(global.circuloclick4)and(global.circuloclick5)and(global.circuloclick6)and(global.circuloclick7)and(global.circuloclick8)
        {
            global.mensaje = string("¡PERFECTO!#Has conseguido resolver el juego.");
            instance_create(room_width/2,room_height/2,obj_cargando);
            //instance_create(room_width/2,room_height/2,obj_combinacion_correcta);
        }
    }
    if (global.contador2 = 72)
    {
        if (global.circuloclick1)and(global.circuloclick2)and(global.circuloclick3)and(global.circuloclick4)and(global.circuloclick5)and(global.circuloclick6)and(global.circuloclick7)and(global.circuloclick8) = (global.circuloclick1)or(global.circuloclick2)or(global.circuloclick3)or(global.circuloclick4)or(global.circuloclick5)or(global.circuloclick6)or(global.circuloclick7)or(global.circuloclick8)
        {
            global.mensaje = string("¡La combinacion no es correcta.#Sigue probando.");
            alarm[0] = 90;
            //instance_create(room_width/2,room_height/2,obj_combinacion_correcta);
        }
    }


Como podéis ver en la primera variable "if (global.contador2 = 72)" compruebo que globalcirculo1 and 2 and 3, etc... no sea igual que globalcirculo1 and 2 and 3, etc... le he puesto != que significa a mi entender una negación.

Y justo debajo le puesto lo mismo pero solo = sin el !, para comprobar que si son iguales entre ellos que de error.

El problema viene en que si por ejemplo en un circulo pones 16 y en otro 2 para hacer 18 y repites eso en los 6 restantes (son 8 circulos) el juego me lo verifica como error correctamente, pero si pones 16-2,14-4, y acto seguido pones otro 16-2, es ahi cuando me lo sigue contando como correcto y deberia ser errónea.

No se si me he explicado bien.

Lo que necesito es crear un código que sea capaz de verificar si alguno de los números que hay en cada circulo esta repetido en otro circulo pues que de incorrecto y que si de lo contrario no hay ningún número repetido y todo el panel suma un total de 72 puntos, pues que lo de por correcto.

Los números disponibles en la partida son: 2,4,6,8,10,12,14,16,18.

Gracias por la ayuda!!