2016-08-24 7 views
1

Also habe ich eine Variable namens SquareNumber und das bestimmt, auf welchem ​​Quadrat sich dein Charakter befindet (Ich mache ein Schlangen- und Leiterspiel für Hausaufgaben.) Jedes Mal, wenn der Knopf gedrückt wird Wenn Sie die Taste gedrückt halten, werden zwei Zufallszahlen erstellt und sie werden als neue Variable mit der Bezeichnung Gesamt addiert. Die SquareNumber bekommt die Summe hinzugefügt. Ich habe dann eine lange Liste von Code, der das vorherige Etikett, dessen Farbe geändert wurde, in Schwarz zurückversetzt, und ein neues Etikett hat seine Farbe geändert, abhängig vom Wert der SquareNumber. Jedes Mal, wenn ich auf die Schaltfläche klicke, entspricht die Quadratnummer immer der Summe. Zum Beispiel ist die aktuelle Summe 5, dann wird die Quadratnummer hinzugefügt 5. Als nächstes sagen wir, die nächste Summe ist 7, dann sollte die Quadratnummer 7 hinzugefügt werden und 12 sein (5 + 7 = 12), aber es sagt nur 7.: (Jede Hilfe ist willkommen. Thanks :)Warum erhöht sich meine Variable nicht, wenn ich sie hinzufüge?

'Creating random numbers and displaying them as labels. 

    Dim SquareNumber1 As Integer 
    Dim Total As Integer 
    Dim RandomGen As New Random 
    Dim RandomInt1 As Integer 
    RandomInt1 = RandomGen.Next(2, 7) 
    Player1DiceRoll1.Text = CStr(RandomInt1) 
    Dim RandomInt2 As Integer 
    RandomInt2 = RandomGen.Next(2, 7) 
    Player1DiceRoll2.Text = CStr(RandomInt2) 
    Total = RandomInt2 + RandomInt1 
    Player1OutputLabel.Text = CStr(Total) 
    SquareNumber1 = SquareNumber1 + Total 

    'Change a the last label back to white. 
    If Label1.ForeColor = Color.Lime Then 
     Label1.ForeColor = Color.Black 
    ElseIf Label2.Forecolor = Color.Lime Then 
     Label2.ForeColor = Color.Black 
    ElseIf Label3.ForeColor = Color.Lime Then 
     Label3.ForeColor = Color.Black 
    ElseIf Label4.ForeColor = Color.Lime Then 
     Label4.ForeColor = Color.Black 
    ElseIf Label5.ForeColor = Color.Lime Then 
     Label5.ForeColor = Color.Black 
    ElseIf Label6.ForeColor = Color.Lime Then 
     Label6.ForeColor = Color.Black 
    ElseIf Label7.ForeColor = Color.Lime Then 
     Label7.ForeColor = Color.Black 
    ElseIf Label8.ForeColor = Color.Lime Then 
     Label8.ForeColor = Color.Black 
    ElseIf Label9.ForeColor = Color.Lime Then 
     Label9.ForeColor = Color.Black 
    ElseIf Label10.ForeColor = Color.Lime Then 
     Label10.ForeColor = Color.Black 
    ElseIf Label11.ForeColor = Color.Lime Then 
     Label11.ForeColor = Color.Black 
    ElseIf Label12.ForeColor = Color.Lime Then 
     Label12.ForeColor = Color.Black 
    ElseIf Label13.ForeColor = Color.Lime Then 
     Label13.ForeColor = Color.Black 
    ElseIf Label14.ForeColor = Color.Lime Then 
     Label14.ForeColor = Color.Black 
    ElseIf Label15.ForeColor = Color.Lime Then 
     Label15.ForeColor = Color.Black 
    ElseIf Label16.ForeColor = Color.Lime Then 
     Label16.ForeColor = Color.Black 
    ElseIf Label17.ForeColor = Color.Lime Then 
     Label17.ForeColor = Color.Black 
    ElseIf Label18.ForeColor = Color.Lime Then 
     Label18.ForeColor = Color.Black 
    ElseIf Label19.ForeColor = Color.Lime Then 
     Label19.ForeColor = Color.Black 
    ElseIf Label20.ForeColor = Color.Lime Then 
     Label20.ForeColor = Color.Black 
    ElseIf Label21.ForeColor = Color.Lime Then 
     Label21.ForeColor = Color.Black 
    ElseIf Label22.ForeColor = Color.Lime Then 
     Label22.ForeColor = Color.Black 
    ElseIf Label23.ForeColor = Color.Lime Then 
     Label23.ForeColor = Color.Black 
    ElseIf Label24.ForeColor = Color.Lime Then 
     Label24.ForeColor = Color.Black 
    ElseIf Label25.ForeColor = Color.Lime Then 
     Label25.ForeColor = Color.Black 
    ElseIf Label26.ForeColor = Color.Lime Then 
     Label26.ForeColor = Color.Black 
    ElseIf Label27.ForeColor = Color.Lime Then 
     Label27.ForeColor = Color.Black 
    ElseIf Label28.ForeColor = Color.Lime Then 
     Label28.ForeColor = Color.Black 
    ElseIf Label29.ForeColor = Color.Lime Then 
     Label29.ForeColor = Color.Black 
    ElseIf Label30.ForeColor = Color.Lime Then 
     Label30.ForeColor = Color.Black 
    ElseIf Label31.ForeColor = Color.Lime Then 
     Label31.ForeColor = Color.Black 
    ElseIf Label32.ForeColor = Color.Lime Then 
     Label32.ForeColor = Color.Black 
    ElseIf Label33.ForeColor = Color.Lime Then 
     Label33.ForeColor = Color.Black 
    ElseIf Label34.ForeColor = Color.Lime Then 
     Label34.ForeColor = Color.Black 
    ElseIf Label35.ForeColor = Color.Lime Then 
     Label35.ForeColor = Color.Black 
    ElseIf Label36.ForeColor = Color.Lime Then 
     Label36.ForeColor = Color.Black 
    ElseIf Label37.ForeColor = Color.Lime Then 
     Label37.ForeColor = Color.Black 
    ElseIf Label38.ForeColor = Color.Lime Then 
     Label38.ForeColor = Color.Black 
    ElseIf Label39.ForeColor = Color.Lime Then 
     Label39.ForeColor = Color.Black 
    ElseIf Label40.ForeColor = Color.Lime Then 
     Label40.ForeColor = Color.Black 
    ElseIf Label41.ForeColor = Color.Lime Then 
     Label41.ForeColor = Color.Black 
    ElseIf Label42.ForeColor = Color.Lime Then 
     Label42.ForeColor = Color.Black 
    ElseIf Label43.ForeColor = Color.Lime Then 
     Label43.ForeColor = Color.Black 
    ElseIf Label44.ForeColor = Color.Lime Then 
     Label44.ForeColor = Color.Black 
    ElseIf Label45.ForeColor = Color.Lime Then 
     Label45.ForeColor = Color.Black 
    ElseIf Label46.ForeColor = Color.Lime Then 
     Label46.ForeColor = Color.Black 
    ElseIf Label47.ForeColor = Color.Lime Then 
     Label47.ForeColor = Color.Black 
    ElseIf Label48.ForeColor = Color.Lime Then 
     Label48.ForeColor = Color.Black 
    ElseIf Label49.ForeColor = Color.Lime Then 
     Label49.ForeColor = Color.Black 
    End If 

    'Changing the new label to the right coloUr. 
    If SquareNumber1 = 1 Then 
     Label1.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 2 Then 
     Label2.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 3 Then 
     Label3.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 4 Then 
     Label4.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 5 Then 
     Label5.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 6 Then 
     Label6.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 7 Then 
     Label7.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 8 Then 
     Label8.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 9 Then 
     Label9.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 10 Then 
     Label10.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 11 Then 
     Label11.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 12 Then 
     Label12.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 13 Then 
     Label13.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 14 Then 
     Label14.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 15 Then 
     Label15.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 16 Then 
     Label16.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 17 Then 
     Label17.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 18 Then 
     Label18.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 19 Then 
     Label19.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 20 Then 
     Label20.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 21 Then 
     Label21.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 22 Then 
     Label22.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 23 Then 
     Label23.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 24 Then 
     Label24.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 25 Then 
     Label25.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 26 Then 
     Label26.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 27 Then 
     Label27.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 28 Then 
     Label28.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 29 Then 
     Label29.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 30 Then 
     Label30.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 31 Then 
     Label31.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 32 Then 
     Label32.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 33 Then 
     Label33.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 34 Then 
     Label34.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 35 Then 
     Label35.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 36 Then 
     Label36.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 37 Then 
     Label37.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 38 Then 
     Label38.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 39 Then 
     Label39.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 40 Then 
     Label40.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 41 Then 
     Label41.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 42 Then 
     Label42.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 43 Then 
     Label43.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 44 Then 
     Label44.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 45 Then 
     Label45.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 46 Then 
     Label46.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 47 Then 
     Label47.ForeColor = Color.Lime 
    ElseIf SquareNumber1 = 48 Then 
     Label48.ForeColor = Color.Lime 
    ElseIf SquareNumber1 >= 49 Then 
     Label49.ForeColor = Color.Lime 
     Dim Win As Integer = MsgBox("Well done, Mordor (Player1) won the game!", MessageBoxButtons.OK) 
     If Win = DialogResult.OK Then 
      End 
     Else 
      Button1.Enabled = False 
      Button2.Enabled = False 
     End If 
    ElseIf SquareNumber1 <= 0 Then 
     SquareNumber1 = 1 
     Label1.ForeColor = Color.Lime 
    End If 
+2

Haben Sie versucht, SquareNumber als statisch zu deklarieren? Außerdem muss die Variable in Klassenebene und nicht in der Methode –

+3

deklariert werden. Jedes Mal, wenn Sie dieses Ereignis eingeben, auf das der Button geklickt wird, erstellen Sie eine leere SquareNumber1. Wenn du also Total addierst, bekommst du den Wert von total SquareNumber1 = 0 + total. Sie müssen einen Weg finden, den Wert von SquareNumber1 beizubehalten. Du könntest es in exel schreiben, oder mach die Variable global, um nur 2 Methoden zu nennen. – GEnGEr

+0

Danke den Göttern für deine Hilfe! Alles, was ich brauchte, war SquareNumber als Statik zu delcare! Ich liebe euch wirklich sehr! –

Antwort

0

es gibt ein paar Möglichkeiten, um diese Katze zu Haut (oder Schlange.)
Wie @GEnGEr erwähnt, können Sie den Wert in einem Blatt speichern und von ihr lesen zu den Anfang des Subs und dann am Ende darauf schreiben.

Oder Sie können das Sub nicht verlassen, bis das Spiel beendet ist.

Wir machen eine while- oder eine do-up-Schleife, die nach Win- oder Loss-Bedingungen sucht und nur dann die Subroutine verlässt, wenn die eine oder andere Bedingung erfüllt ist. Wahrscheinlich werfen Sie auch einen "Ich quittiere" Knopf oder etwas, um früh zu beenden.

Es gibt andere Möglichkeiten, aber diese 2 sind einfache Startpunkte.

0

Dies ist nicht im Thema; aber ich wollte dir einen einfacheren Ansatz zeigen.

Sub Example() 
Static x As Integer  ' Static retains values between calls. 
Dim Total As Integer 

    ' Update old square. 
    Me.Controls("Label" & CStr(SquareNumber1)).ForeColor = Color.Black 

    ' Roll dice. 
    SquareNumber1 = SquareNumber1 + Total 

    ' Update new square. 
    Me.Controls("Label" & CStr(SquareNumber1)).ForeColor = Color.Lime 
End Sub 

Dieser Code verwendet eine Eigenschaft Ihres form namens Controls. Controls ist ein Array. Jedes Element im Array ist ein Steuerelement in Ihrem Formular.

Mit dieser Methode können Sie direkt auf das Steuerelement zugreifen, das Sie (mit seinem Namen) aktualisieren möchten, ohne jedes Quadrat im Spiel überprüfen zu müssen.

Wenn Sie dem Spiel 10 neue Quadrate hinzugefügt haben, würde Ihr Code ohne Änderungen weiter funktionieren (solange sie der gleichen Namenskonvention folgen).

ANTWORT

Siehe Kommentare von @RicardoPontual & @EnGEr für eine Arbeits Antwort.

+0

Wer wusste, dass Sie diesen ganzen Code in nur einer Zeile machen können! Vielen Dank! –

0

nicht ganz sicher, da es die Sprache, die Sie sind in ganz ähnlich wie VBA, aber es ist etwas, kann ich nicht wirklich

erfassen Was für eine VBA-Umgebung folgt unter der Annahme:

  • du bist das Spiel aus dem Inneren eines Userform
  • dies ist der Code für die entsprechende Schaltfläche Click-Ereignishandler
  • Random ist einige Klasse von Ihnen laufen
  • Color ist einige Klasse/enum von Ihnen

aber ich denke, das sollte Ihr VBA nicht sein, noch einige Haupt Codierlösungen

hier ist der Code anwenden könnte in der Userform Codebereich platziert werden:

Dim SquareNumber1 As Integer '<-- userform scoped variable 
Dim iLastLabel As Long '<-- userform scoped variable 

Sub Button_Click() 

    'Creating random numbers and displaying them as labels. 

    Dim Total As Integer 
    Dim RandomGen As New Random 
    Dim RandomInt1 As Integer 
    RandomInt1 = RandomGen.Next(2, 7) 
    Player1DiceRoll1.Text = CStr(RandomInt1) 
    Dim RandomInt2 As Integer 
    RandomInt2 = RandomGen.Next(2, 7) 
    Player1DiceRoll2.Text = CStr(RandomInt2) 
    Total = RandomInt2 + RandomInt1 
    Player1OutputLabel.Text = CStr(Total) 
    SquareNumber1 = SquareNumber1 + Total 

    With Me '<-- reference to Userform 
     'Change a the last label back to white. 
     If iLastLabel > 0 Then .Controls("Label" & iLbl).ForeColor = Color.Black 

     'Changing the new label to the right colour. 
     Select Case SquareNumber1 
      Case Is <= 0 
       SquareNumber1 = 1 
       Label1.ForeColor = Color.Lime 
       iLastLabel = 1 

      Case Is <= 48 
       .Controls("Label" & SquareNumber1).ForeColor = Color.Lime 
       iLastLabel = SquareNumber1 

      Case Else 
       Label49.ForeColor = Color.Lime 
       Dim Win As Integer = MsgBox("Well done, Mordor (Player1) won the game!", MessageBoxButtons.OK) 
       If Win = DialogResult.OK Then Exit Sub 
       Button1.Enabled = False 
       Button2.Enabled = False 
     End Select 
    End With 
End Sub 
+0

Danke, ich bin mir sicher, dass ich damit arbeiten kann. –

+0

Sie sind willkommen. dann bitte die Antwort als akzeptiert markieren, danke – user3598756

Verwandte Themen