我的VB作品|初学指南|编程技巧|源码下载|工具控件|VBA应用|Blog|【电信线路】|【网通线路】
   位置: VB知识库 >> 源码下载 >> VB实例源码 >> 正文

  • 当前没有记录!
  • 最新调查
        你是怎样知道VB知识库的?
    通过搜索引擎
    即时通讯工具
    朋友介绍
    友情链接
    其它

      

    频道统计
    利用VB算24点[VB知识库-Visual Basic Knowledge base]
    利用VB算24点[VB知识库-Visual Basic Knowledge base]
     更新时间:2008-4-25 23:50:45  点击数:2
    【字体: 字体颜色

     巧算24点 的游戏内容如下:一副牌中抽去大小王剩下52张,(如果初练也可只用1~10这40张牌)任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24.每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9—8)×8×3或3×8+(9—8)或(9—8÷8)×3等.
      “算24点”作为一种扑克牌智力游戏,还应注意计算中的技巧问题.计算时,我们不可能把牌面上的4个数的不同组合形式——去试,更不能瞎碰乱凑.

    Private Sub Command1_Click()

        If TxtNum1.Text = "" Then
            MsgBox "请输入数字!", vbExclamation + vbOKOnly
            Else
                If (Val(TxtNum1.Text) < 1) Or (Val(TxtNum1.Text) >= 10) Then
                    MsgBox "请输入一个1-10的数!", vbExclamation + vbOKOnly
                        Else
                            Num(1) = Val(TxtNum1.Text)
                End If
        End If
       
        If TxtNum2.Text = "" Then
            MsgBox "请输入数字!", vbExclamation + vbOKOnly
            Else
                If (Val(TxtNum2.Text) < 1) Or (Val(TxtNum2.Text) >= 10) Then
                    MsgBox "请输入一个1-10的数!", vbExclamation + vbOKOnly
                        Else
                            Num(2) = Val(TxtNum2.Text)
                End If
        End If
       
        If TxtNum3.Text = "" Then
            MsgBox "请输入数字!", vbExclamation + vbOKOnly
            Else
                If (Val(TxtNum3.Text) < 1) Or (Val(TxtNum3.Text) >= 10) Then
                    MsgBox "请输入一个1-10的数!", vbExclamation + vbOKOnly
                        Else
                            Num(3) = Val(TxtNum3.Text)
                End If
        End If
       
        If TxtNum4.Text = "" Then
            MsgBox "请输入数字!", vbExclamation + vbOKOnly
            Else
                If (Val(TxtNum4.Text) < 1) Or (Val(TxtNum4.Text) >= 10) Then
                    MsgBox "请输入一个1-10的数!", vbExclamation + vbOKOnly
                        Else
                            Num(4) = Val(TxtNum4.Text)
                End If
        End If
       
        a = OperatorModule.Operator()
       
        If Not (OperateorString1 = "") Then
            Print OperateorString1
        End If
       
        If Not (OperateorString2 = "") Then
            Print OperateorString2
        End If
       
        If Not (OperateorString3 = "") Then
            Print OperateorString3
        End If
       
        If Not (OperateorString4 = "") Then
            Print OperateorString4
        End If
       
        If Not (OperateorString5 = "") Then
            Print OperateorString5
        End If
       
    End Sub

    -------------------------------------------
    '模块OperatorModule


    Public Num(4) As Single             '定义数组,存储输入的数字

    Public OperateorString1 As String       '运算表达式
    Public OperateorString2 As String
    Public OperateorString3 As String
    Public OperateorString4 As String
    Public OperateorString5 As String


    Function Operator() As Integer

        Dim a As Integer        '定义数字数组下彪,用来产生数字组合
        Dim b As Integer
        Dim c As Integer
        Dim d As Integer
       
        Dim op1 As Integer      '定义运算付数组下标,用来产生运算符组合
        Dim op2 As Integer
        Dim op3 As Integer

        Dim answer1 As Single   '存储运算结果
        Dim answer2 As Single
        Dim answer3 As Single

        Dim BracketLeft1 As String, BracketRight1 As String, BracketLeft2 As String, BracketRight2 As String    '括号,分别表示为:第一个左括号,第一个右括号,第二个左括号,第二个右括号

        For a = 1 To 4                                          '产生4个数字的组合,一共有4!=24种组合
            For b = 1 To 4
                If b <> a Then
                    For c = 1 To 4
                        If (c <> a) And (c <> b) Then
                            For d = 1 To 4
                                If (d <> a) And (d <> b) And (d <> c) Then
                                   
                                    For op1 = 1 To 4        '运算符排序 共有4*4*4=64种
                                        For op2 = 1 To 4
                                            For op3 = 1 To 4

                                               
                                                If caculate(Num(a), Num(b), op1, answer1) And caculate(answer1, Num(c), op2, answer2) And caculate(answer2, Num(d), op3, answer3) Then
                                                    If answer3 = 24 Then        '如果结果为24,则产生运算表达式
                                                        '先将四个括号都清空
                                                        BracketLeft1 = ""
                                                        BracketRight1 = ""
                                                        BracketLeft2 = ""
                                                        BracketRight2 = ""
                                                        '如果第一个运算符为+或- 且第二个运算为 *或/ 那么第二个括号不能少
                                                        If (operate(op1) = "+" Or operate(op1) = "-") And (operate(op2) = "*" Or operate(op2) = "/") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If
                                                        '如果第二个运算符为+或- 且第三个运算为 *或/ 那么第一个括号不能少
                                                        If (operate(op2) = "+" Or operate(op2) = "-") And (operate(op3) = "*" Or operate(op3) = "/") Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If

                                                        OperateorString1 = BracketLeft1 + BracketLeft2 + Trim(Str$(Num(a))) + Trim(operate(op1)) + Trim(Str$(Num(b))) + BracketRight2 + Trim(operate(op2)) + Trim(Str$(Num(c))) + BracketRight1 + Trim(operate(op3)) + Trim(Str$(Num(d))) '返回((x@y)@z)@w 格式的表达式,但此时这两个括号未必都还在
                                                        Operator = answer3
                                                       
                                                    End If
                                                End If

                                              

                                                If caculate(Num(a), Num(b), op1, answer1) And caculate(Num(c), Num(d), op3, answer2) And caculate(answer1, answer2, op2, answer3) Then
                                                    If answer3 = 24 Then
                                                        BracketLeft1 = ""
                                                        BracketRight1 = ""
                                                        BracketLeft2 = ""
                                                        BracketRight2 = ""
                                                       
                                                        If (operate(op1) = "+" Or operate(op1) = "-") And (operate(op2) = "*" Or operate(op2) = "/") Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If
                                                      
                                                        If (operate(op3) = "+" Or operate(op3) = "-") And (operate(op2) = "*" Or operate(op2) = "/") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If
                                                       
                                                        If (operate(op2) = "-") And (operate(op3) = "+" Or operate(op3) = "-") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If

                                                        OperateorString2 = BracketLeft1 + Trim(Str$(Num(a))) + Trim(operate(op1)) + Trim(Str$(Num(b))) + BracketRight1 + Trim(operate(op2)) + BracketLeft2 + Trim(Str$(Num(c))) + Trim(operate(op3)) + Trim(Str$(Num(d))) + BracketRight2 '返回表达式
                                                        Operator = answer3
                                                       
                                                    End If
                                                End If

                                              

                                                If caculate(Num(b), Num(c), op2, answer1) And caculate(Num(a), answer1, op1, answer2) And caculate(answer2, Num(d), op3, answer3) Then
                                                    If answer3 = 24 Then
                                                        BracketLeft1 = ""
                                                        BracketRight1 = ""
                                                        BracketLeft2 = ""
                                                        BracketRight2 = ""
                                                       
                                                        If (operate(op1) = "/") Or (operate(op1) = "*" And (operate(op2) = "+" Or operate(op2) = "-")) Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If

                                                        If (operate(op1) = "-") And (operate(op2) = "+" Or operate(op2) = "-") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If

                                                       
                                                        If (operate(op1) = "+" Or operate(op1) = "-") And (operate(op3) = "*" Or operate(op3) = "/") Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If

                                                        OperateorString5 = BracketLeft1 + Trim(Str$(Num(a))) + Trim(operate(op1)) + BracketLeft2 + Trim(Str$(Num(b))) + Trim(operate(op2)) + Trim(Str$(Num(c))) + BracketRight2 + BracketRight1 + Trim(operate(op3)) + Trim(Str$(Num(d)))
                                                        Operator = answer3
                                                       
                                                    End If
                                                End If

                                              
                                                If caculate(Num(b), Num(c), op2, answer1) And caculate(answer1, Num(d), op3, answer2) And caculate(Num(a), answer2, op1, answer3) Then
                                                    If answer3 = 24 Then
                                                        BracketLeft1 = ""
                                                        BracketRight1 = ""
                                                        BracketLeft2 = ""
                                                        BracketRight2 = ""
                                                     
                                                        If (operate(op2) = "+" Or operate(op2) = "-") And (operate(op3) = "*" Or operate(op3) = "/") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If
                                                       
                                                        If (operate(op1) = "/") Or (operate(op1) = "*" And (operate(op3) = "+" Or operate(op3) = "-")) Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If
                                                      
                                                        If (operate(op1) = "-") And (operate(op3) = "+" Or operate(op3) = "-") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If


                                                        OperateorString3 = Trim(Str$(Num(a))) + Trim(operate(op1)) + BracketLeft1 + BracketLeft2 + Trim(Str$(Num(b))) + Trim(operate(op2)) + Trim(Str$(Num(c))) + BracketRight2 + Trim(operate(op3)) + Trim(Str$(Num(d))) + BracketRight1
                                                        Operator = answer3
                                                       
                                                    End If
                                                End If

                                              

                                                If caculate(Num(c), Num(d), op3, answer1) And caculate(Num(b), answer1, op2, answer2) And caculate(Num(a), answer2, op1, answer3) Then
                                                    If answer3 = 24 Then
                                                        BracketLeft1 = ""
                                                        BracketRight1 = ""
                                                        BracketLeft2 = ""
                                                        BracketRight2 = ""
                                                       
                                                        If (operate(op1) = "/") Or (operate(op1) = "*" And (operate(op2) = "+" Or operate(op2) = "-")) Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If

                                                      
                                                        If (operate(op1) = "-") And (operate(op2) <> "*" Or operate(op2) <> "/") Then
                                                            BracketLeft1 = "("
                                                            BracketRight1 = ")"
                                                        End If
                                                     
                                                &nbs, p;       If (operate(op2) = "/") Or (operate(op2) = "*" And (operate(op3) = "+" Or operate(op3) = "-")) Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If

                                                      
                                                        If (operate(op2) = "-") And (operate(op3) = "+" Or operate(op3) = "-") Then
                                                            BracketLeft2 = "("
                                                            BracketRight2 = ")"
                                                        End If
                                                        OperateorString4 = Trim(Str$(Num(a))) + Trim(operate(op1)) + BracketLeft1 + Trim(Str$(Num(b))) + Trim(operate(op2)) + BracketLeft2 + Trim(Str$(Num(c))) + Trim(operate(op3)) + Trim(Str$(Num(d))) + BracketRight2 + BracketRight1
                                                        Operator = answer3
                                                       
                                                    End If
                                                End If

                                            Next op3
                                        Next op2
                                    Next op1
                                End If
                            Next d
                        End If
                    Next c
                End If
            Next b
        Next a
        Operator = answer3
    End Function
    '计算结果
    Function caculate(X As Single, Y As Single, Operator As Integer, answer As Single) As Boolean
        Select Case Operator
            Case 1
                On Error GoTo ErrDoing
                answer = X + Y
            Case 2
                On Error GoTo ErrDoing
                answer = X - Y
            Case 3
                On Error GoTo ErrDoing
                answer = X * Y
            Case 4
                On Error GoTo ErrDoing
                If Y = 0 Then  '被除数不能为0
                    caculate = False
                    Exit Function
                Else
                    answer = X / Y
                End If
        End Select
    ErrDoing:
        If Err.Number = 6 Then
            caculate = False
        End If
        caculate = True
    End Function
    '返回运算符
    Function operate(op As Integer) As String
        Select Case op
            Case 1
                operate = "+"
            Case 2
                operate = "-"
            Case 3
                operate = "*"
            Case 4
                operate = "/"
        End Select
    End Function


    至少要成为本站的注册会员才能下载! 注册点我!
  • 上一篇: 在VB6中创建PDF文档
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章

  • 当前没有记录!
  •  
    相关文章
    网友评论:(只显示最新5条。)
    河北宝宝网河北教育网址导航VB知识库点击申请点击申请点击申请点击申请点击申请点击申请点击申请
    点击申请点击申请点击申请点击申请点击申请点击申请
    Copyright© 2008 vbkbase.com All Rights Reserved QQ群:54150844
    冀ICP备08000517号