全局变量定义
Type HRDState '华容道的棋局表示state(1 To 12) As Long '棋盘上的12个棋子的当前位置Superid As Long '上一步棋盘的位置编号,0代表无上一步Level As Long '这一不棋局的级别,0代表是开始状态End TypePublic G_Next As CHRDNextPublic G_Save As CHRDSavePublic G_State As HRDState |
应用程序启动
Sub Main()frmHRDMAIN.Show '显示主窗口End Sub<B>CHRDNext封装计算下一步算法的类</b>Dim bs(1 To 12) As Long '棋子的开始状态,接收输入值Dim ES(1 To 12) As Long '棋子的计算结束状态,生成输出值,中间变量Dim hnum As Long '横放的将军的数量,输入值Public iEndNum As Long '计算结束的下一步的数量,输出值Dim SaveEnd(1 To 240) As Long '最后生成的存放结果数组,输出值Public Function getid(id As Long) As Longgetid = SaveEnd(id)End FunctionPublic Sub GetNext(BEGINSTATE() As Long, BEGINHNUM As Long)Dim i As LongDim MoveType As Long '移动方向Dim iend As Long '记录移动结果For i = 1 To 12 bs(i) = BEGINSTATE(i) '初始状态Next ihnum = BEGINHNUM '横放的将军数量iEndNum = 0 '初始化结果数量为0If MoveCaoCao() = 0 Then AddEndFor i = 2 To hnum + 1 '移动横放的将军 For MoveType = 1 To 4 If MoveHtiger(MoveType, i) = 0 Then AddEnd Next MoveTypeNext iFor i = hnum + 2 To 6 '移动竖放的将军 For MoveType = 1 To 4 If MoveVtiger(MoveType, i) = 0 Then AddEnd Next MoveTypeNext iFor i = 7 To 10 '移动小卒 For MoveType = 1 To 4 If MoveFighter(MoveType, i) = 0 Then AddEnd Next MoveTypeNext iEnd SubPrivate Sub AddEnd()'将End数组中的数据添加到SaveEnd中去,最后将iendnum的值加1Dim i As Long For i = 1 To 12 SaveEnd(iEndNum * 12 + i) = ES(i) Next i iEndNum = iEndNum + 1End SubPrivate Sub SortEnd(BeginId As Long, EndId As Long)'将输出结果进行排序,保证小者在前,大者在后Dim i As LongDim j As LongDim Swap As Longi = BeginIdDo While i <= EndId - 1 j = i + 1 Do While j <= EndId If ES(i) > ES(j) Then Swap = ES(i): ES(i) = ES(j): ES(j) = Swap End If j = j + 1 Loop i = i + 1LoopEnd SubPrivate Function MoveFighter(move_type As Long, id As Long)As Long'初始化下一步的数据Dim i As LongFor i = 1 To 12 ES(i) = bs(i)Next iMoveFighter = -1 '初始化返回值Select Case move_type Case 1 'up If ES(11) = ES(id) - 4 Then ES(id) = ES(id) - 4: ES(11) = ES(11) + 4 |

本文介绍了一种使用Visual Basic(VB)编程语言解决华容道问题的方法,通过详细的源代码阐述了解题思路和过程,包括关键函数的实现和全局变量的定义。
最低0.47元/天 解锁文章
768

被折叠的 条评论
为什么被折叠?



