Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: solsticio en Julio 09, 2015, 06:42:49 PM

Título: crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 09, 2015, 06:42:49 PM
Hola, estoy comenzando a incursionar en game maker, y tengo interés en hacer un sencillo rompecabezas de 9 piezas, que cuando la pieza coincida con el lugar correcto esta queda fija en su lugar, con opción a cambiar las imágenes para hacerlo variado. He buscado afanosamente información en internet al respecto y los resultados han sido prácticamente nulos. Sí fuese posible realizarlo solo con códigos, seria genial, pues es de mi interés aprender a usar los script.
Desde ya les agradezco cualquier ayuda, tutorial y me encamine en esta tarea de programar juegos.
Gracias.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 10, 2015, 12:44:09 AM
¿Qué forma tienen las piezas del rompecabezas? Si son cuadradas o rectangulares se podrían dividir usando surfaces, aunque lo mejor es dividirla desde antes y guardar todas las partes como sub-imágenes de un sprite. Si tienen forma repetitiva (como de "jigsaw") también se podrían recortar en surfaces usando unos srpites como máscaras de recorte, pero en este caso también es mejor recortarlas desde antes. Si tienen formas irregulares o aleatorias serían útiles las primitivas.

También falta saber cómo son los controles o la mecánica del juego. Las piezas se podrían mover entre rieles, o se podrían mover libremente, incluso rotar.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 10, 2015, 02:50:31 AM
Gracias por responder  y mostrar interés en ayudarme. Te explico entonces...ya tengo las piezas cortadas en photoshop , son formas de plantilla jigsaw, las tengo agrupadas en un solo sprite, con sub imágenes del 0 al 8.La room que quiero utilizar de de 1280 x 720, la razón es porque me gustaría que al inicio se mostrara la imagen completa y luego se dispersen de manera aleatoria en su entorno.Cada pieza tiene por dimension 307   x 234, haciendo un area de imagen de 793 x 580. La idea  es que al colocar la pieza en su lugar esta quede atrapada en su espacio y si no es correcta al soltarla se regresa a su lugar de origen.Es una mecánica sencilla para ser jugada por niños , de tal manera que lo que lo haría divertido serian los sonidos, y la posibilidad de poder cambiar las imágenes. Arrastrar y colocar.He leído en algunos recursos de game maker que se aplican las funciones de random y de crear una especie de cuadricula que indica el orden correcto de las piezas, pero como comprenderás, estoy empezando desde cero, y quiero entender la lógica y el procedimiento para poder utilizar el lenguaje de GML.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 10, 2015, 02:58:14 AM
esta es una muestra de como son las piezas,cada pieza tiene una subimagen con efecto de sombra , para crear el efecto tridimensional cuando se agarre, se traslade y se suelte...si necesitas mas información , con gusto puedo ampliarla...y gracias nuevamente por tu solidaridad.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 10, 2015, 12:06:40 PM
La versión que uso es el game maker studio
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 10, 2015, 10:54:13 PM
Estas son mis sugerencias para el juego.

Lo primero es tener las piezas bien alineadas. Cada sub-imagen de los sprites debe tener una forma parecida a la imagen siguiente
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/00_zpslio23tzz.png)
el rectángulo interno es la forma básica de la pieza y el borde sirve para colocar las protuberancias (la mayor parte del borde queda vacía). El sprite debe tener dimensiones pares (alto y ancho), de esa forma el origen puede quedar exactamente al centro.

Al final se tendría un sprite con sub-imágenes como estas
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/01_zps2iiywaxe.png)

Hay que ver qué separaciones se tienen en la rejilla (imaginaria) que contiene las piezas.
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/02_zpspl4wxjds.png)
Las distancias deben ser iguales a las dimensiones del rectángulo base de las piezas, los bordes del sprite no se toman en cuenta porque se empalman.

Si hay nueve piezas, se posicionarán en nueve puntos ordenados como se muestra (el orden puede ser diferente).
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/03_zpss1pkplqh.png)

Vamos a crear un nivel de prueba. Lo primero es mostrar el rompecabezas armado y después desordenarlo. Se deben crear 2 objetos; uno es el objeto pieza y el otro es el objeto controlador (los nombres quedan a tu elección).
El objeto controlador se va a encargar de crear y acomodar la piezas, en su evento Create puede ir este código
[gml]
//Inicializar variables
dx = //distancia horizontal
dy = //distancia vertical
imagen = //sprite que contiene las piezas

//Ciclos para crear las piezas
k = 0; //contador de sub-imagen
for( j=0; j<3; j++ ) //ciclo vertical
for( i=0; i<3; i++ ) //ciclo horizontal
{
    with instance_create( i*dx+x, j*dy+y, obj_pieza )
    {
        sprite_index = other.imagen;
        image_index  = other.k;
    }
    k ++;
}
[/gml]
[Pregunta si no entiendes el código]

Después se tienen que dispersar la piezas, eso puede suceder al terminar la cuenta de un temporizador, o se puede agregar un botón que disperse las piezas.
Se me ocurren dos formas de dispersar las piezas: alrededor del cuadro original o a un lado del cuadro original. Las posiciones finales pueden estar predefinidas o pueden ser aleatorias.
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/04_zpsciekhvnk.png)
¿Cómo quieres hacer la dispersión?

Nos vemos luego.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 11, 2015, 10:33:11 AM
Gracias Clamud por tus orientaciones, ahora con mas entusiasmo, voy a seguir de manera correcta el procedimiento,empezare nuevamente desde cero, pues tendré que ajustar las medidas para crear las dimensiones correctas, mañana tendré elaborado este primer paso, lo subiré y luego te agradecería me orientes hasta el final..nuevamente muchas gracias, pues personas como tu, nos llenas de muchas ganas de seguir adelante..
PD. Con respecto al código, J es equivalente a los puntos en dirección vertical, es decir las columnas p6,p3,p0 ; i es equivalente a las filas p0, p1,p2...
quiero interpretarlo bien para no hacer las cosas de manera mecánica y sentirme cómodo con lo que voy haciendo.Soy muy nuevo en esto y te pido comprensión y paciencia.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 11, 2015, 04:09:23 PM
El ciclo i se repite tres veces y genera las piezas (P0,P1,P2). El ciclo j hace que el ciclo i se repita otras dos veces y entonces genera las piezas (P3,P4,P5) y después (P6,P7,P8), todas en orden.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 12, 2015, 05:05:45 AM
ok, entendido, ahora estoy trabajando en el juego luego subo los primeros resultados...saludos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 13, 2015, 01:54:56 PM
Hola, aquí estoy de nuevo, ya tengo el primer resultado, estoy contento pues ya salio la imagen, un poco desordenada, solo dos piezas estas juntas de manera correcta, voy a revisar el asunto de la alineación de las piezas. El detalle es que no se mueven a ningún lado, que sigue ahora, espero estar haciéndolo bien, Te adjunto imagen del resultado.Espero comentarios, gracias.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 14, 2015, 04:28:02 PM
Me puse a hacer pruebas y ahora veo que obtener piezas bien alineadas es un proceso laborioso. Ahora te comento cómo lo he logrado, lo hice con GIMP, no estoy acostumbrado a usar Photoshop, seguramente se puede usar el mismo procedimiento:


Podemos continuar con el código para arrastrar las piezas. Se me ocurre este método: En el evento Create del controlador se declara la variable global.seleccion = noone;, esa variable contiene el id de la pieza que se arrastra. En el objeto pieza, en el evento Left Pressed se escribe lo siguiente
[gml]
global.seleccion = id;
rx = mouse_x - x;
ry = mouse_y - y;
[/gml]
Si hay varias piezas bajo el puntero, la variable global.seleccion tendrá el id de la que está encima, de esa forma se no se seleccionan varias piezas a la vez. Las variables rx,ry guardan la posición relativa de la pieza a la posición del puntero en el momento de hacer click.
En el evento Step se agrega
[gml]
if( global.seleccion == id )
{
    depth = 0;
    x = mouse_x - rx;
    y = mouse_y - ry;
}
[/gml]
Si la pieza está seleccionada la profundidad se hace cero para que esté encima de las demás piezas (su profundidad normal debería ser mayor a cero), la posición x,y se desplaza al mover el puntero.
En el evento Left Released la pieza regresa a su profundidad normal y la variable global.seleccion se reinicia
[gml]
depth = 1;
global.seleccion = noone;
[/gml]

Algo muy importante, es decidir la forma de la máscara de colisión, que sirve para detectar cuándo se hace click en la pieza. Las opciones: son usar colisión precisa, usar una elipse o usar un rectángulo. La primera no me gusta porque requiere mucho procesamiento (depende de qué tan grande sea el sprite), la segunda es mejor pero es más fácil que las máscaras se empalmen, y la tercera es la que me gusta ya que requiere el menor procesamiento y se ajusta de forma aceptable al sprite.

Lo anterior lo he agregado a un ejemplo (que está adjunto). El ejemplo también tiene un código que hace que la pieza se pegue ("snap") a la posición correcta cuando está cerca. Está en el evento Step
[gml]
else if( point_distance(x,y,xstart,ystart) < 64 )
{
    x = xstart;
    y = ystart;
}
[/gml]
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 14, 2015, 08:00:52 PM
Ok,gracias por tus aportes, ahora voy a la segunda parte, solo me queda una inquietud, cuando todas las piezas están colocadas, de que manera se puede avisar al usuario que las piezas están correctas e invitarlo a jugar otra vez pero con una imagen nueva y a lo mejor si se puede ampliar el desafío a 15 piezas...crees que se podría...es decir tener la opción de usar nuevas imágenes y plantillas con mas piezas. Ah, casi se me escapa...lo de desordenar las piezas con un botón que diga mezclar y las piezas se acomoden ya sea alrededor del marco en una zona especifica, todo ese movimiento para hacerlo atractivo se podría visualizar por el espectador...tal vez estoy pidiendo demasiado..pero es la emoción de mi primer juego.Te adjunto el archivo en photoshop de la imagen recortada y un enlace de como separar las piezas con photoshop.No pude enviar el archivo en Psd...solo el enlace
Saludos.
PD..luego te envío el resultado y los avances.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 15, 2015, 02:15:04 AM
Hola Clamud, estoy mas que requete-contento, al fin logre mejorar la alineación de las piezas,seguí tu sugerencia, pero lo hice con photoshop ya que me es mas cómodo, y bien pues te muestro los resultados. Avance en el menú y el room del juego, con los botones sugeridos.La mecánica es mas o menos así. Cuando se entra al juego se inicia con el room del menú, donde se puede elegir la imagen y la cantidad de piezas del rompecabezas. La imagen del rompecabezas que aparece en el menú es el objeto del sprite, se me ocurre que a lo mejor si este sprite contiene varias subimagenes, con el botón se puedan cambiar. Con respecto al numero de piezas, si en vez de colocarlas ya cortadas, se pone una plantilla en negro y que el draw se encargue de crear cada segmento,...no se si estoy hablando cosas que no son , pero  a lo mejor si se lograra entonces se podrian poner varias plantillas con diferentes numero de piezas...no se si te estoy enredando.Pero la emoción que me esta dando al ver que las cosas van funcionando se me plantean un montón de posibilidades...pero que lamentablemente no tengo ni idea de como se hacen..pero bueno, retomando el caso.una vez hecha las elecciones se pincha el botón jugar que nos manda al room del juego, alli aparece ya la figura cortada, con la opcion de mezclar las veces que uno quiera las piezas del rompecabezas, hasta que se termina el juego y aparece el saludo y felicitaciones.
Un comentario mas ..como hago para que cuando calce la pieza haga plop...bueno no quiero aburrirte...
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 15, 2015, 03:05:18 AM
Todo lo que comentas es posible con GM. Los menús, los sonidos y las animaciones son relativamente fáciles de hacer, lo que es más complicado es recortar la imagen dentro del juego (sobre todo para ti que estás empezando), aunque a veces las cosas complicadas resultan sencillas al final, de todos modos necesitas estudiar un poco sobre primitivas y surfaces. Voy a pensar en un algoritmo sencillo que distribuya las piezas de forma vistosa.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 16, 2015, 03:45:49 AM
Ok, gracias , estaré a la espera, para terminar el proyecto.
saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: ocarina en Julio 16, 2015, 05:03:31 AM
amigo aquí esta la solución

https://www.youtube.com/watch?v=uRaE-NaxFJA (https://www.youtube.com/watch?v=uRaE-NaxFJA)

en la descripción esta el link de descarga del archivo
saludos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 16, 2015, 06:46:28 PM
Ocarina, gracias por el aporte, es una solución alternativa, pero como te fijaras es un puzzle deslizante, el tema de mi proyecto es de puzzle piezas, que se cortan, se revuelven, y se distribuyen alrededor del marco de la imagen para luego ir colocando en ""Drag an Drop".Gracias nuevamente por tu interés en ayudar.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 16, 2015, 08:29:28 PM
Hola Clamud, no quiero ser insistente,pero me podrías ayudar con el código para dispersar las piezas, es que  quiero terminarlo pronto para luego ir mejorandolo con el tiempo, te agradezco como siempre, tu disposición para ayudar.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 17, 2015, 03:39:14 AM
hola, hoy le sucedió algo extraño al juego, me marca error en una variable, no he cambiado nada, pues funcionaba muy bien , a que se debe este cambio inusual. te adjunto foto para ver si encuentras alguna razón por la que me arroja este error.
Saludos y gracias
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 17, 2015, 04:00:53 AM
El error debe estar en el evento Create del controlador, ¿se borró la línea de declara la variable?

Acabo de hacer una actualización al motor, hoy no me va a dar tiempo de dar una explicación, funciona bien en :GM8:, pero hay algunos comportamientos extraños en :GMS: (nada grave). Hasta luego.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 17, 2015, 07:45:02 PM
Ahora sí, comenzaré a explicar el funcionamiento de del proyecto. He procurado hacerlo lo más sencillo posible, aún así, su nivel de complejidad ha aumentado bastante.

También he subido una nueva versión, en la que se soluciona el comportamiento extraño de las piezas. El problema era suponer que al cambiar la depth también se cambia el orden de los eventos de las instancias, como sucede en GM8, sin embargo, en GMS sólo se cambia el orden de los eventos Draw. Al hacer click en una pieza no se seleccionaba la de menor profundidad, en cambio, se seleccionaba la última que fue creada. Al soltar la pieza seleccionada no quedaba encima, y a veces la profundidad cambiaba de forma extraña. El nuevo método de selección evalúa la depth y usa una lista para guardar los ids en orden de profundidad.

El nuevo comportamiento de la variable depth en GMS ha complicado un poco las cosas. Se han empleado algunos recursos que por lo general son difíciles de dominar por los que inician. Esta forma de seleccionar se podría evitar si se diseña un sistema que no permita la superposición de muchas piezas a la vez, no obstante, el diseño de ese sistema es más complicado.
Aunque en GM8 el sistema funciona bien, no es a prueba de errores. El nuevo sistema es más robusto en lo 2 casos.



Primero se han agregado las siguientes variables al controlador
[gml]
btn_mezclar = false; //estado del boton mezclar
global.calzadas = 0; //numero de piezas calzadas
global.lista = ds_list_create(); //para guardar los ids
[/gml]
para entender la última linea, leer Data Structures en el manual.
Cuando se crean las piezas (con el doble ciclo for) también se guardan los ids
[gml]
...
ds_list_add( global.lista, id ); //guardar id
...
[/gml]

Pasemos al objeto pieza. Según la descripción que diste en mensajes anteriores, se pueden identificar 3 estados:
Al iniciar el nivel el rompecabezas está armado, las piezas inmóviles y no pueden ser arrastradas, llamemos CALZA a este estado.
Al presionar el botón "mezclar" las piezas se dispersan, en este estado, que llamaremos MEZCLA, las piezas no pueden ser desplazadas manualmente.
Una vez dispersas, el usuario puede arrastrar las piezas y armar el rompecabezas, el estado se llama ACTIVO.
Cuando el usuario suelta una pieza cerca o en la posición correcta la pieza se bloquea y no puede ser arrastrada, por lo tanto regresa al estado CALZA.
(Siento que los nombres de los estados y las variables no son muy buenos, tal vez puedas mejoralos XD.)

En el evento Create de obPieza se definen los estados
[gml]
///Estados

CALZA  = 0; //en posicion correcta
MEZCLA = 1; //al oprimir el boton mezclar
ACTIVO = 2; //se puede arrastrar

ESTADO = CALZA;
[/gml]
El uso de una variable estado es muy útil en la programación porque evitamos tener que usar muchos objetos y el código queda bien organizado.

El objeto controlador se encarga de dibujar el botón "mezclar", usando el script scTextoBoton, si lo deseas, el siguiente código se puede usar un un objeto aparte que actúe como botón.
[gml]
///Mezclar piezas

//si se presiona el boton mezclar
if( btn_mezclar )
{
    ds_list_shuffle( global.lista ); //desordenar lista
    global.calzadas = 0; //cero piezas calzadas
    //
    with( obPieza ) //con todos los objetos pieza
    {
        ESTADO = MEZCLA; //cambiar estado
        xfinal = irandom_range( 480,768 ); //posicion final
        yfinal = irandom_range( 64, 448 );
        depth = ds_list_find_index( global.lista, id ); //profundidad aleatoria
    }
}
[/gml]
Aquí se emplea la lista para asignar la profundidad, las piezas quedan con una profundidad aleatoria (de 0 a 8 ) sin repetirse. El estado cambia al apropiado. Y las variables xfinal,yfinal se definen aleatoriamente entre los límites de un rectángulo imaginario en la parte derecha de la ventana.

Como las piezas se encuentran en el estado MEZCLA, ejecutan el sig. código en Step
[gml]
///Mezclar

if( ESTADO = MEZCLA ) //mezclando
{
    if mp_linear_step( xfinal,yfinal,32, false ) //mover linealmente
        ESTADO = ACTIVO; //cambiar estado al llegar a la pos. final
}
[/gml]
(revisa el manual por información adicional)
Cuando la pieza llega a su posición final el estado cambia a ACTIVO y se puede arrastrar
[gml]
///Arrastrar

if( ESTADO == ACTIVO ) //si esta activa
if( global.seleccion == id ) //y seleccionada
{
    if( depth <> 0 ) //si la profundidad es diferente de cero
    {
        for( i=depth; i>0; i-=1 ) //para las piezas que tienen menor profundidad
        {
            global.lista[|i] = global.lista[|i-1]; //recorrer un lugar
            global.lista[|i].depth += 1; //aumentar la profundidad
        }
        depth = 0; //esta se coloca encima de otras piezas
        global.lista[|0] = id;
    }
    x = mouse_x - rx; //se puede arrastrar
    y = mouse_y - ry;
}
[/gml]
Aquí se emplea nuevamente la lista y se usa una sintaxis que se explica en la sección Accesors del manual.

Mas tarde continuaré la explicación.  ;)
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 17, 2015, 10:12:08 PM
Gracias Clamoud, tienes todo mi respeto, voy a estudiarlo para digerir mejor los códigos, has sobrepasado mis expectativas. Una pequeña pregunta, en que momento se destruye la informacion de las listas y datos y cuando se reconoce que el juego se ha completado con exito? Ahora voy a descargarlo , probarlo y luego te comento.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 17, 2015, 11:22:13 PM
Antes de profundizar en el código para arrastrar la pieza, es necesario revisar el código para seleccionar; en el evento Left Pressed se tiene lo siguiente
[gml]
///Seleccionar pieza

//solo se puede seleccionar en estado activo
if( ESTADO == ACTIVO )
{
    if( global.seleccion <> noone ) //si hay una pieza seleccionada
    if( global.seleccion.depth < depth ) //y su profundidad de es menor
        exit; //salir
       
    global.seleccion = id; //seleccionar esta pieza
    rx = mouse_x - x; //posicion relativa
    ry = mouse_y - y; // al puntero
}
[/gml]
Primero se revisa que el estado es ACTIVO, después, si ya hay una pieza seleccionada se hace una comparación de profundidades, si la pieza seleccionada tiene una profundidad menor ya no tiene caso continuar y se escribe exit.
Si no se cumplen las condiciones anteriores la pieza actual tiene posibilidades de quedar seleccionada, entonces se guarda el id y se calcula la posición relativa al puntero.

Cuando termina la iteración del código de selección en todas las piezas, la que queda seleccionada se puede arrastrar (en el evento Step)
[gml]
///Arrastrar

if( ESTADO == ACTIVO ) //si esta activa
if( global.seleccion == id ) //y seleccionada
{
    if( depth <> 0 ) //si la profundidad es diferente de cero
    {
        for( i=depth; i>0; i-=1 ) //para las piezas que tienen menor profundidad
        {
            global.lista[|i] = global.lista[|i-1]; //recorrer un lugar
            global.lista[|i].depth += 1; //aumentar la profundidad
        }
        depth = 0; //esta se coloca encima de otras piezas
        global.lista[|0] = id;
    }
    x = mouse_x - rx; //se puede arrastrar
    y = mouse_y - ry;
}
[/gml]
Como en el código previo, se revisa que el estado es ACTIVO, después se revisa que la pieza está seleccionada. Ahora viene la parte complicada, si la pieza tiene profundidad diferente de cero, es posible que esté parcialmente cubierta por otra pieza, pero se necesita que la pieza esté completamente visible, para logar ese objetivo la pieza actual se coloca en profundidad cero y las demás piezas aumentan de profundidad. El siguiente diagrama puede ayudar a entender el algoritmo
(http://i1341.photobucket.com/albums/o747/Clamud/cgm_jigsaw/05_zpsvin1h9vg.png)

Vamos a observar qué sucede al soltar la pieza, en el Evento Left Released
[gml]
///Soltar pieza

if( ESTADO = ACTIVO ) //si esta activa
if( global.seleccion = id ) //y esta seleccionada
{
    global.seleccion = noone; //seleccionar nada
   
    //si esta cerca de la posicion correcta
    if( point_distance(x,y,xstart,ystart) < 64 )
    {
        x = xstart; //plop
        y = ystart;
        ESTADO = CALZA; //cambiar estado
        global.calzadas += 1; //incrementar contador
    }
}
[/gml]
Se reutilizan las 2 primeras líneas, después se indica que no hay nada seleccionado. Abajo se hace el efecto "snap"; se han agregado 2 líneas, una incrementa el contador de piezas calzadas y otra cambia el estado de la pieza. Entre esas líneas se puede reproducir el sonido "plop" que mencionado.

Sólo falta ver el código que determina que el rompecabezas se ha completado. Se encuentra en obControl, en el evento Begin Step
[gml]
///Nivel completado!

if( global.calzadas == 9 )
{
    show_message( "Nivel completado!" );
    global.calzadas = 0; //no mostrar el mensaje otra vez
}
[/gml]
Es bastante sencillo, se comprueba que el número de piezas calzadas es igual al número total de piezas, se muestra un mensaje y la variable global.calzadas se reinicia para no mostrar el mensaje constantemente. En esta demo no ocurre nada mas, bueno, se puede mezclar otra vez. Vale la pena mencionar que la función show_message() sólo se recomienda en Windows.

Esto ha quedado bastante extenso, y eso que es la parte fácil, aún quedan un montón de detalles por agregar y muchas pruebas por hacer. Intentaré ayudar en lo posible, hasta pronto.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 18, 2015, 03:36:18 PM
Encontré un bug, cuando se suelta el botón del ratón y el puntero está fuera de la máscara de colisión, la pieza no se suelta, para arreglarlo cambia el evento Left Released por Global Left Released.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 19, 2015, 01:20:41 AM
me gusta aprender cosas contigo clamud, eres una p... makina, te felicito..
haber si tambien puedes ir explicando como meter mas puzzles y de mas piezas.
saludos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 20, 2015, 03:42:39 AM
hola, estoy de nuevo aquí, y darte infinitas gracias por tus aportes tan valiosos.Estoy anonadado con tanta información, es decir de lo que parecía un proyecto simple para mi se ha convertido un gran desafío.No te imaginas cuanto tiempo pase buscando en la red información para hacer este proyecto que a simple vista pareciera muy superficial, pero cuanta sabiduría has logrado impregnarle.Eres todo un maestro, con mucha paciencia, interés y sobre todo muy didáctico. Solo por curiosidad, has pensado en hacer tutoriales así de esta calidad, con sustentación teórica y con ejemplos demostrativos del comportamiento lógico del uso del GML? .
Comentario aparte, no estoy en contra de los juegos de plataforma, pero este tipo de juegos no violentos invitan a darle una nueva faceta al juego, sin balas sin agresión , ayuda mucho al desarrollo en los niños y adultos. Voy a proseguir con el proyecto y cuando lo tenga completo , con sonidos y uno que otro agregado , si lo tomas a bien, me gustaría enviártelo para compartir los resultados de tu enseñanza.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 20, 2015, 09:09:27 AM
Hola Clamud, estoy batallando con la posición del rompecabezas en la room. Sucede que siempre me aparece en la esquina superior izquierda, el tamaño del sprite es width 322, Height 258, en sus coordenadas  Origin X 161 y 129 , esto da porque esta activado el botón de Center. En la room del juego el rectángulo negro inicia en la esquina x 128, y 64, el formato de la room es de 1280 x 720. En evento del objCntrol Draw, el rectángulo negro lo posicione en 128,64,864,608,false con una depth de 10, porque las piezas se hundían en el área negra y así logre superar ese detalle...he hecho de todo pero no encuentro por donde modificar la posición del rompe..me podrías orientar por donde buscar por favor-.
Gracias, saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 20, 2015, 03:52:19 PM
La posición del rompecabezas se cambia en el evento Create de obControl, en donde dice:
[gml]
with instance_create( i*dx+96, j*dy+96, obPieza )
[/gml]
Los números (96,96) son la posición inicial de la pieza que está arriba a la izquierda.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 20, 2015, 06:39:44 PM
como insertar nuevos puzzles? hay que añadir un nuevo objeto control con la informacion del nuevo puzzle? estoy un poco perdido, pueden guiarme un poco?
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 20, 2015, 08:54:31 PM
Hola Clamud, Musteroix, saludos y gracias por acompañarnos en esta aventura. Ya resolví lo de la posición en la room, peque;os detalles hacen la diferencia...tengo que fijarme mejor, pero ahora me aparecen mucha separación entre las instancias, voy a revisar los sprites, pues creo que por ahi debe andar el asunto. Quiero preguntarles algo, como saber el id de cada pieza, es decir me gustaría que al hacer la colisión en el lugar correcto apareciera una especie de premio(mensaje) con sonido, y si es equivocado pues agregar el sonido de rrrrr y regresa a su lugar inicial,me imagino que se pueden usar alarmas?,... se le podrán agregar mensajes cada dos o tres piezas piezas correctas_...es mucho pedir?_....con lo de la cantidad  de piezas, desde mi novatada lo que hice fue duplicar el obj control y cambiarle el contenido en una nueva room,tengo dos una de 9 piezas y la segunda room  puse a 20 piezas tal vez no es lo ideal pues consume tal vez muchos recursos, pero es lo que se me ocurrió,no se como hacer para cambiar las imágenes( tener varias opciones de imágenes por cada cantidad de piezas , haría el juego bien entretenido..a lo mejor con algún switch como el botón de mezclar, pero no se como hacerlo...tal vez Clamoud nos ayude pronto pues esto se pone cada vez mas interesante.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 21, 2015, 02:26:47 AM
Bien, pensé en la variable imagen para facilitar el cambio de sprite, aunque veo que es mejor que se convierta en una variable global.
Para no modificar tanto los objetos que ya tenemos, se me ocurre crear una habitación que sea el menú principal (o un menú de selección de imagen). Al seleccionar una imagen se debe asignar la variable (ahora global) e ir a la habitación que contiene el objeto controlador:
[gml]
global.imagen = spr_x;
room_goto( rmPuzzle );
[/gml]
En el objeto controlador se deberían borrar las líneas donde se definen las variables que ya fueron definidas por el otro objeto, y agregar la palabra global. donde se necesite. También se podrían asignar otras variables como la separación entre objetos y la cantidad de piezas en horizontal y vertical. El diseño del menú dependerá del tipo de menú.

En código para soltar la pieza se pueden meter los sonidos y disparar otras acciones como las que mencionas. Para el sonido sólo se necesita la función audio_play_sound. El mensaje puede ser una instancia que es creada por la pieza y que se desvanece poco a poco, tal vez quieras que el mensaje mostrado dependa de otras variables como la puntuación, el tiempo, combos, etc., en ese caso se podría necesitar pasar algunos datos al controlador y que éste se encargue de decidir qué mensaje mostrar; por ejemplo para detectar un combo o cadena (varias piezas correctas seguidas) se puede iniciar una alarma en el controlador, si se coloca otra pieza correcta entes de que acabe la cuenta regresiva se incrementa la variable combo. Para regresar la pieza a su posición anterior se puede usar un algoritmo parecido al que se usó para mezclar, es más, se puede usar el mismo código, sólo hay que cambiar el estado de la pieza a MEZCLA.
Quedaría más o menos así:
[gml]
///Soltar pieza

if( ESTADO = ACTIVO ) //si esta activa
if( global.seleccion = id ) //y esta seleccionada
{
    global.seleccion = noone; //seleccionar nada
   
    //si esta cerca de la posicion correcta
    if( point_distance(x,y,xstart,ystart) < 64 )
    {
        x = xstart; //plop
        y = ystart;
        ESTADO = CALZA; //cambiar estado
        global.calzadas += 1; //incrementar contador
        audio_play_sound( snPlop, 1, false ); //sonido plop
       
        if( obControl.alarm[0] > 0 ) //si la alrma continua
            global.combo += 1; //la nueva pieza incrementa el combo
        else //si la alarma ha terminado
            global.combo = 0; //restablecer variable
        obControl.alarm[0] = room_speed; //alarma de 1 segundo
    }
    else //la pieza NO esta en la posicion correcta
    {
        audio_play_sound( snError, 1, false ); //sonido error
        ESTADO = MEZCLA; //regresar a la pos. anterior
    }
}
[/gml]
Debo decir que hacer que la pieza regrese a la posición anterior no me agrada, porque en rompecabezas grandes a veces es necesario poner piezas en posiciones aproximadas para completar varias secciones de forma independiente.

Ya he pensado en formas de cortar las imágenes dentro del juego, pero aún no me decido, ya que todas tiene sus ventajas e inconvenientes.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 21, 2015, 03:02:50 AM
Hola Clamud, gracias por seguir con el tema...tengo un nuevo hallazgo, cada vez que mezclo las piezas, se van duplicando, parece ser que la memoria de las listas se van almacenando en cada tiro, por decirte algo, tengo 6 piezas por cada pieza,valga la redundancia, como lo podría resetear para que empiece con lista nueva y no almacene las anteriores...te pongo una imagen de lo dicho, este juego es de 20 piezas, logre alinearlas bien después de un largo batallar.Ahora, cuando se mezclan , no ve ve tan bonito como tu ejemplo, como son muchas piezas, se aglomeran mucho...se ve muy saturado...a lo mejor para oxigenar y darle aire a la room sera mejor que se distribuyan alrededor del marco, que opinas_.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Julio 21, 2015, 03:28:26 AM
El problema no es la lista, ya que la lista por sí misma no dibuja las piezas, sólo sirve para mantener el orden de profundidad y no tener profundidades repetidas. Para limpiar la lista se usa la función ds_list_clear, también se podría destruir al regresar al menú con la función ds_list_destroy.

Parece que en realidad se están creando más piezas de las necesarias, ¿has modificado el evento Create del controlador?

Distribuir las piezas alrededor del marco es fácil, mañana muestro un ejemplo.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 21, 2015, 05:28:44 AM
Hola Clamud, los códigos no han tenido variación excepto en la posición del puzzle en la room y en el sector donde se distribuyen las piezas al mezclarse,...a estas alturas del juego, ya se me lleno la room de piezas, todavía no estoy seguro si se duplican cuando selecciono las piezas, pero es un comportamiento inusual, pues en el de 9 piezas corre bien....ah, un detalle...quise ponerle el código al botón independiente pero me marco error, supongo que fue porque no borre el draw...borre de nuevo el boton que añadí y también el código adjunto como alternativa, fue entonces que ahora me salio repetido tres veces el que dibuja el draw, voy a seguir revisando para ver donde esta la modificación, por lo pronto te adjunto los códigos, no le veo la falla.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 21, 2015, 11:21:35 AM
Hola Clamud, UUFFF al fin descubrí lo de las piezas que se multiplicaban, sabes cual era el pegon? ja, ja, ja...tenia en la room 4 veces el controlador del rompecabezas, tamaño quebradero de cabeza, ahora estoy enredado con la alarma que me hacen aparecer los mensajes....todavía nada...me atreví a sustituirle el show mensaje del nivel completado por draw_sprite (spr_fel,1,224,544); pero no lo proyecta. ya el juego lo tengo bastante adelantado, por el momento solo son dos juegos, de 9 y 20 piezas, voy a empezar a probar como integrarle mas imágenes y plantillas...sera que si las plantillas se pongan en negro los podrá dibujar el draw y así se evitarían el montón de sprites, solo con la imagen completa que se quiera cortar.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 21, 2015, 09:35:20 PM
Hola Clamoud, no pude poner las variables para los textos, no me sale bien, estoy haciéndolo muy mal...es decir si el rompecabeza es de 9 piezas quiero que salgan en este rompecabezas 3 mensajes, un mensaje por cada  tres piezas correctas indistintamente de su posición, pero en el rompecabezas de 20 piezas quiero que salgan 4 mensajes por cada 4 piezas correctas, independientemente de las piezas,, me estoy haciendo un caos, pues no estoy muy claro como manejar las variables de los textos.Tengo que poner acaso un controlador de los textos independiente  por cada rompecabezas_...Ahora si me complique...Los textos son unas tarjetitas como las del juego monopolio, tengo sus scripts, mi duda es si se podran dibujar directamente los sprites con el draw, como instancias, o tengo que hacerles su objeto para poder aparecer en la room? Gracias por tu tiempo.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 28, 2015, 01:04:38 AM
Hola , lo prometido.Este es el resultado del ensayo de rompecabezas de 9 y 20 piezas.Puede ser mejorado con tus aportes, para que logremos un atractivo y bonito rompecabezas y pueda servir como orientación o guía metodológica para los que nos iniciamos en esto.Gracias a Clamud y mousteroix por incentivarme en poder terminarlo. Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 28, 2015, 12:32:40 PM
excelente aporte solsticio, un buen trabajo, ahora vamos a seguir trabajando y poder hacer de este proyecto un gran trabajo,
clamud eres un makina, haber si puedes hechar una mano en mejorarlo, nos acordaremos de ti cuando seamos millonarios, xdd
saludos a todos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 29, 2015, 12:28:35 AM
alguien puede aportar plantillas de puzzles para photoshop de diferentes cantidad de piezas? 
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 29, 2015, 02:35:00 AM
hola , subo plantillas que pueden ayudarte, lo mejor es aprender a hacerlas sobre todo , el recorte .En Photoshop te sugiero que la linea de las plantillas sea de 1 pixel para evitar que la separación sea muy notoria y se deforme la imagen.En lo que permita la capacidad de subida de este foro los ire subiendo , te adjunto un link para la elaboración de las piezas, debes hacerlo con mucho cuidado .De ello depende el exito de los sprites.
https://www.youtube.com/watch?v=M-a7cWzp7nY
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 29, 2015, 04:59:23 PM
puedes aportar de 20 piezas y de 9 que no logro encontrar, como los que usaste en el proyecto..
graciassss
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 29, 2015, 06:29:19 PM
hola mira de esta forma he implementado el puzzle pero las pestañas de las piezas me aparecen de esta manera, que no encaje bien,,solsticio o clamud o alguien que pueda echar una mano haber que hago mal.

ayudaaaaaaaaaa!!!!!!!
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 30, 2015, 03:08:31 PM
Hola, ajusta estos valores hasta que calcen bien.Estoy preparando unas imagenes para ilustrar como hice las plantillas y los cortes, espero te sirvan.
saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Julio 30, 2015, 03:39:30 PM
Hola estos son los archivos, si tienes alguna duda no dejes de comentar.
Saludos.
Pd. En estos días subiré avances con rompecabezas, ojala Clamud nos de una manito para lograr mejores resultados.Logre hacer un switch para cambiar imagenes, pero no he podido lograr que los recortes negros de la plantilla se conviertan en la imagen seleccionada.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Julio 30, 2015, 10:09:25 PM
excelente tu aporte solsticio, lo suyo seria eso que al elegir una imagen del juego del puzzle esta se cortara automaticamente y se formara la imagen del puzzle, voy a investigar un poco,
espero que clamud nos ayude, pero veo que estará ocupado porque le estoy esperando para otra duda!

Título: Re:crear rompecabezas de 9 piezas
Publicado por: eams1986 en Julio 30, 2015, 11:29:37 PM
Se ve bien el ejemplo. ;)
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 01, 2015, 08:47:59 AM
Hola Clamud, recién subí el primer ensayo del rompecabezas de 9 y 20 piezas, pero quisiera seguir mejorandolo...estoy trabado en el asunto de cortar las imágenes con la plantilla, podrías darnos una pequeña gran ayuda,  porfa...
gracias por todas tus enseñanzas.
saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 03, 2015, 05:59:19 PM
Hola, hice unas ligeras modificaciones a tu ejemplo solsticio.

Lo primero que hice fue editar el sonido click porque tardaba mucho en sonar al seleccionar una pieza, sólo recorté las partes de silencio. Antes de reproducir el click agregué una línea:
[gml]
if( !audio_is_playing(snd_clic) )
audio_play_sound(snd_clic, 1, false); // sonido click //
[/gml]
de esa forma evitamos la superposición de muchos clicks.

Otra modificación a obPiezas es que al momento de calzar una pieza se coloca abajo de todas las demás , es el proceso inverso al que se usó para poner la pieza encima:
[gml]
//enviar al fondo
for( i=1; i<global.k; i+=1 ) //para todas las piezas
{
    global.lista[|i-1] = global.lista[|i]; //recorrer un lugar
    global.lista[|i].depth -= 1; //disminuir la profundidad
}
depth = global.k-1; //esta se coloca abajo de otras piezas
global.lista[|global.k-1] = id;
[/gml]
noten que la variable k, que es declarada en los objetos controladores, ahora es global, y su valor es igual al total de piezas creadas, lo cual es muy útil para saber la profundidad máxima (y otras cosas).

También hice una modificación al área donde se distribuyen las piezas, con el siguiente código se distribuyen alrededor del marco, sin embargo los límites no están bien medidos y se deben mejorar:
[gml]
with( obj_Piezas ) //con todos los objetos pieza
{
    ESTADO = MEZCLA; //cambiar estado
    do {
        xfinal = irandom_range( 1216,16 ); //posicion final
        yfinal = irandom_range( 32, 576 );
    } until (
        xfinal < 150 or
        xfinal > 850 or
        yfinal < 100 or
        yfinal > 600
    )
    depth = ds_list_find_index( global.lista, id ); //profundidad aleatoria
}
[/gml]

Ya comencé a diseñar motor para recortar las imágenes dentro del juego, en unos días mostraré los avances.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 05, 2015, 05:54:37 PM
Hola Clamud, antes que nada darte las gracias por seguir apoyando este esfuerzo para aprender.Estoy trabajando en mejorar la estética y calidad de las imágenes y una animación que servirá de intro al juego.Para dejarlo con una calidad aceptable.Te comentaba en un mensaje anterior resolver el asunto del uso de las variables globales para integrarle dinamismo al juego, es decir el uso de premios, mensajes etc, no entendi bien como interactuar con ellas.A la espera de tus nuevos aportes
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Agosto 06, 2015, 01:29:33 PM
Hola, a todos, voy aportar algo que me dijo un amigo, no se si puede servir para crear el motor de cortar las imagenes, pero de todas maneras lo aporto aver que se puede hacer.

necesitamos aprender a usar surfaces.

ejemplo:
var surf;
surf=surface_create(32,32);
surface_set_target(surf);
spr_custom=sprite_create_from_surface(surf,0,0,32,32,false,false,16,16);
surface_reset_target();
surface_free(surf);
este codigo lo que hara es crear una variable local con el nombre "surf" luego a esa variable se le asigna el valor de crear una surface (superficie) de 32 por 32 pixeles desde la parte superior de la pantalla del room.

luego se establece el target para lo que ocurra sea en referencia a la nueva surface, luego creas una nueva variable y le pones el nombre que quieras(en este caso le puse spr_custom) y le asignas el valor de la nueva imagen creada desde la nueva surface, indicas la surface, luego la posicion x & y(el cual puse 0 0) luego el tamaño del sprite(serian 32x32) donde puse false es para remover el fondo, le puse que no, y luego por ultimo asignas un punto de anclaje el cual puse 16,16(que seria el centro de 32)y listo......

para limpiar y reiniciar la superficie siempre hay que poner los ultimos dos codigos que puse mas arriva...

BUENO ESTO ES TODO... ESPERO QUE SIRVA DE ALGO Y A LLEVARLO A LA PRACTICA.

SALUDOS
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 06, 2015, 11:33:18 PM
Eso que mencionas musteroix es más o menos el método que estoy utilizando, y ya funciona, sólo mea faltan algunos detalles para presentarlo. Otra idea que tengo es usar primitivas, pero al ser las piezas con muchas curvas se usan demasiados polígonos y, por lo tanto, necesitan demasiado procesamiento. En cambio, las superficies se dibujan más rápido.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 11, 2015, 04:40:16 AM
Aquí está un nuevo motor en el que se recortan la imágenes, y para demostrarlo, no hay imágenes dentro del proyecto; se debe cargar una imagen externa para funcionar.

Este proyecto ha cambiado mucho comparado con la versión anterior, los principales cambios están en el objeto controlador, y también hay una gran cantidad de variables globales, eso es lo óptimo porque casi todas las instancias usan las mismas variables.

Cuando un proyecto se hace grande se utilizan muchas variables, en estos casos me gusta escribir una tabla de variables para ayudarme a recordar, para tener una referencia rápida, para evitar variables repetidas, etc. La tabla también está adjunta.

Las piezas se dibujan en superficies, la forma básica de cada pieza se construye combinando (sumando) 4 sprites (que he llamado "clips"), después la imagen se recorta usando la forma de la pieza, estableciendo un "blend mode".
He estado pensando que es mejor construir las formas básicas de las piezas usando el método inverso: restar en lugar de sumar, haré el cambio en la próxima actualización.

La interfaz gráfica es extremadamente sencilla para no complicar el código. La imagen cargada se muestra pequeña para tener suficiente espacio alrededor para distribuir las piezas; si el área exterior forma bandas delgadas se necesitan demasiadas iteraciones para colocar las piezas fuera del marco, si el marco se hace más grande es necesario mejorar el algoritmo que busca una posición libre.

Hay que pensar en una forma de obtener el mejor contraste entre el fondo y las piezas, también me gustaría dibujar un contorno en las piezas, porque en ocasiones las formas se pierden de vista, sobre todo cuando se usan fotografías o imágenes con muchos detalles.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Agosto 12, 2015, 08:57:05 AM
Te felicito..  Se ve que has hecho un gran trabajo,  pero no puedo abrir el proyecto para verlo.  Lo podrias pasar de otra forma? Saludos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 12, 2015, 01:49:45 PM
Si usas GMS, ve a la pestaña Import que aparece al iniciar GMS, o selecciona Import en el menú File. En tipo de archivo o filtro selecciona .gm81
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Agosto 13, 2015, 02:11:16 PM
te felicito, clamud excelente trabajo, todo perfecto, solo faltaria mejorar un poco que no se vea algunas lineas del puzzle,
una dudita, como podria meter fotos en la aplicacion y que me de opcion de elejir las fotos que tenga hay, que no elija fotos de fuera.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 16, 2015, 02:11:45 AM
Hola Clamud,Musteroix, que bien va quedando el rompecabezas, felicidades a ambos.Me queda un par de inquietudes.Si el área en que se desplazan las piezas es bastante amplia y tenemos una cantidad considerable de piezas...se podrán armar las piezas por grupo en el entorno y luego ubicarlas en el tablero?  segunda inquietud...se podría al completar el rompecabezas redimensionar la imagen completa a un tamaño mas grande?....
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 16, 2015, 10:43:49 AM
Hola a todos, les comparto variación del rompecabezas, he dejado los códigos para teclado y añadí botones para ser clikeao con el mouse. Por supuesto que hay mucho que pulir, pero vamos avanzando de a poco y en colectivo que es lo mas importante. En esta variante descubrí un par de bugs que no se como se solucionan.Por ejemplo ..cuando se presiona la tecla mezclar si el puntero esta cerca del botón se le pega una pieza. Cuando se combina el numero de piezas nx:2 ny:4 el sistema  colapsa, por lo menos en esta versión sucede. son pequeños detalles que pueden ser mejorados.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 16, 2015, 03:39:37 PM
¿Cómo es que colapsa? Hice pruebas y parece que funciona normalmente.
Después reviso los otros bugs.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 16, 2015, 04:52:06 PM
Hola Clamud,en la ultima versión que mande, sucede que cuando selecciono en la casilla horizontal el numero de piezas en 2 y en la casilla vertical selecciono el 4 clikeo jugar e ingresa normal al room del juego, pero cuando clikeo mezclar el juego se congela y tengo que reiniciar el GMS, no se si es solo en mi maquina, pero solo sucede con esta combinación. Probé con las demás combinaciones y sí funciona perfectamente.
Un comentario, como podría reducirse el peso del juego, si se optara por incluirse en sus recursos unas 20 o mas imágenes, sin depender del contenido del Pc. considerando que pueda exportarse para Android
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 21, 2015, 05:22:18 PM
Hola, estoy compartiendo avances de la versión del rompecabezas .Le agregue temporizador ajustable por el usuario.Hay muchos detalles que mejorar , pero avanzamos un poquito mas.Seria interesante Clamud , Musteroix,si se animan  a configurar el sistema de elegir las imagenes que vayan por defecto integradas al juego y /u otras ideas para seguir mejorandolo.
Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Agosto 21, 2015, 08:47:07 PM
Que bien, con cada actualización se ve mejor.

Es buena idea la del cronómetro, pero prefiero que no sea configurable, en vez de eso, que inicie desde cero al oprimir el botón mezclar y termine de contar al completar el rompecabezas. Los puntos, premios o records se calcularían tomando en cuenta el tiempo y la cantidad de piezas.

Ya revisé los bugs que mencionaste hace tiempo:
Para que la pieza no se quede pegada al puntero, cambia el evento del botón mezclar por Left Pressed. Sería conveniente cambiar el evento en todos los botones.
El problema de congelamiento sucede siempre que se usa un 2 como cantidad de piezas, ya sea horizontal o vertical, y se debe a que el ciclo para asignar las variables xfinal y yfinal trata de encontrar un lugar donde la pieza no se salga de la ventana y no esté dentro del marco, como la pieza es muy grande nunca se encuentra. Una solución es hacer el marco más pequeño, otra es nunca usar el número 2, y otra es crear otro algoritmo.

Para jugar con imágenes previamente cargadas no hay que cambiar mucho código, sólo hay que agregar los objetos correspondientes al menú de selección de imágenes, eso dependerá del diseño del menú, ¿qué propuestas tienes?
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Agosto 22, 2015, 04:09:01 AM
Hola Clamud, gracias por tus comentarios.Voy a implementar los cambios que mencionaste y seguir adelante.Con respecto a la selección de imágenes pre-configuradas pensaba en 4 categorías. Paisajes, animales, obras de arte, Miscelaneos. Cada sprite sera cada categoria  entre 10 y veinte imágenes, por cada sprite.No se si se mira pretencioso.Como te hice comentario en anteriores escritos, me preocupa un poco el peso y la demanda de recursos por los gráficos, pues estoy pensando que podría usarse en Pc y android. Como comprenderás no tengo experiencia con el game maker, y esta es mi primera aventura. Y por supuesto estoy muy agradecido por tu paciencia y solidaridad , estoy aprendiendo mucho y estoy cada día mas entusiasmado por todas las cosas que uno puede lograr con este programa. Próximamente subiré el juego con la propuesta de menú y con todas las correcciones, nuevamente gracias y saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Agosto 23, 2015, 09:20:56 PM
hola, muy buen trabajo que estan haciendo, cada dia me gusta mas, estoy trabajando en implementar las imagenes en el menu, pero aun no me gusta como queda, estoy intentando hacerlo por niveles que cada vez sea el puzzle mas grande hasta llegar a un record, y con tiempo claro, como ven esa idea?. un saludo en cuanto tenga algo lo subo.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: musteroix en Septiembre 06, 2015, 10:43:44 AM
algo nuevo?
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Septiembre 30, 2015, 03:08:34 AM
Hola, Clamud, Musteroix,amigos todos, estoy aquí nuevamente saludándolos y a la vez les ofrezco mis disculpas por mi ausencia, debido a problemas de enfermedad, asunto superado.Ahora con nuevos ánimos estoy  retomando el proyecto con mas entusiasmado que nunca pues para mi sorpresa hay mas de 2000 visitas en este tema que nos dan indicadores que nuestro pequeño grano de arena puede servir de mucha ayuda a los miembros de nuestra  comunidad.
Solo un comentario...como se podría liberar digamos las descargas de los archivos pues he notado que desde usuario visitante no se puede tener acceso a ellos, y así podrían enriquecerse el juego con mas aportes...que pueden sugerir al respecto.
Bueno, vamos al asunto de la aplicación, que les parece si le damos el acabado final trabajando en los detalles que quedaron pendientes, como incluir las imágenes en el mismo juego, incluirle algunos mensajes de motivación  o pensar en una dinámica de puntos etc.
Tu sugerencia Musteroix es mas que apreciada si tienes algunos avances que podamos ver seria genial. y una inquietud personal, el testeo lo he hecho como un ejecutable pero no se como trabaja en android..alguna idea de como hacerlo.
Saludos y animo, logremos un final feliz para enfrentar nuevos desafíos.
Hasta Pronto.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Octubre 12, 2015, 08:49:54 PM
Hola nuevamente,Clamud, Musteroix y resto de comunidad, comparto con ustedes archivo que encontre, no se quien es el autor para darle el credito correspondiente, pero creo se podria integrar al juego del rompecabezas, y tendriamos un resultado mas completo. Espero sea de utilidad.
Saludos
Título: Re:crear rompecabezas de 9 piezas
Publicado por: carlos81lp en Octubre 13, 2015, 04:15:28 AM
https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xtp1/v/t1.0-9/12079230_1207940169222734_5849985812840831834_n.jpg?oh=f1c4742bae218292a7ed7c8ac1e3cb3b&oe=56CDF60F&__gda__=1452254505_7491fa8458c3975fd2ce24be9f82bf08

Yo hice uno de 16 piezas y 5 imágenes .
Tenes que usar ciclos for y ds_list.
Saludos!!!
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Octubre 13, 2015, 03:17:21 PM
Hola,a todos, subí nuevamente el archivo , ahora es el correcto. La idea que tengo es que puede servir mas o menos para complementarlo como menu de seleccion de las imagenes en el rompeabezas que estamos creando.Entonces el rompecabezas tendria ademas de la funcion de elegir imagenes del archivo de la pc, sus propias imagenes  eligiendo la opcion por medio de un boton tipo selector.Tengo elegidos 6 temas, Animales, Arte, Ciudades, Frutas,Naturaleza, Miscelaneos. Cada tema contiene 10 imagenes. En el ejemplo enviado esta diseñado como mundos y niveles, con funciones de bloqueos y desbloqueos de niveles, que en su momento menciono Musteroix, a lo mejor podriamos adaptarlo y mejorarlo para estos fines .
Saludos.
Título: Re:crear rompecabezas de 9 piezas (menú selección de imágenes)
Publicado por: solsticio en Octubre 21, 2015, 06:15:55 AM
Hola Clamud,Musteroix, amigos todos,retomando lo de completar el rompecabezas,esta es la idea del menú de selección de imágenes que comenté en un escrito anterior.
Se elige el tema, se elige la imagen, se selecciona la modalidad del rompecabezas y luego en aceptar, envía las selecciones al room escogido. Me pegué en hacer que la imagen seleccionada pueda ser trasladada a la room escogida y funcionar en el menú del rompecabezas...podrías darme una ayudita porfa...Adjunto el menú de selección de imágenes que hice, a lo mejor podrías mejorarlo, lo hice con mis escasos conocimientos del GML,aparentemente funciona bien. Las categorías de los rompecabezas están pensados en el de multipiezas que estamos realizando y que por cierto va bastante avanzado, el de piezas deslizantes es la modalidad que va cubriendo el espacio vacío, y el puzzle dinámico es el de sustitución de piezas con otra pieza que toma su lugar.Tengo algunos ejemplos que tomé en internet y que podría subirlos en una entrega posterior.
De antemano te agradezco toda la gentileza por brindar tu tiempo y conocimiento en este proyecto que inició como un simple rompecabezas de 9 piezas y  mira todo lo que ha avanzado gracias a tí y todos los aportes de los compañeros que de una u otra forma han vertido sus comentarios.
Saludos..
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Octubre 28, 2015, 08:12:41 PM
Hola, algún aporte, ayuda, para concluir el juego?
Título: Re:crear rompecabezas de 9 piezas
Publicado por: josesito1432 en Marzo 22, 2016, 06:04:01 AM
hola estuve leyendo y probando los codigos, lo que estuve mirando en otros rompecabezas es que cuando una pieza coicide con otra, se unen y se comvierten en una, o se quedan pegadas, osea siempre y cuando no esten en su poscicion, alguna idea para realizar esto???
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Marzo 22, 2016, 06:57:44 AM
Lo que había pensado, es que cada pieza guarde un array con los ids de las piezas colindantes (por lo general se guardarían 4 ids, pero las piezas de las orillas guardarían 3 o 2). Al momento de soltar la pieza, además de revisar la distancia a su posición inicial, se revisaría la distancia a unos puntos cercanos a la piezas que no se han unido. Cuando una pieza esté pegada a otra, el movimiento que se haga sobre ella se debe transmitir a la otra pieza. Y cuando se coloque en su posición inicial, se debe transmitir a la otra el estado CALZA.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: josesito1432 en Marzo 22, 2016, 11:47:27 PM
hola queria avisar que el surface tiene un error al cambiar de tamaño la pantalla si las piezas estan creadas, puedo hayar una solucion posible, que evita que tiere el error,


en el obcontrol
en su evento create primero devemos almasenar el tamaño de la pantalla en una variable, cualquiera de los dos ya sea su tamaño en x o su tamaño en y..
algo asi..


r_w=window_get_width()





luego en el evento step, chequear que si el tamaño de la pantalla cambia en algun momento , realize alguna ocpio que haga salir de esa rom, ya sea ir una room atras o cerrar el juego o reiniciar el juego como mas le guste,.. yo me fui a una room atras al menu...



if not(r_w=window_get_width()){room_goto("ACA VA LA NOMBRE DE LA ROOM QUE QUIERAS IR")}



eso es todo, lo que si solo funciona en windows en android, no funciona tira el eeror igual, alguien alguna ayuda con esto???
Título: Re:crear rompecabezas de 9 piezas
Publicado por: Clamud en Marzo 23, 2016, 01:27:23 AM
¿Qué dice el mensaje de error? ¿Es este?
Cita de: ErrorTrying to use non-existing surface.

Eso sucede porque las surfaces se borran por varios motivos y no se ha programado un método de protección. La idea es que antes de dibujar la superficie se revise que aun existe, y si no, se debe volver a crear.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Marzo 30, 2016, 04:22:00 PM
Hola Clamud, Josesito1432 y resto de la comunidad, gracias por empujar nuevamente el proyecto del rompecabezas, pero me quedo sin poder realizar el menu de selección de temas e imagenes del rompecabezas, que expuse con anterioridad, pueden echar una manito al respecto. Clamud, te entusiasmaste en hacer el tutorial cuando ya este completo el juego, valdria la pena si consideraras la cantidad de visitas e interes sobre el tema. Saludos.
Título: Re:crear rompecabezas de 9 piezas
Publicado por: josesito1432 en Abril 12, 2016, 09:28:00 AM
hola espero que este tema no haya muerto, con respecto a que la spiezas se peguen si coinciden una con otra sin la necesidad que este dentro de su lugar donde corresponde, osea si una coincide con otra que se peguen y se hagan una por ejemplo
.... queria decir que llegue a conseguir hasta ahora que cada pieza se identiique a que fila y a que columna pertenece,... alguien tiene alguna idea de como relizar lo siguiente,
como detectar cuando una pieza esta arriba,abajo, o algun costado, luego como decir si esa pieza es de la misma fila que se peguen, por ejemplo.

(http://i.imgur.com/GTTsne4.jpg)
Título: Re:crear rompecabezas de 9 piezas
Publicado por: josesito1432 en Abril 12, 2016, 09:39:58 AM
que se pegue en este caso por ejemplo...... que se comviertan en una pieza, el sistema de creacion de piezas es tal cual como se describio en este tema, con surface



(http://i.imgur.com/WyNzgRa.jpg)
Título: Re:crear rompecabezas de 9 piezas
Publicado por: solsticio en Abril 14, 2016, 06:34:04 PM
Hola a todos, gracias josesito1432, Clamud por revivir el tema, yo sigo todavia esperando ayuda sobre como hacer para que el juego pueda llevar  sus imagenes y seleccionarlas a traves de un menu, ademas de poder acceder a las imagenes de la pc, en este caso si se ejecutara en windows, y tener la opcion de hacer una aplicacion con las mismas caracteristicas que corra en android.Saludos