Java (laboratorium)

zadanie nr 11

W pakiecie roznosci.samochody napisz aplikację swing’ową, która będzie graficznie ilustrowała zachowanie się samochodów na skrzyżowaniu równorzędnym. Pojazdy nie mogą się zderzać. Obowiązuje ruch prawostronny izasada prawej ręki. Jeżeli dwa samochody jednocześnie dojeżdzają do skrzyżowania i znajdują się na kursie kolizyjnym, to jeden musi poczekać aż drugi, ten z pierszeństwem przejazdu, przejedzie przez skrzyżowanie.

Samochody mogą być na JPanel’u animowane przy pomocy kolorowych kulek, prostokątów albo gotowych małych obrazków. Zastosuj podwójne buforowanie w celu uniknięcia migotania. Po wyjechaniu za ekran, samochód pojawia się z drugiej strony jadąc z taką samą prędkością. Początkowo skrzyżowanie jest puste. Twoja aplikacja powinna umożliwiać dodanie nowego pojazdu na określonej jezdni przed skrzyżowaniem i nadania mu losowej początkowej prędkości (każdy samochód może mieć inną prędkośc przemieszczania się) oraz ściągnięcia jadącego pojazdu z określonej jezdni za skrzyżowaniem.

Każdym samochodem powinien sterować osobny wątek. Liczba wszystkich samochodów na planszy nie może przekroczyć pewnej rozsądnej granicy (na przykład 12). Pojazd zbliżający się do skrzyżowania powinien sygnalizować swój kierunek ruchu (kierunek ten powinien być wybierany losowo: w prawo, w lewo albo prosto). Ruchy samochodów należy odpowiednio zsynchronizować wykorzystując metody wait i notify (nie wolno stosować aktywnego czekania).

Program należy opatrzeć stosownymi komentarzami dokumentacyjnymi i na końcu wygenerować dokumentację poleceniem javadoc.

Uwaga: Ponieważ w okolicach skrzyżowania nie wolno wyprzedzać, więc kierowcy jeżdżący brawurowo muszą się ciągnąć za maruderami. Ponadto, przed skrzyżowaniem może się zrobić kolejka. A na dokładkę cztery samochody mogą się wzajemnie zakleszczyć na skrzyżowaniu. Zastanów się, jak elegancko rozwiązać te problemy.

Paweł Rzechonek

Wrocław, 11 stycznia 2005.