frmmain.frm

来自「《Visual Basic 6.0趣味程序导学》光盘」· FRM 代码 · 共 668 行 · 第 1/2 页

FRM
668
字号
    MsgBox "你的计算结果不对,加油哦!", vbOKOnly + vbInformation, "错了"
End If
lblExpression.Caption = lblExpression.Caption & "=" & Str(dFinal)
EnableBotton False
EnableCard False
cmdLeft.Enabled = False
cmdRight.Enabled = False
'初始化时间标签
tmrGameTime.Enabled = False
m_lngTime = 0
Exit Sub
CalError:
    MsgBox "运算符号不匹配!!", vbOKOnly + vbInformation, "输入有误!"
EnableBotton False
EnableCard False
cmdLeft.Enabled = False
cmdRight.Enabled = False

End Sub

Private Sub cmdDevide_Click()
'使卡片失效,按钮有效,并且设置计算表达式
EnableBotton False
EnableCard True
On Error GoTo HaveError
lblExpression.Caption = lblExpression.Caption & "÷"
Dim dNum1 As Double, dNum2 As Double, dResult As Double
Dim strOP As String
'若前面算符为"( # + -"则乘号进栈,否则计算,结果进栈
While (ma_strOperator(m_intOpPt - 1) = "*" Or (ma_strOperator(m_intOpPt - 1) = "/"))
    '先将指针减一,得到现在的位置
    m_intNumPt = m_intNumPt - 1
    dNum2 = ma_dNumber(m_intNumPt)
    m_intNumPt = m_intNumPt - 1
    dNum1 = ma_dNumber(m_intNumPt)
    m_intOpPt = m_intOpPt - 1
    strOP = ma_strOperator(m_intOpPt)
    
    dResult = Calculate(dNum1, strOP, dNum2)
    ma_dNumber(m_intNumPt) = dResult
    m_intNumPt = m_intNumPt + 1
Wend
ma_strOperator(m_intOpPt) = "/"
m_intOpPt = m_intOpPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"

End Sub

Private Sub cmdExit_Click()
Dim iResult As Integer
iResult = MsgBox("你确定要退出游戏?", vbOKCancel + vbQuestion, "退出游戏")
If (iResult = vbOK) Then
    Unload Me
End If
End Sub

Private Sub cmdLeft_Click()
On Error GoTo HaveError
lblExpression.Caption = lblExpression.Caption & "("
'左括号直接进栈
ma_strOperator(m_intOpPt) = "("
m_intOpPt = m_intOpPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"

End Sub

Private Sub cmdMinus_Click()
'使卡片失效,按钮有效,并且设置计算表达式
EnableBotton False
EnableCard True
lblExpression.Caption = lblExpression.Caption & "-"
Dim dNum1 As Double, dNum2 As Double, dResult As Double
Dim strOP As String
'若前面算符为"("或"#"则减号进栈,否则计算,结果进栈
On Error GoTo HaveError

While (ma_strOperator(m_intOpPt - 1) <> "#" And (ma_strOperator(m_intOpPt - 1) <> "("))
    '先将指针减一,得到现在的位置
    m_intNumPt = m_intNumPt - 1
    dNum2 = ma_dNumber(m_intNumPt)
    m_intNumPt = m_intNumPt - 1
    dNum1 = ma_dNumber(m_intNumPt)
    m_intOpPt = m_intOpPt - 1
    strOP = ma_strOperator(m_intOpPt)
    
    dResult = Calculate(dNum1, strOP, dNum2)
    ma_dNumber(m_intNumPt) = dResult
    m_intNumPt = m_intNumPt + 1
Wend
ma_strOperator(m_intOpPt) = "-"
m_intOpPt = m_intOpPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub cmdMultiply_Click()
'使卡片失效,按钮有效,并且设置计算表达式
EnableBotton False
EnableCard True
lblExpression.Caption = lblExpression.Caption & "×"
Dim dNum1 As Double, dNum2 As Double, dResult As Double
Dim strOP As String
'若前面算符为"( # + -"则乘号进栈,否则计算,结果进栈
On Error GoTo HaveError
While (ma_strOperator(m_intOpPt - 1) = "*" Or (ma_strOperator(m_intOpPt - 1) = "/"))
    '先将指针减一,得到现在的位置
    m_intNumPt = m_intNumPt - 1
    dNum2 = ma_dNumber(m_intNumPt)
    m_intNumPt = m_intNumPt - 1
    dNum1 = ma_dNumber(m_intNumPt)
    m_intOpPt = m_intOpPt - 1
    strOP = ma_strOperator(m_intOpPt)
    
    dResult = Calculate(dNum1, strOP, dNum2)
    ma_dNumber(m_intNumPt) = dResult
    m_intNumPt = m_intNumPt + 1
Wend
ma_strOperator(m_intOpPt) = "*"
m_intOpPt = m_intOpPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"

End Sub

Private Sub cmdRePlay_Click()
m_intCardNum1 = m_intCardNumBak1
m_intCardNum2 = m_intCardNumBak2
m_intCardNum3 = m_intCardNumBak3
m_intCardNum4 = m_intCardNumBak4
'清空表达式标签,设置操作数和操作符指针为1
lblExpression.Caption = ""
m_intNumPt = 1
m_intOpPt = 1
'压入栈底操作符
ma_strOperator(m_intOpPt) = "#"
m_intOpPt = m_intOpPt + 1
'使按钮有效
cmdRePlay.Enabled = True
cmdCalculate.Enabled = True
cmdLeft.Enabled = True
cmdRight.Enabled = True
'使纸牌有效,按钮无效,并且设置计算表达式
imgCard1.Tag = 0
imgCard2.Tag = 0
imgCard3.Tag = 0
imgCard4.Tag = 0
EnableBotton False
EnableCard True
'恢复时间计数
m_lngTime = 0

End Sub

Private Sub cmdRight_Click()
lblExpression.Caption = lblExpression.Caption & ")"
Dim dNum1 As Double, dNum2 As Double, dResult As Double
Dim strOP As String
'取操作符计算,结果进栈,直到操作符为"("
On Error GoTo HaveError
While (ma_strOperator(m_intOpPt - 1) <> "(")
    '先将指针减一,得到现在的位置
    m_intNumPt = m_intNumPt - 1
    dNum2 = ma_dNumber(m_intNumPt)
    m_intNumPt = m_intNumPt - 1
    dNum1 = ma_dNumber(m_intNumPt)
    m_intOpPt = m_intOpPt - 1
    strOP = ma_strOperator(m_intOpPt)
    
    dResult = Calculate(dNum1, strOP, dNum2)
    ma_dNumber(m_intNumPt) = dResult
    m_intNumPt = m_intNumPt + 1
Wend
'将左括号退出
m_intOpPt = m_intOpPt - 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub cmdNew_Click()
'开始新一局游戏
Dim intCardNum1, intCardNum2, intCardNum3, intCardNum4 As Integer
'取得随机数,装载图片
Randomize
intCardNum1 = Int(52 * Rnd + 1)
intCardNum2 = Int(52 * Rnd + 1)
intCardNum3 = Int(52 * Rnd + 1)
intCardNum4 = Int(52 * Rnd + 1)
While intCardNum1 = intCardNum2
    intCardNum2 = Int(52 * Rnd + 1)
Wend
While (intCardNum3 = intCardNum1) Or (intCardNum3 = intCardNum2)
    intCardNum3 = Int(52 * Rnd + 1)
Wend

While (intCardNum4 = intCardNum1) Or (intCardNum4 = intCardNum2) Or (intCardNum4 = intCardNum3)
    intCardNum4 = Int(52 * Rnd + 1)
Wend
imgCard1.Picture = LoadPicture(App.Path & "\pic\" & CStr(intCardNum1) & ".jpg")
imgCard2.Picture = LoadPicture(App.Path & "\pic\" & CStr(intCardNum2) & ".jpg")
imgCard3.Picture = LoadPicture(App.Path & "\pic\" & CStr(intCardNum3) & ".jpg")
imgCard4.Picture = LoadPicture(App.Path & "\pic\" & CStr(intCardNum4) & ".jpg")

EnableCard True

'设置卡片对应的数字
m_intCardNum1 = intCardNum1 Mod 13
m_intCardNum2 = intCardNum2 Mod 13
m_intCardNum3 = intCardNum3 Mod 13
m_intCardNum4 = intCardNum4 Mod 13

If m_intCardNum1 = 0 Then
    m_intCardNum1 = 1
ElseIf m_intCardNum1 = 11 Then
    m_intCardNum1 = 1
ElseIf m_intCardNum1 = 12 Then
    m_intCardNum1 = 1
End If

If m_intCardNum2 = 0 Then
    m_intCardNum2 = 1
ElseIf m_intCardNum2 = 11 Then
    m_intCardNum2 = 1
ElseIf m_intCardNum2 = 12 Then
    m_intCardNum2 = 1
End If

If m_intCardNum3 = 0 Then
    m_intCardNum3 = 1
ElseIf m_intCardNum3 = 11 Then
    m_intCardNum3 = 1
ElseIf m_intCardNum3 = 12 Then
    m_intCardNum3 = 1
End If

If m_intCardNum4 = 0 Then
    m_intCardNum4 = 1
ElseIf m_intCardNum4 = 11 Then
    m_intCardNum4 = 1
ElseIf m_intCardNum4 = 12 Then
    m_intCardNum4 = 1
End If
m_intCardNumBak1 = m_intCardNum1
m_intCardNumBak2 = m_intCardNum2
m_intCardNumBak3 = m_intCardNum3
m_intCardNumBak4 = m_intCardNum4
'清空表达式标签,设置操作数和操作符指针为1
lblExpression.Caption = ""
m_intNumPt = 1
m_intOpPt = 1
'压入栈底操作符
ma_strOperator(m_intOpPt) = "#"
m_intOpPt = m_intOpPt + 1
'使计算按钮无效,纸牌有效
imgCard1.Tag = 0
imgCard2.Tag = 0
imgCard3.Tag = 0
imgCard4.Tag = 0
EnableCard True
EnableBotton False
cmdRePlay.Enabled = True
cmdCalculate.Enabled = True
cmdLeft.Enabled = True
cmdRight.Enabled = True
'初始化时间标签
tmrGameTime.Enabled = True
m_lngTime = 0
End Sub

Private Sub imgCard1_Click()
'使卡片失效,按钮有效,并且设置计算表达式
On Error GoTo HaveError
imgCard1.Tag = 1
EnableBotton True
EnableCard False
lblExpression.Caption = lblExpression.Caption & CStr(m_intCardNum1)
'操作数进栈
ma_dNumber(m_intNumPt) = m_intCardNum1
m_intNumPt = m_intNumPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub imgCard2_Click()
On Error GoTo HaveError
imgCard2.Tag = 1
EnableBotton True
EnableCard False
lblExpression.Caption = lblExpression.Caption & CStr(m_intCardNum2)
ma_dNumber(m_intNumPt) = m_intCardNum2
m_intNumPt = m_intNumPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub imgCard3_Click()
On Error GoTo HaveError
imgCard3.Tag = 1
EnableBotton True
EnableCard False
lblExpression.Caption = lblExpression.Caption & CStr(m_intCardNum3)
ma_dNumber(m_intNumPt) = m_intCardNum3
m_intNumPt = m_intNumPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub imgCard4_Click()
On Error GoTo HaveError
imgCard4.Tag = 1
EnableBotton True
EnableCard False
lblExpression.Caption = lblExpression.Caption & CStr(m_intCardNum4)
ma_dNumber(m_intNumPt) = m_intCardNum4
m_intNumPt = m_intNumPt + 1
Exit Sub
HaveError:
    MsgBox "输入错误!!", vbOKOnly + vbInformation, "输入有误!"
End Sub

Private Sub tmrGameTime_Timer()
m_lngTime = m_lngTime + 1
lblTime.Caption = Str(m_lngTime) & " 秒"
End Sub

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?