Red de conocimiento informático - Conocimiento informático - 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.

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("")

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

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!