|
|
Title | Use animation to show how the recursive solution to the Tower of Hanoi problem works in Visual Basic 6 |
Description | This example shows how to use animation to show how the recursive solution to the Tower of Hanoi problem works in Visual Basic 6. |
Keywords | algorithms, recursion, Tower of Hanoi, games, puzzles, Visual Basic 6, VB 6 |
Categories | Algorithms, Multimedia |
|
|
This example is similar to the example Recursively solve the Tower of Hanoi problem in Visual Basic 6 except it uses the following AnimateMovement method to show how disks move from one peg to another.
|
|
' Move the moving disk to this location.
Private Sub AnimateMovement(ByVal end_x As Integer, ByVal _
end_y As Integer)
Const twips_per_second As Integer = 6000
Dim start_x As Integer
Dim start_y As Integer
Dim dx As Single
Dim dy As Single
Dim dist As Single
Dim seconds As Single
Dim start_time As Single
Dim elapsed As Single
start_x = MovingDiskRect.X
start_y = MovingDiskRect.Y
dx = end_x - MovingDiskRect.X
dy = end_y - MovingDiskRect.Y
dist = CSng(Sqr(dx * dx + dy * dy))
' Calculate distance moved per second.
dx = twips_per_second * dx / dist
dy = twips_per_second * dy / dist
' See how long the total move will take.
seconds = dist / twips_per_second
start_time = Timer
' Start moving.
Do
' Redraw.
Me.Refresh
' Wait a little while.
Dim stop_time As Single
stop_time = Timer + 0.01
Do While Timer < stop_time
DoEvents
Loop
' See how much time has passed.
elapsed = Timer - start_time
If (elapsed > seconds) Then Exit Do
' Update the rectangle's position.
MovingDiskRect.X = CInt(start_x + elapsed * dx)
MovingDiskRect.Y = CInt(start_y + elapsed * dy)
Loop
MovingDiskRect.X = end_x
MovingDiskRect.Y = end_y
End Sub
|
|
The code calculates the number of pixels per second it should add to the moving rectangle's X and Y coordinates. It then enters a loop where it adds the needed number of pixels, depending on how much time has elapsed.
Download the example for additional details.
|
|
|
|
|
|
|
|
|