2014-10-15 1 views
0

Я делаю программу Blackjack для своего класса программирования (используя номера только с 1 по 10 и не могу использовать глобальные переменные, причина которых выше меня). Всякий раз, когда я нажимаю butHit (кнопка «Хит»), он всегда получает ответ «Бюст: галстук», даже если значения для компьютера и вашей руки явно ниже 21. Это происходит независимо от того, что если вы нажмете butHit.Ошибка программы (дает неправильный ответ)

lblPlayV проверяет, был ли игрок нажат, но прежде, чем получить случайные значения и т. Д.

lblCounter представляет сколько раз, но нажалHit.

Я понятия не имею, что может быть неправильным.

Вот код:

Public Class Form1 

Private Sub butClose_Click(sender As System.Object, e As System.EventArgs) Handles butClose.Click 
    End 
End Sub 

Private Sub butPlay_Click(sender As System.Object, e As System.EventArgs) Handles butPlay.Click 
    Dim rand As New Random 

    Dim intM1 As Integer = rand.Next(1, 11) 
    Dim intM2 As Integer = rand.Next(1, 11) 
    Dim intM3 As Integer = rand.Next(1, 11) 
    Dim intM4 As Integer = rand.Next(1, 11) 
    Dim intM5 As Integer = rand.Next(1, 11) 

    Dim intOP1 As Integer = rand.Next(1, 11) 
    Dim intOP2 As Integer = rand.Next(1, 11) 
    Dim intOP3 As Integer = rand.Next(1, 11) 

    lblPlayV.Text = 1 
    lblCounter.Text = 1 
    butPlay.Text = "Replay" 

    lblM1.Text = intM1 
    lblM2.Text = intM2 
    lblM3.Text = intM3 
    lblM4.Text = intM4 
    lblM5.Text = intM5 

    lblOP1.Text = intOP1 
    lblOP2.Text = intOP2 
    lblOP3.Text = intOP3 

    lblM1.Visible = True 
    lblM2.Visible = True 
End Sub 

Private Sub butHit_Click(sender As System.Object, e As System.EventArgs) Handles butHit.Click 
    If lblPlayV.Text = 1 Then 
     '<<<<<<<<<<<<<<<<<<<<<<' 
     If lblCounter.Text = 1 Then 
      lblM3.Visible = True 

      If lblM1.Text + lblM2.Text + lblM3.Text = 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text > 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 
       lblCounter.Text = lblCounter.Text + 1 
      End If 

     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
     If lblCounter.Text = 2 Then 
      lblM4.Visible = True 

      If lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text = 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text > 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 
       lblCounter.Text = lblCounter.Text + 1 
      End If 

     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
     If lblCounter.Text = 3 Then 
      lblM5.Visible = True 

      If lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text = 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text > 21 Then 
       If lblOP1.Text + lblOP2.Text + lblOP3.Text > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 
       If lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text = lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
        MsgBox("Draw") 

       ElseIf lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text > lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
        MsgBox("You Win") 

       Else 
        MsgBox("You Lose") 
       End If 
      End If 
      lblCounter.Text = 0 
      lblPlayV.Text = 0 
     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
    End If 
End Sub 

Private Sub ButStand_Click(sender As System.Object, e As System.EventArgs) Handles ButStand.Click 
    If lblPlayV.Text = 1 Then 
     lblPlayV.Text = 0 

     If lblM3.Visible = False Then 
      If lblM1.Text + lblM2.Text = lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("Tie") 

      ElseIf lblM1.Text + lblM2.Text > lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 1 Then 
      If lblM1.Text + lblM2.Text + lblM3.Text = lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("Tie") 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text > lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 2 Then 
      If lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text = lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("Tie") 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text > lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 3 Then 
      If lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text = lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("Tie") 

      ElseIf lblM1.Text + lblM2.Text + lblM3.Text + lblM4.Text + lblM5.Text > lblOP1.Text + lblOP2.Text + lblOP3.Text Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

    End If 
End Sub 

End Class

+0

использовать ваш отладчик. –

+0

вот что я делаю. Я не могу найти причину, почему она приходит к одному и тому же результату каждый раз, независимо от ситуации. – dfgsdfg

+0

убедитесь, что вы добавляете строки. которые будут конкатенировать их, а не суммировать значения как целые числа. – 1010

ответ

0

Существует еще отчислять не хватает в вашем коде ....

Как 1010 сказал, что если вы получаете 3 карты "10 10 1" то, как вы считаете результат, будет «10101», а не 21.

Чтобы решить вашу проблему ... «Возможно, вы ее уже решили».

Используйте Интс сосчитать «intM1 + intM2 + intM3»

Dim intM1 As Integer 
Dim intM2 As Integer 
Dim intM3 As Integer 
Dim intM4 As Integer 
Dim intM5 As Integer 

Dim intOP1 As Integer 
Dim intOP2 As Integer 
Dim intOP3 As Integer 

Место их вне playbutton, так что вы можете использовать значение везде в форме.
Затем в вашем playbutton вы даете им значение.

intM1 = rand.Next(1, 11) 
intM2 = rand.Next(1, 11) 
intM3 = rand.Next(1, 11) 
intM4 = rand.Next(1, 11) 
intM5 = rand.Next(1, 11) 

intOP1 = rand.Next(1, 11) 
intOP2 = rand.Next(1, 11) 
intOP3 = rand.Next(1, 11) 

Кроме того, в кнопке хит вам нужно поставить «lblCounter.Text = lblCounter.Text + 1» в нижней части мероприятия.

Я уже немного изменил код, так что у вас оно есть.

Dim rand As New Random 

Dim intM1 As Integer 
Dim intM2 As Integer 
Dim intM3 As Integer 
Dim intM4 As Integer 
Dim intM5 As Integer 

Dim intOP1 As Integer 
Dim intOP2 As Integer 
Dim intOP3 As Integer 
Dim intOP4 As Integer 
Dim intOP5 As Integer 

Private Sub butPlay_Click(sender As System.Object, e As System.EventArgs) Handles butPlay.Click 
    intM1 = rand.Next(1, 11) 
    intM2 = rand.Next(1, 11) 
    intM3 = rand.Next(1, 11) 
    intM4 = rand.Next(1, 11) 
    intM5 = rand.Next(1, 11) 

    intOP1 = rand.Next(1, 11) 
    intOP2 = rand.Next(1, 11) 
    intOP3 = rand.Next(1, 11) 


    lblPlayV.Text = 1 
    lblCounter.Text = 1 
    butPlay.Text = "Replay" 

    lblM1.Text = intM1 
    lblM2.Text = intM2 
    lblM3.Text = intM3 


    lblOP1.Text = intOP1 
    lblOP2.Text = intOP2 
    lblOP3.Text = intOP3 


    lblM1.Visible = True 
    lblM2.Visible = True 
    lblM3.Visible = False 
    lblM4.Visible = False 
    lblM5.Visible = False 

End Sub 

Private Sub butHit_Click(sender As System.Object, e As System.EventArgs) Handles butHit.Click 
    If lblPlayV.Text = 1 Then 

     If lblCounter.Text = 1 Then 
      lblM3.Visible = True 

      If intM1 + intM2 + intM3 = 21 Then 
       If intOP1 + intOP2 + intOP3 = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf intM1 + intM2 + intM3 > 21 Then 
       If intOP1 + intOP2 + intOP3 > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 

      End If 

     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
     If lblCounter.Text = 2 Then 
      lblM4.Visible = True 

      If intM1 + intM2 + intM3 + intM4 = 21 Then 
       If intOP1 + intOP2 + intOP3 = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf intM1 + intM2 + intM3 + intM4 > 21 Then 
       If intOP1 + intOP2 + intOP3 > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 

      End If 

     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
     If lblCounter.Text = 3 Then 
      lblM5.Visible = True 

      If intM1 + intM2 + intM3 + intM4 + intM5 = 21 Then 
       If intOP1 + intOP2 + intOP3 = 21 Then 
        MsgBox("21 : Draw") 
       Else 
        MsgBox("21 : You Win") 
       End If 

      ElseIf intM1 + intM2 + intM3 + intM4 + intM5 > 21 Then 
       If intOP1 + intOP2 + intOP3 > 21 Then 
        MsgBox("Bust : Draw") 
       Else 
        MsgBox("Bust : You Lose") 
       End If 

      Else 
       If intM1 + intM2 + intM3 + intM4 + intM5 = intOP1 + intOP2 + intOP3 Then 
        MsgBox("Draw") 

       ElseIf intM1 + intM2 + intM3 + intM4 + intM5 > intOP1 + intOP2 + intOP3 Then 
        MsgBox("You Win") 

       Else 
        MsgBox("You Lose") 
       End If 
      End If 
      lblCounter.Text = 0 
      lblPlayV.Text = 0 
     End If 

     '<<<<<<<<<<<<<<<<<<<<<<' 
    End If 

    lblCounter.Text = lblCounter.Text + 1 
End Sub 

Private Sub ButStand_Click(sender As System.Object, e As System.EventArgs) Handles ButStand.Click 
    If lblPlayV.Text = 1 Then 
     lblPlayV.Text = 0 

     If lblM3.Visible = False Then 
      If intM1 + intM2 = intOP1 + intOP2 + intOP3 Then 
       MsgBox("Tie") 

      ElseIf intM1 + intM2 > intOP1 + intOP2 + intOP3 Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 1 Then 
      If intM1 + intM2 + intM3 = intOP1 + intOP2 + intOP3 Then 
       MsgBox("Tie") 

      ElseIf intM1 + intM2 + intM3 > intOP1 + intOP2 + intOP3 Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 2 Then 
      If intM1 + intM2 + intM3 + intM4 = intOP1 + intOP2 + intOP3 Then 
       MsgBox("Tie") 

      ElseIf intM1 + intM2 + intM3 + intM4 > intOP1 + intOP2 + intOP3 Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

     If lblCounter.Text = 3 Then 
      If intM1 + intM2 + intM3 + intM4 + intM5 = intOP1 + intOP2 + intOP3 Then 
       MsgBox("Tie") 

      ElseIf intM1 + intM2 + intM3 + intM4 + intM5 > intOP1 + intOP2 + intOP3 Then 
       MsgBox("You Win") 
      Else 
       MsgBox("You Lose") 
      End If 
     End If 

    End If 
End Sub