龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

用VB编写Hanoi塔问题动态演示程序[组图](5)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
Private Function pillarnum(ch As String) As Integer pillarnum = Asc(ch) + 1 - Asc("A") End Function Private Sub fixpillar(pillarABC As String) 纵坐标减10只是为了显示时看的效果更好一些

Private Function pillarnum(ch As String) As Integer

  pillarnum = Asc(ch) + 1 - Asc("A")

End Function

Private Sub fixpillar(pillarABC As String)

  '纵坐标减10只是为了显示时看的效果更好一些,其实是不应该减的,减了后柱子底端纵坐标与底线上沿纵坐标就不一致了

  If pillarnum(pillarABC) < 3 Then

    Form1.Line (pillarnum(pillarABC) * 4000 - 5, 700)-(pillarnum(pillarABC) * 4000 + 5, hLevel - 10), vbBlack, BF '修补柱子

  Else

    Form1.Line (pillarnum(pillarABC) * 4000 - 5, 700)-(pillarnum(pillarABC) * 4000 + 8, hLevel - 10), vbBlack, BF '修补柱子

End If

   另外,需要注意的一点是当盘子垂直移动时,在盘子的原位置重新绘制盘子为窗体背景色时,由于会导致一段柱子也会被覆盖成窗体背景色,因此在原位置绘制盘子为背景色之后应立即重新绘制一次柱子。

   由于目前技术水平下PC机的CPU性能比较高,程序的执行时间非常短,为了得到一个适度缓慢的盘子移动速度,在盘子移动到下一个位置时应该暂停一个时间段。本程序中通过设置一个延迟函数以达到目的,当盘子从子路径的一端移动到另一端时立即调用自定义延迟函数delay(),delay()函数只是起到暂停程序执行的作用,不执行任何改变盘子现状的指令。一个delay()函数的例子如下:

Private Sub delay()

  Dim tt As Double

  tt = Timer

  While Timer - tt < 0.001 '延迟

    DoEvents

  Wend

End Sub

  4 结束语

   本文实现了一个完整的Hanoi塔问题动态演示程序,由用户输入盘子数,盘子数目限定在1至10之间,盘子太多,屏幕显示不下。程序编写、运行环境为windows xp+vb6.0,屏幕分辩率为1024×768,程序运行界面如图2所示。

图2 程序运行界面

精彩图集

赞助商链接