Aufgabe 1
Beim Tischtennis spielen sich zwei Gegner abwechselnd den Ball zu. Dabei kann der eine Spieler ("Hans") den Ball nur dann schlagen, wenn der andere Spieler ("Vera") den Ball geschlagen hat. Mit Ausnahme des Beginns des Spiels: Vera beginnt.
Implementieren Sie eine Klasse Spieler, die bei der Instantiierung jeweils einen parallel laufenden Thread erzeugt, der die Aktionen des jeweiligen Spielers (mit einem bestimmten Namen und einem Gegner) ausführt. Implementieren Sie weiterhin eine Klasse Ball, die als Hilfsklasse zur Durchführung der Synchronisation dienen soll.
Beachten Sie, dass im Spiel stets immer nur genau 1 Ball unterwegs sein muss; mehrere Bälle oder kein Ball sind verboten! Es darf zu einem Zeitpunkt immer nur genau 1 Spieler-Thread den Ball schlagen!
Die Ausgabe des Programms sollte folgendermaßen aussehen:
Ping! Hans
Pong! Vera
Ping! Hans
Pong! Vera
Ping! Hans
Pong! Vera
...
Hinweis: verwenden Sie nicht den Spieltisch zur Synchronisation, da sich dieser während des Spiels ja nicht ändert. Überlegen Sie stattdessen, welche Zustände der Ball annehmen kann. Finden Sie für diese Zustände eine möglichst einfache Zustands-Repräsentation (möglichst wenige und einfache Variablen, d.h. halten Sie den Zustands-Raum so klein wie möglich).
Aufgabe 2
Beim Federball spielen sich drei Mitspieler ("Hans, "Vera" und "Peter") reihum den Ball (genau 1 Stück) zu. Implementieren Sie wie eben eine Klasse Spieler, die pro Spieler einen Thread erzeugt, und eine Klasse Ball.
Die Ausgabe des Programms sollte folgendermaßen aussehen:
Hans -> Vera
Vera -> Peter
Peter -> Hans
...
Hinweis: findige Programmierer schreiben für beide Aufgaben ein einziges Programm, dem man beim Aufruf nur noch sagen muss, für welches Spiel es sich intern konfigurieren soll. Dies ist aber keine Pflicht; Sie können auch 2 getrennte Programmcodes abgeben!
Achtung! Programmieren Sie kein "busy wait", sondern verwenden Sie wait() und notify() bzw. notifyAll()!
This entry was posted on Nov 07, 2006 at 14:35:18 and is filed under Parallelisierung. You can follow any responses to this entry through the RSS 2.0 feed, or leave a response (below) .
Bisher keine Kommentare für diesen Eintrag...
Kommentare sind für diesen Beitrag geschlossen.