Problem mit Rnd( )
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.
-
-
-
picoflop schrieb:
Hat es religiöse Gründe, warum du Rnd() verwendest und nicht Random.Next(1,6)?
Wer mit Rnd() arbeitet sollte im übrigen im Zweifel nicht Randomize vergessen. Am besten vergisst man beides und nimmt Random()!
Ich habe im Form-Load stehen -
also erstmal ist Rnd() veraltet [VB 2010] "Böse" VB6/VB 2003-Funktionen - und ihre "guten"/besseren neuen VB.NET-Alternativen
dann solltest du wie picoflop schon sagte einfach benutzen.
Erspart VIEL Arbeit. -
-
picoflop schrieb:
In dem Fall erzeugt dein Rnd() Befehl auch das gewünschte Ergebnis.
Wenn ich die Wahl habe, einen Trabbi oder einen Benz zu nehmen, seh ich mich bestimmt nicht nach einem Fahrrad um.
Die alten Sachen führen irgendwann zu üblen Fehlern.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Das Klappt trotzdem nicht
VB.NET-Quellcode
- If Label3.Text = "Spieler 2 kann jetzt beitreten." Then
- Spieleranzahl = My.Computer.FileSystem.ReadAllText(My.Settings.Speicherpfad & "Data/Spieleranzahl/001/1.ini")
- Sp11 = My.Computer.FileSystem.ReadAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/1.ini")
- Spieler24 = My.Computer.FileSystem.ReadAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini")
- cmdStart.Visible = True
- If Spieleranzahl = 2 Then
- Do
- Spieler24 = New Random().Next(1, 2)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 3 Then
- Do
- Spieler24 = New Random().Next(1, 3)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 4 Then
- Do
- Spieler24 = New Random().Next(1, 4)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 5 Then
- Do
- Spieler24 = New Random().Next(1, 5)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- End If
- End If
- End Sub
Dort kommen auch abunzu die gleichen Zahlen zur Stande
Es kommen auch immer nur Zahlen zwischen 0 und 2 -
Du verwendest die Random Klasse ja auch falsch:
- New Random verwendet man 1x am Anfang um eine neue Pseudo-Zufallszahlen Folge zu erzeugen ( analog Randomize)
- bei Random.Next(Z1,Z2) wird eine Integer Zahl zwischen Z1 und Z2 erzeugt, wobei allerdings Z2 nie erreicht wird
Ansonsten sieht Dein Code noch sehr optimierungsfähig aus *hust*
@pico: too late old man -
19Marci96 schrieb:
zwischen 0 und 2
0 KANN nicht kommen ... !!!
Außerdem sollst/darfst du nicht JEDESMAL "New Random()" machen!
Hau dir in die Klasse eine private Variable "r" mit "private r as new random" rein. Und dann verwendest du diese Instanz -
picoflop schrieb:
19Marci96 schrieb:
zwischen 0 und 2
0 KANN nicht kommen ... !!!
Außerdem sollst/darfst du nicht JEDESMAL "New Random()" machen!
Hau dir in die Klasse eine private Variable "r" mit "private r as new random" rein. Und dann verwendest du diese Instanz
Das muss ich aber, denn ich bin ein Kartenspiel am Programieren, das Nennt sich Durak, und jeder Spieler muss per Zufallsgenerator einen wert Zugewiesen bekommen wann er immer dran ist, und nich jeder Spieler kann den Selben Wert haben.
Er zeigt mir aber immer im Textdukoment an, dass eine 0 Vorkommt -
-
19Marci96 schrieb:
Durak
Idiot!
Trotzdem kann 0 nicht durch Random.Next(1,... irgendwas) erzeugt werden! Ist so. Also muss dein Fehler woanders sein! -
19Marci96 schrieb:
Das muss ich aber, denn ich bin ein Kartenspiel am Programieren, das Nennt sich Durak, und jeder Spieler muss per Zufallsgenerator einen wert Zugewiesen bekommen wann er immer dran ist, und nich jeder Spieler kann den Selben Wert haben.
Liest Du gelegentlich eigentlich Antworten bevor Du postest, oder ignoriierst Du diese grundsätzlich ?
New Random nur 1x verwenden . Was war daran unklar ?
picoflop schrieb:
0 KANN nicht kommen ... !!!
Kann schon, und zwar ausschliesslich dann wenn KEINE seiner If Abfragen zum Zuge kommt, also 5 > Spieleranzahl < 2 ist. Um so etwas festzustellen gibt es den Debugger.
Dieser ganze Code mit seinen Do ...Loop kann sowieso umgangen werden, wenn man am Anfang der Runde (?) eine Sequenz von sich nicht wiederholenden Zufallszahlen berechnet. Entsprechende Methoden gibt es in diesem Thread: Zufallszahlen ohne wiedeholung -
Mein ihr so wie hier:
VB.NET-Quellcode
- If Spieleranzahl = 2 Then
- Do
- Spieler24 = New Random().Next(1, 3)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 3 Then
- Do
- Spieler24 = New Random().Next(1, 4)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 4 Then
- Do
- Spieler24 = New Random().Next(1, 5)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- ElseIf Spieleranzahl = 5 Then
- Do
- Spieler24 = New Random().Next(1, 6)
- Loop While Spieler24 = Sp11
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Spielerwert/001/2.ini", Spieler24, False)
- My.Computer.FileSystem.WriteAllText(My.Settings.Speicherpfad & "Data/Sp2connected/001/1.ini", "2", False)
- End If
- End If
- End Sub
-
19Marci96 schrieb:
und nich jeder Spieler kann den Selben Wert haben.
BTW: Wenn ich das richtig verstehe, möchtest du das bei x spielern jeder Spieler einen "Rang" erhält von 1 bis x?
Das ist eigentlich ein Einzeiler ... -
-
haiyyu schrieb:
Umm... ich sage ja immer noch, du solltest nur eine Instanz verwenden...
was macht das für ein Unterschied, außer das der Code "schöner" aussieht und ich den Code nochmal umschreiben muss -
-
19Marci96 schrieb:
ich den Code nochmal umschreiben muss
Das ganze soll doch wohl zum "üben" sein, oder? Dein ganzer Code ist schließlich dermaßen daneben, dass es ja nur darum gehen kann, dass du das ganze im Laufe der Zeit (des Lernens) so aufhübscht, dass einem nicht gleich das Frühstück hochkommt, wenn man den Code sieht?
Und bitte nicht folgende Begründung: "Funktioniert doch!" -
picoflop schrieb:
Und bitte nicht folgende Begründung: "Funktioniert doch!"
Sry pico, aber da liegst Du daneben: der TE heisst 19Marci96 und nicht Mr. Blackstar
-
Tags
-
Ähnliche Themen
-
3 Benutzer haben hier geschrieben
- Gast (16)
- haiyyu (3)
- RodFromGermany (2)