Experimento 1 Realización de la Torre de Hanoi Problema Hay tres bases de torre, llamadas x, y y z. Ahora hay n discos con diferentes diámetros, y los diámetros son más pequeños.
Código principal
1. Inicialización del programa
La operación de inicialización del programa se completa en el evento de carga del formulario. Además, tiene la misma función que el módulo de función "reiniciar", por lo que puedes compartir el código llamándolo. Las funciones principales del código son borrar los pasos en movimiento, restablecer las placas en el área A y borrar las placas en las áreas B y C. El contenido principal es el siguiente:
Private Sub Command1_Click()
Label4 .Caption = 0 'Restablecer pasos en movimiento
Para i = 0 a 4
Image1(i).Picture = LoadPicture(App.Path & "\ p" & i & " .jpg")
Imagen2(i).Picture = LoadPicture("")
Imagen3(i).Picture = LoadPicture("") p>
Siguiente i
Llame a SortImg(Image1, 1080) 'Alinear placas
End Sub
El subproceso SortImg es alinear al centro Las placas en el área especificada se presentarán en el artículo.
2. Transferir placas
Este proceso es el núcleo de todo el programa. Los eventos que deben considerarse incluyen el traslado del área A al área B y al área C, del área B al área A y al área C, y del área. C al área A y al área B. Para simplificar la escritura del código, el autor utiliza una matriz de control en el programa. El siguiente es el código para transferir placas del área A a las otras dos áreas. Varias otras situaciones son similares:
Private Sub Image1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y como único)
Si Índice < 4 Entonces Si Imagen1(Índice + 1). Imagen <> 0 Entonces Salga de Sub 'La operación de movimiento es ilegal
Si X >= 2000 Y X < = 3200 Luego
Llame a MoveImg(Image1, Image2, Index) 'Mover de A a B
Llame a SortImg(Image2, 3420) 'Alinear la placa 3420 con la línea central del área X valor
Fin si
Si X >= 4300 y X <= 5700 entonces
Llama a MoveImg(Image1, Image3, Index) 'Mover de A a C
p>Call SortImg(Image3, 5760)
End If
End Sub
A través del análisis, se puede ver que si hay un plato, no cumple con las reglas del juego y será dado de baja.
Además, el programa utiliza un concepto similar al de "área caliente" en otros software, es decir, al arrastrar el mouse al área B que especificamos, se activará una operación de movimiento real (es decir, el subproceso MoveImg es activado). El código principal es el siguiente:
Private Sub MoveImg(SImg como objeto, DImg como objeto, Idx como entero)
Para i = 0 a 4
Si DImg(i). Imagen = 0 Entonces 'El área actual tiene una posición
Si i > 0 Entonces
Si SImg(Idx).Width < DImg(i). - 1).Width Then 'Ajustarse a las condiciones superiores e inferiores de caza mayor
DImg(i).Picture = SImg(Idx).Picture 'Mover el plato
Salir para p>
Else
Exit Sub 'Salir si la operación de movimiento es ilegal
End If
Else
DImg(i ).Picture = SImg(Idx).Picture 'Hacia la parte inferior del área Mover la placa
Salir para
Finalizar si
Finalizar si
Siguiente i
Si i <= 4 Entonces
SImg(Idx).Picture = LoadPicture("")
Label4.Caption = Label4 .Caption + 1 'Pasos de la operación de actualización
End If
End Sub
En el subproceso de movimiento, la base principal para determinar si la posición está vacía es si la propiedad Imagen del control Imagen objetivo es 0; cuando se sabe que la posición está disponible, se juzgará más a fondo si el tamaño de la placa debajo de la posición actual es mayor que la placa actual (es decir, la determinación de). las reglas del juego), si se cumplen las condiciones, la operación de movimiento se puede completar pasando el valor del atributo Imagen, finalmente, se debe borrar la placa de posición de origen y se debe registrar la operación en número de pasos;
3. Alinear placas
El subproceso SortImg está involucrado en los dos módulos anteriores. Su función principal es alinear las placas en el área. Esta es una medida importante para embellecer el efecto de ejecución del programa. Al mismo tiempo, en esta parte también se agrega el juicio de victoria y pase del juego (es decir, se realiza un juicio para cada paso de transferencia). El código principal es el siguiente:
Private Sub SortImg (). Img como objeto, IntCenter como entero)
Para i = 0 a 4
Img(i).Left = IntCenter - Img(i).Width / 2
Siguiente i
Para i = 0 a 4
Si Imagen1(i).Imagen <> 0 Entonces salga para
Si Imagen2(i). Imagen <> 0 Luego salga para
Siguiente i
Si i > 4 Entonces MsgBox "Felicitaciones: ¡Lo logró!", vbOKOnly + vbInformation, "Victoria"
End Sub
Posdata de programación
Cuando te enfrentas a algunas funciones de programa aparentemente complejas, si las estudias detenidamente, siempre surgirán buenas ideas y métodos. Este ejemplo implementa la idea de diseño básica del juego Tower of Hanoi. ¡También puedes mejorarlo en términos de número de placas, número de clasificaciones de pasos, etc. para hacer que el programa sea más rico y emocionante!