2016-03-22 14 views
1

Ich möchte die Ordnungszahl der Schätzung für den aktuellen Spielzyklus um 1 erhöhen. Ich habe den Wert anfangs auf 0 gesetzt, aber nicht aktualisiert nach 1 Das gleiche gilt für die Anzahl der Versuche. Ich habe den Wert auf 21 gesetzt, aber sobald sie aktualisiert, bis 20, jedoch nicht nach diesenAktualisiere Variablen in VB

Option Strict On 
Option Explicit On 
Public Class Form1 
    Private ReadOnly rand As New Random 
    Private value As Integer 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

     Me.value = rand.Next(minValue:=1, maxValue:=30) 

    End Sub 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Dim guess As Integer  'guess number 
     Dim numTry As Integer  'No. of trys 
     Dim RandNo As Integer  'Random Number 
     Dim OrdNo As Integer  'Ordinal Number 
     Dim Score As Integer  'Score 

     Score = 0 'Initial value of score set as 0 
     OrdNo = CInt(1) 'Initial value of ordinal set as 1 
     numTry = CInt(21) 
     guess = CInt(TextBox1.Text) 
     OrdNo = +1 
     Label5.Text = CStr(OrdNo) 

     'Show Message Box if the guess is not within the range 
     If 1 > guess Then 
      MessageBox.Show("Input within the range (1-30)", "Error", MessageBoxButtons.OK) 
      Exit Sub 
     End If 

     'Show Message Box if the guess is not within the range 
     If guess > 30 Then 
      MessageBox.Show("Input within the range (1-30)", "Error", MessageBoxButtons.OK) 
      Exit Sub 
     End If 

     'Display result and message when guess is larger than the lucky number 
     If guess > Me.value Then 
      Label11.Text = CStr(guess) 
      Label10.Text = "The Lucky Number is smaller than your guess" 
      OrdNo = OrdNo + 1 
      Label5.Text = CStr(OrdNo) 
      numTry = numTry - 1 
      Label4.Text = CStr(numTry) 
     End If 

     'Display result and message when guess is smaller than lucky number 
     If guess < Me.value Then 
      Label11.Text = CStr(guess) 
      Label10.Text = "The Lucky Number is larger than your guess" 
      OrdNo = OrdNo + 1 
      Label5.Text = CStr(OrdNo) 
      numTry = numTry - 1 
      Label4.Text = CStr(numTry) 

     End If 

     'Display result and message when guess is equal to the lucky number 
     If guess = Me.value Then 
      Label11.Text = CStr(guess) 
      Label10.Text = "Congratulations ! This is the lucky number" 
      Score = +10 'Increase the score by 10 
      Label6.Text = CStr(Score) 
      numTry = numTry - 1 
      OrdNo = 1 
      Me.value = rand.Next(minValue:=1, maxValue:=30) 

      If numTry = 0 Then Application.Exit() 

     End If 

    End Sub 

End Class 
+2

Und was ist Ihr Problem? Welchen Fehler bekommst du? Was funktioniert nicht? – Claudius

+1

Ich denke, er will, dass die Nummer immer gleich ist, bis sie es richtig erraten haben, aber wenn man sich diesen Code ansieht, wird es die Zufallszahl jedes Mal ändern, wenn sie falsch vermutet wird. – Werdna

+0

Bitte lernen Sie zu debuggen .. – cybermonkey

Antwort

2

In Ihren Button-Event-Handler, RandNo ist immer Null. Beachten Sie, dass die Lebensdauer der Variablen mit demselben Namen RandNo, die im Event-Handler Form Load deklariert ist, nur für diese Methode gilt.

Um das zu vermeiden, gehen Sie folgendermaßen vor:

First (aber optional) verwenden Sie die Random Klasse, sicherzustellen, dass es nur einmal initialisiert werden (sonst kann man Zahlen bekommen wiederholt, wie in der MSDN-Dokumentation erklärt).

Zweitens erklären die Integer Variable, die nur einmal, um den Zufallswert gespeichert werden, auf die gleiche Art und Weise außerhalb des Rahmens eines Verfahrens Block, weisen ihren Wert und ihre Arbeit getan:

Public Class Form1 

    Private ReadOnly rand As New Random 
    Private value As Integer 

    Private Sub Form1_Load() Handles MyBase.Load 

     Me.value = rand.Next(minValue:=0, maxValue:=100) 

    End Sub 

    Private Sub Button1_Click() Handles Button1.Click 
     ' Do what you want with Me.value 
     '... 
    End Sub 

End Class 
+0

Ich verstehe es nicht ganz. es erzeugt immer noch nichts. Könntest du es nochmal machen? –

+0

https://www.dropbox.com/s/a9w9ckp3ffwds9i/asg1_test.exe?dl=0 Ich möchte ein Spiel so machen. Schlagen Sie Änderungen an dem Code bitte –

+2

Tut mir leid, aber Nein, ich werde nicht das Projekt herunterladen, um Ihre Arbeit zu tun !, Wir sind hier, um Ihnen zu helfen, zu verstehen, wie Sie es tun können, ich habe erklärt, wie Sie das Hauptproblem lösen können, Wenn Sie noch Zweifel haben, fragen Sie konkret nach den Zweifeln, die Sie haben, beachten Sie, dass Sie Ihre Frage aktualisieren können, um Ihre Fortschritte in dem Code, den Sie erstellen, hinzuzufügen und jedes Problem im Zusammenhang mit dem Code zu erklären. – ElektroStudios