Problem mit Zufallszahlen und Multithreading

Status
Nicht offen für weitere Antworten.

Angel4585

Bekanntes Mitglied
Hallo,

ich möchte eine kleine 2D Simulation für mein Spiel machen. Ich bin schon recht weit, aber habe jetz ein kleines Problem.
Aktuell ist es so, das jede Spielfigur ein Thread ist, was bei maximal 17(2*8 Spieler + Ball) Spielfiguren kein Problem sein sollte.
Da die Simulation nur die Darstellung für ein Fussballspiel sein soll sollte man ein Spiel mehrfach angucken können und es sollte auch jedesmal das gleiche angezeigt werden.
Ich dachte mir eigentlich en genügt wenn ich die Zufallszahlen die ich erzeuge alle aus dem selben Random objekt generiere und dieses immer mit dem gleichen Seed initialisiere.

Aber dem ist leider nicht so, der RandomSeed ist immer 100 und trotzdem sind zB die Startaufstellungen die für ne Demo zufällig generiert werden, alle unterschiedlich. Da der Zufallsgenerator noch an anderen Stellen verwendet wird frage ich lieber jetzt gleich.

Woran liegt das das was andere raus kommt und wie kann ich das Problem beheben?
 

Der Müde Joe

Top Contributor
>Woran liegt das das was andere raus kommt

-->Zufallsgenerator

>und wie kann ich das Problem beheben?

--> einen deteministischen generator benutzen bzw schreiben

EDIT:
Btw: bei mir kommt immer das selbe raus bei Random(100)?
und auch in der gleicher Reihenfolge.
 

Angel4585

Bekanntes Mitglied
Aber wenn ich doch den Random Seed etze sollte doch genau das gleiche rauskommen, warum ist das scheinbar nicht der Fall?

Edit: Ja beim Random kommt immer das gleiche raus, aber die Spielanzeige ist jedesmal ne andere obwohl ich nur dieses eine Random-Objekt habe und verwende, habe von vornherein kein anderes verwendet und auch nach nochmaligem durchsuchen ist kein anderer zufallsgenerator mit drin.

Ich denke deswegen dass es am Zusammenspiel mit den Threads hängt
 

Der Müde Joe

Top Contributor
weil die Threads nicht immer gleich rennen. einmal nimmt der Thread 2 die erste Zahl, einmal der Thread 7 etc.

>Da der Zufallsgenerator noch an anderen Stellen verwendet wird

Jedesmal ist ein anderer am nen neue Zahl holen.
 
S

SlaterB

Gast
jeder Thread nimmt seinen eigenen Zufallsgenerator
oder jeder einzelne Zufallszahl-Generator-Zugriff ist einzeln synchronisiert festgelegt (wenig realistisch)
 

Angel4585

Bekanntes Mitglied
ok jetz hat jedes Objekt seinen eigenen zufallsgenerator der überall mit 100 initialisiert wird.
Die Spieler sind alle auf der gleichen Position dadurch aber der Spielverlauf ist dennoch ein anderer. Liegt das an Prozessorauslastung und solchen Geschichten? wie kann ich das in Griff bekommen?
Ist Multithreading für mich evtl nicht das Richtige?
Aber mit nur einem Thread isses fast nicht zu schaffen oder?
 

Der Müde Joe

Top Contributor
>Die Spieler sind alle auf der gleichen Position

widerspricht

>dadurch aber der Spielverlauf ist dennoch ein anderer.

Es ist so, dass nicht alle Threads immer zur gleichen Zeit rennen. Eimal ist einer schneller einmal ein andererer. Darum auch Variationen.
Das würde ewig laufen:
Code:
		Random random = new Random(100);
		Random random2 = new Random(100);
		while(random.nextInt() == random2.nextInt()) {
			System.out.println('.');
		}

Für sowas sind glaub Executor da, hab aber noch nie was richtiges damit gemacht und schon lange nicht mehr reingeguckt drum?
 

Angel4585

Bekanntes Mitglied
Ich meinte die Startposition ist die gleiche, durch den Spielverlauf bewegen sich die Spieler, einer ausm team rennt zum Ball, damit ist schon sichergestellt das nichtmehr alle die gleiche position haben.. naja usw ^^

gut ich schau mal was es mit diesen Executoren auf sich hat ^^ Danke :)
 

Der Müde Joe

Top Contributor
Eigentlich brauchst du nur 2 Threads. Den EventDispatchingThread (EDT) der malt (swing macht das) und ein Thread, welcher dir die neuen Positionene aller Spieler berechnet und den Ball, würde ich jetzt mal sagen. Somit hat sich auch das Thread Problem gelöst.
 

Angel4585

Bekanntes Mitglied
:lol: War sogar sehr einfach, da ich Ball und Spieler ohnehin von einer Klasse MovingPoint abgeleitet hatte welche von Thread abgeleitet war musste ich nur das extends Thread wegmachen und die run Methode durch eine Methode nextStep ersetzen welche ich dann in nem seperaten Thread immer der reihe nach aufrufe.
Danke für den Tipp jetz funktionierts :D
 

0x7F800000

Top Contributor
jedes hinreichend komplizierte programm, das multithreading ist an sich schon ein zufallszahlengenerator, weil das, was dein Programm tut, immer davon abhängt, wie schnell der prozessor ist, und der ist nie exakt gleichschnell.


indem du alles in einem Thread ausführst, gehen übrigens vorteile von Multithread-Programmen verloren, also verstehe ich dann nicht ganz, was das ganze Unternehmen dann überhaupt sollte. Bei einem Spiel sind 17 Threads auch unsinnig: wozu sollen 17 gut sein? Das ist doch keine parallelisierte simulation auf einem superrechner mit zig tausend zusammengeschalteten prozessoren. So wie ich das mitbekommen hab, wird es bei spielen auf nicht allzuviele Threads aufgeteilt: einen für Grafik, einen für Physik, einen für KI, einen der im Hintergrund irgendwelche Objekte als für den Spieler irrelevant markiert und freigibt, bzw dazulädt. Das alles, nur um den verschiedene Prioritäten zu vergeben, und bei Szenen mit vielen Monstern und Dreiecken sich auf die Grafik und Physik zu konzentrieren, und die Ausführung der ganzen KI und Müllabfuhr-Threads auf spätere, weniger Kritische Zeitpunkte zu verschieben. Da wird definitiv nicht für jeden Monster ein Thread angelegt, das wäre ein wenig zu viel.
 

Angel4585

Bekanntes Mitglied
seltsam.. ich habe in dem thread der alles berechnet ein sleep(20) drin.
Wenn ich das auf sleep(10) ändere gibts einen komplett andere Spielverlauf...

Dabei wollt ich eigentlich um die Ergebnisse zu berechnen das ganze ohne das sleep durchlaufen lassen und nur zur Anzeige das sleep reinmachen
 

Angel4585

Bekanntes Mitglied
Aaaargh :x hab den Fehler gefunden :roll: Ich mach in der Berechnung an einer Stelle etwas von der Zeit abhängig, da ist klar das was anderes rauskommt wenn ich das sleep weglasse ???:L

Naja schnell geändert und jetzt gehts. Ich werde mir die Executoren aber trotzdem noch anschauen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben