最近老师要我们编个扫雷的程序,上课没好好听,所以不懂,所以来这里问问。在网上找了一些资料看,碰到了一点问题:Private Function JudgeNum(ByVal X As Integer) As Integer '求地雷数函数Select Case X '9种情况(他是8*8的格子,他这里列举的9种情况我不太明白,如果换成12*12或15*15只类的呢,又有几种情况?)Case 0(这一种情况是什么?为什么是0?)JudgeNum=Flag(X+8)+Flag(X+9)+Flag(X+1)Case 1 To 6(这一种情况是什么?为什么是6)JudgeNum=Flag(X-1)+Flag(X+7)+Flag(X+8)+Flag(X+9)+Flag(X+1)Case 7(这一种情况是什么?为什么是7?)JudgeNum=Flag(X+8)+Flag(X+7)+Flag(X-1)Case 56(这一种情况是什么?为什么是56)JudgeNum=Flag(X-8)+Flag(X-7)+Flag(X+1)Case 63(这一种情况是什么?为什么是63)JudgeNum=Flag(X-1)+Flag(X-9)+Flag(X-8)Case 8,16,24,32,40,48(这一种情况是什么?为什么是这些数字,是什么意思?)JudgeNum=Flag(X-8)+Flag(X-7)+Flag(X+1)+Flag(X+8)+Flag(X+9)Case 15,23,31,39,47,55(这一种情况是什么?为什么是这些数字,是什么意思?)JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-1)+Flag(X+7)+Flag(X+8)Case Is<55(这一种情况是什么?为什么这样,是什么意思呢?)JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-7)+Flag(X-1)+Flag(X+1)+Flag(X+7)+Flag(X+8)+Flag(X+9)Case Else 'x<63(这一种情况是什么?为什么这样,是什么意思呢?)JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-7)+Flag(X-1)+Flag(X+1)End SelectEnd Function有人能给我说说吗???真的不理解啊???

解决方案 »

  1.   

    不知道Flag()是干嘛用的,case后面的数应该是方格的编号,8*8的图,编号为0-63。该函数应该是点击某一格时调用的,例如点5号格子就调用JudgeNum(5)。
      

  2.   

    这是所有的程序了:通过随机数来布雷阵,设一数组Flag(63)为地雷标志数组,有雷则其值是1,无雷则其值为0,和Command1(1)-Command1(63)一一对应。不踩雷时需显示当前周围8个区域总计有几个雷,可通过FlagNum()数组来存放,但计算方法不一,“四个角”、“四条边不包含角”和“非四角四边”组成9个区域,可通过函数“Function JudgeNum(ByVal X As Integer) As Integer”来完成,其取值范围为0到8。踩雷后则应立即停止游戏,并可通过CmdRestart按钮重新开始。右键的Button属性值为2,利用此值,奇数次击右键出现“?”,偶数次则什么也不出现,通过设置标志变量FlagRMouse实现。应特别注意几个数组的联系。2.源程序因为挖雷是比较容易“不成功便成仁”的工作,我们可以再设置一命令按钮CmdRestart,它的功能是重新开始游戏,再设置一标签写上一些鼓励的话。Dim I,Hnum As IntegerDim Flag(63) As Integer '设置地雷标志数组Dim FlagNum(63) As Integer '某地区周围雷数目记录数组(0~8个)Dim FlagRMouse As Boolean '记录右键使用状态标志
    Private Function JudgeNum(ByVal X As Integer) As Integer '求地雷数函数Select Case X '9种情况Case 0JudgeNum=Flag(X+8)+Flag(X+9)+Flag(X+1)Case 1 To 6JudgeNum=Flag(X-1)+Flag(X+7)+Flag(X+8)+Flag(X+9)+Flag(X+1)Case 7JudgeNum=Flag(X+8)+Flag(X+7)+Flag(X-1)Case 56JudgeNum=Flag(X-8)+Flag(X-7)+Flag(X+1)Case 63JudgeNum=Flag(X-1)+Flag(X-9)+Flag(X-8)Case 8,16,24,32,40,48JudgeNum=Flag(X-8)+Flag(X-7)+Flag(X+1)+Flag(X+8)+Flag(X+9)Case 15,23,31,39,47,55JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-1)+Flag(X+7)+Flag(X+8)Case Is<55JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-7)+Flag(X-1)+Flag(X+1)+Flag(X+7)+Flag(X+8)+Flag(X+9)Case Else 'x<63JudgeNum=Flag(X-9)+Flag(X-8)+Flag(X-7)+Flag(X-1)+Flag(X+1)End SelectEnd FunctionPrivate Sub CmdRestart_Click()'重新进入游戏Lblview.Caption="努力哟!"Frmboom.Enabled=True '激活雷区For i=0 To 63LabNum(i).Caption=""Command1(i).Visible=TrueHnum=Rnd*4If Int(Hnum)=1 Then'随机布雷Flag(i)=1ElseFlag(i)=0End IfNext iFor i=0 To 63 '求周围雷的数目FlagNum(i)=JudgeNum(i)Next iEnd SubPrivate Sub Command1_Click(Index As Integer) '雷区,通过Command实现If Flag(Index)=1 Then '不幸中弹Command1(Index).Visible=FalseLabNum(Index).Caption="B"Lblview.Caption="再来一回合!"Frmboom.Enabled=FalseElse '开始挖雷,没有踩雷Command1(Index).Visible=FalseIf FlagNum(Index)<>0 Then '显示周围雷的数目,为0则什么也不显示LabNum(Index).Caption=FlagNum(Index)End IfEnd IfEnd Sub
    Private Sub Command1_MouseDown(Index As Integer,Button As Integer,Shift As Integer,X As Single,Y As Single)'定义右键功能,右键的Button值为2i=ButtonIf i=2 And FlagRMouse = False ThenCommand1(Index).Caption="?"FlagRMouse=TrueElseCommand1(Index).Caption=""FlagRMouse=FalseEnd IfEnd SubPrivate Sub Form_Load() '主程序FlagRMouse=False '初始化右键提示标志Lblview.Caption="努力哟!"For i=0 To 63 '利用随机函数布雷,保证每次雷区不同LabNum(i).Caption=""Hnum=Rnd*4If Int(Hnum)=0 ThenFlag(i)=1ElseFlag(i)=0End IfNext iFor i=0 To 63 '利用JudgeNum()计算某点周围雷的数目,并放入数组FlagNum(i)=JudgeNum(i)Next iEnd Sub
      

  3.   

    JudgeNum是判断点击的格子周围有几颗雷,Flag(i)=1表示第i个格子有雷,Flag(i)=0表示第i个格子没有雷。例如第一个格子周围的雷数=Flag(1)+Flag(8)+Flag(9),如这三个格子都有雷,则JudgeNum返回3,如有两颗则返回2。