=============
== pin tu ==
=============
idioma:delfos
versión: 0.02
autor: tony (
[email protected])
fecha: 2002.01.13
introducción
=============
La mayoría de los rompecabezas que he visto antes tienen fichas cuadradas, y muchos de ellos sólo se pueden mover intercambiando las posiciones de dos fichas. Se siente tan diferente de los rompecabezas reales que resulta muy incómodo.
No hace mucho, vi un rompecabezas incluido en "La leyenda de Zhao Yun de los Tres Reinos". Sus mosaicos tienen bordes irregulares (con bordes cóncavos y convexos), y puedes arrastrar cualquier mosaico en la ventana. ... Se me ocurrió la idea de crear yo mismo un software similar. (Luego vi un rompecabezas extranjero llamado bjig32. Era muy bueno. Si lo hubiera visto antes de comenzar a desarrollar este programa, tal vez no habría pensado en desarrollarlo yo mismo, porque en mi opinión No hay forma de desarrollarlo un juego de rompecabezas tan bueno como este.)
como lo implemento
===================
Todo el sistema del juego incluye dos clases diseñadas por mí, TTuObj y TTuMng.
TTuObj: se refiere a un mosaico, que es un pequeño fragmento de imagen después de ser cortado. Tiene límites irregulares y puede moverse en el contenedor en el que se encuentra en respuesta a los eventos de arrastre del mouse. Diseñé esta clase para heredar de TObject y luego generar un TPanel y un TImage respectivamente en el constructor (la razón por la que no se hereda de TControl o se hereda directamente de TPanel es porque no estoy muy familiarizado con el uso de vcl para escribir controles. Si puede, vuelva a escribirlo), TPanel se usa para generar formas de bordes irregulares, porque TImage no tiene un controlador y no puede cambiar su forma (creo que sí), y TImage se usa para mostrar imágenes y proporciona eventos del mouse. Además, cada TTuObj también registra los punteros del TTuObj a su alrededor y si se ha establecido una conexión. Esto proporciona la capacidad de determinar si los dos mosaicos están conectados cuando están cerca uno del otro y mover cualquier mosaico detrás de los mosaicos. están conectados. Puede mover los mosaicos a los que está conectado.
TTuMng: es el administrador del juego de rompecabezas. Es responsable de dividir una imagen completa en mosaicos individuales, administrarlos de manera centralizada y determinar si todos los mosaicos están conectados (es decir, el juego ha terminado).
errores conocidos
==========
La eficiencia de todo el sistema sigue siendo muy baja, especialmente cuando se mueve un mosaico, el parpadeo es muy severo. Después de un juicio preliminar, creo que se debe a que cuando se mueve un mosaico, primero se activará el evento PINTURA del mosaico en sí. y luego se activará el evento PAINT del mosaico en sí. El evento PAINT del contenedor donde se encuentra el mosaico, lo que significa que todos los mosaicos se volverán a dibujar una vez. El rediseño de los controles de bordes irregulares es inherentemente ineficiente, por lo que parpadeará así. . Intenté manejar la función de procesamiento de mensajes WM_PAINT de AImage en TTuObj yo mismo (es decir, no se permite volver a dibujar cuando se arrastra el mosaico), pero descubrí que después de mover el mosaico, dejaba una imagen residual por donde pasaba. El juego de rompecabezas de "Three Kingdoms Zhao Yun" fue escrito en DirectX y no hubo ningún parpadeo. Quizás intente escribirlo en DirectX en el futuro.
Espero que puedas unirte y mejorarlo!!!!!!