La descripción de la tarea del juego de rompecabezas viene dada por el modelo GOMS, que requiere que el usuario genere aleatoriamente patrones que deben fusionarse a partir de varios gráficos determinados.
1. Cargar imágenes: No es necesario considerar el formato y tamaño de las imágenes. Hay tantas bibliotecas de código abierto disponibles. Si el tamaño es mayor, tendrá un cierto impacto en la segmentación. Puede crear imágenes que se ajusten al tamaño, o reducirlas o estirarlas dinámicamente después de cargarlas. Esto se denomina tamaño esperado.
2. Segmentación de imágenes: lo que se debe considerar es la forma de segmentación, las coordenadas de segmentación y el tamaño del área. Para la forma segmentada, puede ser un segmento de línea recta simple o un segmento de curva irregular, porque considerando las operaciones hacia arriba, abajo, izquierda y derecha del teclado en lugar de hacer clic y arrastrar el mouse, si se usa un segmento de curva irregular , la operación se sentirá muy descoordinada durante la reproducción. En cuanto a las coordenadas de división, también está el tamaño del área. Dividamos el área original en 9 partes iguales por ahora. Después de eso, si está de humor, deje que el usuario elija lentamente la dificultad (cuanto mayor sea la dificultad, más áreas dividirá y menor será el tamaño de cada área), o juzgue la dificultad cambiando automáticamente la actual del usuario. estado... Bueno, hay El estado de ánimo aumenta gradualmente.
3. Hay demasiadas formas de hacer que las imágenes sean aleatorias y desordenadas... Por conveniencia, solo uso tiempo semilla e intercambio simple, que es más o menos así. Entre las 9 posiciones del 0 al 8, primero seleccione 8 y una posición aleatoria del 0 al 7 para intercambiar, luego cambie a 7 y una posición aleatoria del 0 al 6, y luego cambie a 6 y una posición aleatoria del 0 al 5. ...
4. Mueva la imagen para determinar si está completa. Para el primer paso, me tomó algo de tiempo caer en un malentendido al principio, pero un pequeño episodio resolvió el problema de inmediato. Al principio, estaba pensando en cómo darme cuenta mejor del movimiento de la imagen y juzgar hacia dónde se podía mover. Cuando fue posible mudarse, hubo muchos problemas, pero no hubo una buena solución. Me quedé dormido pensando en ello. En mi sueño soñé que había una reunión similar a una reunión de intercambio y yo también estaba en la lista. Entonces planteé la pregunta. Después de un rato, una voz femenina me respondió: "Puedes usar el puntero para recordar los nodos vecinos adyacentes de la imagen..." Antes de que terminara el discurso, de repente me desperté... Este problema estaba perfectamente resuelto... Incluso yo estaba un poco abrumado. Parece que la inspiración no sólo llega cuando vas al baño. Resulta que cuando estás durmiendo... juzgas si está hecho o no, y es mucho más fácil. Solo necesita registrar el estado ordenado antes del desorden y comparar el estado actual de todas las imágenes con el estado original después de cada movimiento. Si es consistente...... bueno, eso es simple. ...
A continuación, se muestran algunos diseños más detallados. Para cada portador de imágenes, espero que no solo pueda almacenar una imagen y mostrarla, porque de esta manera no puede lograr la función que necesito. También necesita algunos otros datos, como el logotipo de la imagen, que es similar. a un número o llamado una identificación para determinar dónde está colocada correctamente la imagen.
Entonces tal vez necesito una coordenada, bueno... Por supuesto, necesito un tipo de datos que pueda almacenar imágenes. Por supuesto, puedo agregar más cosas en el futuro, pero puedo comenzar a escribir código ahora y varias situaciones son impredecibles... Para el diseño de esta clase, pensé en varios métodos en ese momento. La primera es derivar de la clase de imagen que carga la imagen y agregarle los miembros privados necesarios. Luego agregue métodos de acceso. El segundo es derivar de un control que puede cargar y mostrar imágenes, agregar variables miembro del tipo de imagen a las funciones miembro de la clase derivada y algunas otras cosas. El tercer método es una clase relativamente independiente sin ninguna clase base. Parece una bolsa tejida que contiene todos los datos necesarios... De hecho, los tres métodos se pueden implementar, pero el segundo método es relativamente más fácil de implementar, así que. adoptó este método...