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.

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.

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.

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

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.

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.

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

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

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.

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.

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.

¿Cómo es que colapsa? Hice pruebas y parece que funciona normalmente.
Después reviso los otros bugs.

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

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.