vb汉诺塔private function Hnt(n as integer,A,as string,B as string,C as string)
Hnt (n-1),a,c,b
是上面用vb.net编程汉诺塔的函数用vb.net编程汉诺塔的四个参数呀,这是在函数中再次调用本函数
VB 程序设计 (汉诺塔问题)给用vb.net编程汉诺塔你个参考用vb.net编程汉诺塔:
Private Sub hanoi(n As Integer, one As String, two As String, three As String)
If n = 1 Then
Print Tab(5); one; "-------"; three
Else
Call hanoi(n - 1, one, three, two)
Print Tab(5); one; "-------"; three
Call hanoi(n - 1, two, one, three)
End If
End Sub
Private Sub Form_Click()
Dim x As Integer
x = Val(InputBox("请输入圆盘用vb.net编程汉诺塔的个数"))
Print Tab(5); "将"x"个圆盘从A柱移到C柱的移动顺序为"
Call hanoi(x, "A", "B", "C")
End Sub
汉诺塔VB的心得体会VB编写益智游戏“汉诺塔”
海粟/文
《软件报》2007年47期 61-74
【编程引子】
“汉诺塔”问题源自印度的一个古老传说 , 对于它的算法比较常见的是应用递归调用 。在本例中 , 笔者将给大家介绍一种更简单和直观的处理方法 。
【编程分析】
汉诺塔游戏的主要目的是借助B区域,将A区域的五只盘子转移到C区域中,要求每次移动必须从最上层盘子开始,而且必须始终保证小号盘子在大号盘子的上方 。
程序的主要技术点,除了对上述要求的实现外,还要考虑到鼠标拖放盘子以及盘子的定位、排序等内容 。在设计初期 , 笔者首先考虑采用单击选定,再次单击定位的方式来移动盘子,但这样做必须要让程序记住谁是活动盘子,而且操作的直观性较差 。所以 , 最后笔者还是选择了利用鼠标事件来模拟拖动盘子的动作 。
而对于盘子移动后的定位问题,如果单纯靠坐标计算来显然,工作量是非常大的 。所以,笔者在本例中应用了“一个萝卜一个坑”的简单原理 , 将目标位置提前放置好Image控件 , 这样一来,盘子的移动和定位操作都成了对目标控件属性的控制,处理起来变得十分方便 。
【主要代码】
1.程序初始化
程序初始化操作在窗体加载事件中完成,另外它与“重新开始”功能模块的作用完全相同,所以可以通过调用的方式来共享代码 。代码的主要功能是移动步骤清零、在A区域复位盘子,以及清除B和C两区域盘子等,主要内容如下:
Private Sub Command1_Click()
Label4.Caption = 0’移动步骤清零
For i = 0 To 4
Image1(i).Picture = LoadPicture(App.Path"\p"i".jpg")
Image2(i).Picture = LoadPicture("")
Image3(i).Picture = LoadPicture("")
Next i
Call SortImg(Image1, 1080)’对齐盘子
End Sub
其中子过程SortImg是对指定区域内盘子进行居中对齐操作,后文中会有详细介绍 。
2.转移盘子
该过程是整个程序的核心,需要考虑的事件包括从A区至B区和C区、从B区至A区和C区、从C区至A区和B区这样共六种情况,为了简化代码编写 , 笔者在程序中使用了控件数组 。下面是从A区向其它两区转移盘子的代码 , 其它几种情况与之类似:
Private Sub Image1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Index4 Then If Image1(Index + 1).Picture0 Then Exit Sub ’移动操作不合法
If X = 2000 And X = 3200 Then
Call MoveImg(Image1, Image2, Index)’从A向B转移
Call SortImg(Image2, 3420) ’对齐盘子3420为区域中心线X值
End If
If X = 4300 And X = 5700 Then
Call MoveImg(Image1, Image3, Index) ’从A向C转移
Call SortImg(Image3, 5760)
End If
推荐阅读
- 怎么直播面点教程,直播卖面条技巧
- 开机后怎么打开固态硬盘,固态硬盘开机启动项选择
- flutter旅游源码,flutter 游戏源代码
- 电视播放安装什么,电视播放安装什么软件好用
- python函数内变量 python函数里的变量
- 鸿蒙系统怎么控制流量使用,鸿蒙系统的流量开关
- redis数据库可以关闭网络吗,redis连接需要关闭吗
- 小米移动服务器,小米服务器出错怎么办
- go语言监控 go语言监控TCP端口转发