Akvárium

Írjunk egy akvárium-szimuláló programot. A baloldali kép a program induló felülete (méret: 500 x 400 pixel). Rákattintva ez a felület eltűnik, és a jobboldali ábrán látható jelenik meg. (Ennek belső mérete: 850 x 460, amelyből a vezérlő rész 150 pixel széles.)

A halneveket egy adatbázisban tároljuk (ez a legelső futtatáskor jön létre). A hal példányok mindegyikének lesz neve, egyértelműen megadható hozzájuk a bal- és jobboldali profilképük és a képméret. A képek a kepek mappában találhatóak a nevek sorrendjében, a méretük pedig véletlenül generálható a megadott határok között. (Az igazi az lenne, ha a képneveket a nevekkel együtt az adatbázisban tárolnánk, ezt majd próbálja meg önállóan módosítani.)

A „Vízbedobás” gomb hatására a listából kiválasztott halak (egyszerre többet is lehet választani) bekerülnek a vízbe, és ott elkezdenek úszkálni. Egyúttal a listából kikerül a nevük.

Az úszás egyelőre ezt jelenti: véletlen sebességgel véletlenszerűen indulnak balra vagy jobbra, és ha az „akvárium” falához érnek, akkor visszafordulnak.

Oldjuk meg azt is, hogy a hangszóró gombra kattintva szólaljon meg egy háttérzene, majd ismét megnyomva hallgasson el.

A vízre kattintva megijednek a halak, és vagy egyszerre mind megáll, vagy ha éppen álltak, akkor egyszerre mind nekiindul. Mivel a halak erősen társas lények, ezért az újonnan vízbe dobott hal alkalmazkodik a többihez, és ha ők állnak, akkor az új is csak akkor kezd el mozogni, amikor a többi, ha mozognak, akkor ő is mozog.

Ha mégsem csak gyönyörködni szeretnénk a halakban, akkor, ha eltalálunk egy halat, azt tüntessük el az akváriumból. Úgy is módosíthatjuk, hogy az eltalált halat majd ismét vissza lehessen dobni, vagyis kerüljön vissza a listába.

Végül: a kicsit „élethűbb” mozgás kedvéért oldjuk meg azt, hogy időnként ne csak akkor forduljon meg egyik-másik, amikor falhoz ér, hanem akkor, amikor kedve tartja, és engedjünk meg a mozgásukban némi le-föl hullámzást is.


A működést bemutató videó (hang nélkül): akvarium.mp4

Adatok: akvarium.zip


A feladat megoldása előtt, illetve közben célszerű átnézni a következő fogalmakat:

Maven projekt, rajzolás, zene, szálkezelés, szálbiztosság - ezekhez pl. itt találhat referenciákat :

https://maven.apache.org/

NetBeans-Maven: http://www.areaofthoughts.com/2013/09/quick-start-guide-creating-java-maven.html

Eclipse-Maven: http://www.vogella.com/tutorials/EclipseMaven/article.html

https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html

http://www.javazoom.net/index.shtml

https://stackoverflow.com/questions/16882354/how-to-play-pause-a-mp3-file-using-the-javazoom-jlayer-library

http://java.progtanulo.hu/19-programszalak-kezelese

http://www.tutorialspoint.com/java/java_multithreading.htm

http://tutorials.jenkov.com/java-concurrency/index.html

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArrayList.html

https://stackoverflow.com/questions/17853112/in-what-situations-is-the-copyonwritearraylist-suitable


de persze bármely más, a témával foglalkozó anyag is jó lehet.


Egy lehetséges megoldás olvasható a következő pdf fájlban. Próbálja meg megérteni és megoldani a leírtak alapján.

Ha végignézte és végigcsinálta, utána olvassa el ezt a fájlt is: tovabbi_halas_variaciok.pdf

akvarium.pdf