2017-01-13 3 views
0

Я выполняю задание для своего класса под названием «Риск!», В основе которого лежит то, что вы начинаете с 1000 баллов и вводите число для риска. Вы бросаете 2 кубика. Если все равно, вы проигрываете, а вход удаляется из счета. Если это странно, вы выигрываете, а ввод добавляется к зачету. По какой-то причине оценка не отображается правильно.Риск Игра, не показывающая оценку

Private Sub cmdQuit_Click() 
    Unload Me 
End Sub 

Private Sub cmdRollDice_Click() 
    intNumOutput1 = Int(Rnd * 6) + 1 
    intNumOutput2 = Int(Rnd * 6) + 1 

    lblNumOutput1.Caption = intNumOutput1 
    lblNumOutput2.Caption = intNumOutput2 

    intBothOutputs = intNumOutput1 + intNumOutput2 

    If intBothOutputs Mod 2 > 0 Then 
     intScore = intScore + intNumInput 
     MsgBox "odd, win" 
    Else 
     intScore = intScore - intNumInput 
     MsgBox "even, lose" 
    End If 

    lblTotal.Caption = "Your new point total is " & intScore 
End Sub 

Private Sub Form_Load() 
    Randomize 
    Dim intScore As Integer 
    Dim intNumOutput1 As Integer 
    Dim intNumOutput2 As Integer 
    Dim intBothOutputs As Integer 
    Dim intNumInput As Integer 

    txtNumInput.Text = intNumInput 
    intScore = 1000 

    txtNumInput.Text = "" 
    lblNumOutput1.Caption = "" 
    lblNumOutput2.Caption = "" 
End Sub 
+0

Опишите проблему более подробно. Что вы подразумеваете под «оценка не отображается правильно»? –

+0

оценка отображается как «0» вместо 1000 первоначально, затем плюс или минус вход, который вы рискуете – Noah

ответ

0
  1. Для конкатенации ее лучшая практика для преобразования типов данных в строку с помощью ПРМ. например CStr (intScore)
  2. Добавить обработчик событий для txtNumInput. Вы не назначили значение intNumInput всякий раз, когда нажимается кнопка.

Попробуйте ниже.

Option Explicit 

Private intScore As Integer 
Private intNumOutput1 As Integer 
Private intNumOutput2 As Integer 
Private intBothOutputs As Integer 
Private intNumInput As Integer 

Private Sub cmdRollDice_Click() 
    Dim intNumOutput1 As Integer 
    Dim intNumOutput2 As Integer 
    Dim intBothOutputs As Integer 

    intNumOutput1 = Int(Rnd * 6) + 1 
    intNumOutput2 = Int(Rnd * 6) + 1 

    lblNumOutput1.Caption = intNumOutput1 
    lblNumOutput2.Caption = intNumOutput2 

    intBothOutputs = intNumOutput1 + intNumOutput2 

    If intBothOutputs Mod 2 > 0 Then 
    intScore = intScore + intNumInput 
    MsgBox "odd, win" 
    Else 
    intScore = intScore - intNumInput 
    MsgBox "even, lose" 
    End If 

    lblTotal.Caption = "Your new point total is " & CStr(intScore) 
End Sub 

Private Sub txtNumInput_Change() 

    If IsNumeric(txtNumInput.Text) Then 
    intNumInput = CInt(txtNumInput.Text) 
    End If 

End Sub 
2

Если вы хотите использовать переменные в более чем одного метода (например, к югу, функции), вы объявляете переменные вне какого-либо метода.

Теперь, поскольку вы указали свои переменные внутри , вы не можете использовать их в cmdRollDice_Click или любым другим способом. Итак, что происходит, когда вы используете их в методе, отличном от того, в котором они были объявлены? Ну, если у вас есть Option Explicit заявление поверх кода, вы получите ошибку во время выполнения. Если вы этого не сделаете (это ваш текущий случай), переменные будут инициализированы - с нулевым значением - каждый раз при вызове метода (примечание: теперь они не те же переменные, которые были объявлены в).

Следовательно, вам необходимо объявить переменные в верхней части файла (перед всеми функциями/сабвуфер), как следующее:

Dim intScore As Integer 
Dim intNumOutput1 As Integer 
Dim intNumOutput2 As Integer 
Dim intBothOutputs As Integer 
Dim intNumInput As Integer 

' The rest of your code 

Private Sub Form_Load() 

End Sub 

Private Sub cmdRollDice_Click() 

End Sub 
' 
' 

Так что, как правило: вы объявляете переменные внутри метода, только если вы не нужно использовать их вне этого метода.

Для получения дополнительной информации об этом, читайте Understanding the Scope of Variables

Надежда, что помогает :)

Смежные вопросы