Billard, kugeln berechnung

  • Hallo,
    ich bin gerade dabei sowas wie ein billard zu programmieren.
    für die darstellung verwende ich java swing.
    ich habe ball objekte, die eine position speichern, einen a, b und c wert. diese objekte implementieren das runnable interface. in der run methode führt mit hilfe von a, b, c eine fortlaufende positionsänderung aus.
    ein objekt pooltisch (jpanel) besitzt mehrere kugeln, eine innere klasse die für den stoß durchführt (mouslistener). wird geklickt wird der abstand zur weißen kugel berrechnet und a, b und c gesetzt. der thread der kugel wird gestartet (die position der kugel fortlaufend verändert), ein weiterer thread zeichnet das spielfeld immer neu. soooo, die weiße kugel läuft nun schon in ordnung, nun zu meinem problem: trifft die weiße kugel auf eine andere soll wenn nicht schon gestartet einen neuen thread erstellen und die kugel rollen lassen (ich überprüfe einfach ob die position jeder kugel einer anderen nahe ist), mein problem ist nun die änderung der laufbahn der kugeln, diese berechnungen scheinen mir sehr komplex, wie löse ich das am besten.

    nochwas: in der angabe steht:Wer Lust auf Realismus hat, kann die Kollision einzelner Kugeln mittels eines 2-dimensionalen elastischen Stoßes realisieren. Also ich wär auch mit Unrealismus zufrieden....

    Danke schonmal für die Hilfe

  • Wenn du für jede Kugel einen eigenen Thread benutzt, wie kannst du dann sicher stellen, dass sich alle Kugeln gleichzeitig fortbewegen? Irgendwie musst du das doch synchronisieren.

  • hm, ja ich dachte mir auch da gibt es sicher ein willdes durcheinander, die angabe setzte dies aber vorraus (also dass die kugel runnable implemetieren muss), im moment habe ich noch nicht getestet wie sich das ganze verhält wenn dann mehrere threads laufen, wie könnte ich das ganze synchronisieren?

    edit: in der angabe steht noch wir können das executor interface benutzen, denke das könnte das ganze regeln?!? hat jemand vielleicht ne gute beschreibung/erklärung im internet?

    Einmal editiert, zuletzt von poochie (9. Januar 2011 um 21:26)

  • Wenn es in der Angabe stehst, kommst du darum nicht herum. Ich halte es allerdings für den falschen Ansatz. Das Executor Interface ist nur als Erweiterung für komplexe Pools gedacht, wo ein Thread den nächsten steuert. Man kann damit zB eine verkettete Liste von Threads in unbestimmter Größe elegant erzeugen. In deinem Fall halte ich es aber für Overkill.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!