Myš a obrázky v Javě — cvičení
Z MiS
				
				
				(Přesměrováno z Myš a obrázky v Javě)
				
																
				
				
								
				
Obsah | 
Doporučená cvičení
Přesun autíčka tažením
- Upravte projekt z hodin tak, aby autíčko šlo přesunout pouze pomocí tažení myší (nikoli jen kliknutím)
 - Zobrazte aktuální souřadnice autíčka ve dvou textových polích (souřadnice X a souřadnice Y).
 
Nápověda:
- sledujte události „stisk tlačítka“ a „uvolnění tlačítka“ místo „kliknutí“.
 
Nastavení pozice pomocí souřadnic
-  Nastavte pozici autíčka pomocí dvou textových polí a tlačítka:
- uživatel zapíše do textového pole X: posun na ose X (vodorovný)
 - uživatel zapíše do textového pole Y: posun na ose Y (svislý)
 - uživatel klikne na tlačítko „Posun“ a autíčko se posune o zadanou délku.
 
 
Nápověda:
-  Číselnou hodnotu z textového pole získáte funkcí 
int Integer.parseInt(String s)(třídajava.lang.Integer). 
Změna vzhledu autíčka
- Vzhled autíčka se mění po kliknutí na levé/pravé tlačítko myši.
 
Nápověda:
- Například tak, že jsou k dispozici dva obrázky: autíčko jedoucí doleva a autíčko jedoucí doprava.
 
Jedoucí autíčko
- Autíčko stále jede zadanou rychlostí (například v = 10 px/s).
 - Otáčením kolečka myši měníte rychlost pohybu.
 
Nápověda:
- Použijte vlákno pro pravidelné posunování autíčka o v/10 pixelů každou desetinu sekundy.
 
Mnoho autíček
- Každé kliknutí přidá další autíčko na místo, kde se právě nachází kurzor myši.
 
Nápověda:
-  Využijete třídu 
java.util.ArrayListpro ukládání instancí třídyAuticko. 
Samostatná práce
Jak zjistím číslo svého zadání?
Která úloha je povinná pro konkrétního studenta OA?
- vezměte své číslo v třídní knize
 - přičtěte k němu konstantu letošní posun (pro rok 2010/11 je letošní posun = -1)
 - výsledek vydělte počtem zadání a spočtěte zbytek po dělení (viz 4. třída základní školy)
 - zbytek po dělení zvyšte o jedničku a máte číslo svého zadání.
 
(Více o funkci celočíselné dělení (modulo))
Zadání
1. Hra na ovečky
- Ovce se pohybuje uprostřed okna nahoru a dolů (pohyb doprava ani doleva možný není).
 - V náhodných intervalech vbíhají z levého a pravého okraje obrazovky vodorovně vlci.
- Vlk vbíhá z jednoho okraje a konstantní rychlostí se vodorovně pohybuje k druhému okraji.
 
 - Ovce se musí vyhnout střetnutí s vlkem, jinak je sežrána a hra končí! ;)
 - Ovci ovládáme pohybem myši. 
- Pokud je kurzor myši na obrazovce výše než ovce, ovce se pohybuje nahoru.
 - Pokud je kurzor myši na obrazovce níže než ovce, ovce se pohybuje dolů.
 - Pokud je kurzor myši ve stejné výši jako ovce, ovce se nepohybuje.
 - Zajímá nás pouze souřadnice Y kurzoru myši, pozice ve vodorovném směru není podstatná.
 
 - Počítáte, kolik vlků proběhlo předtím, než byla ovce sežrána.
 
2. Hra na ovečky (2)
- Jako zadání 1), ale vlci vybíhají pouze zleva. Zato jsou na obrazovce dvě ovce.
 - Ovce se pohybují obě ve stejném sloupci, jedna se ovládá klávesami S a W, druhá klávesami L a O.
 - Ovce se mohou překrýt (mohou být obě na stejném místě obrazovky).
 - Hrají dva hráči, vyhrává hráč, jehož ovce je sežrána později.
 
3. Stříhání ovcí
- Na obrazovku náhodně vbíhají ovce, vy je kliknutím musíte ostříhat.
 - Ovce se objeví na náhodném místě, vyrazí náhodným směrem stále rovně a po zadané době zmizí.
 - Prvním kliknutím ovci ostříháte z jedné třetiny, druhým z druhé třetiny a třetím úplně.
 - Počítá se počet ovcí, které jste ostříhali úplně.
 
4. Pasáček ovcí
- Na náhodných místech se objevuje tráva a po krátké době zase zmizí.
 - Ovce jde vždy směrem ke kurzoru myši, pohybuje se ale konstantní rychlostí.
 - Když ovce přijde na místo, kde je trs trávy, sežere tento trs.
 - Vaším úkolem je nechat ovci sežrat co nejvíce trsů trávy.
 
5. Malý princ
- Uprostřed obrazovky je Květina
 - Na obrazovku náhodně vbíhají beránci. Vyběhnou z náhodného místa na okraji obrazovky a míří přímo ke květině.
 - Musíme květinu ochránit tak, že kliknutím zavřeme beránka do bedýnky (zmizí).
 
6. Obrana zahrady
- Spodní okraj obrazovky je ohrada zahrady se vzácnými květinami
 - Z horního okraje v náhodném místě vybíhají ovečky
 - Na spodním okraji se pohybuje plošina, ze které se směrem vzhůru vystřeluje síť.
 - Ovce nesmí dojít na spodní okraj obrazovky.
 - Plošina se pohybuje vždy po spodním okraji (nemůže nahoru ani dolů), pohybuje se směrem ke kurzoru myši.
 - Síť se vystřelí kliknutím myši. Letící síť kreslit nemusíte, síť letí nekonečně rychle. Jakmile síť vystřelíte, ovce v daném sloupci okamžitě zmizí.
 
Pro rok 2011/12
7. Záchranář
-  Na obrazovce jsou čtyři útesy, na kterých se pasou ovce.
- Nakreslete například tak, že v horní části obrazovky bude zelený obláček (útes) a na něm bude stát ovce.
 
 -  Protože je útes úzký, ovce se občas zřítí.
- Po zadané nebo náhodné době některá z ovcí přejde o sloupeček doleva a padá směrem dolů.
 
 - Na spodním okraji obrazovky se pohybuje záchranná síť, pomocí které padající ovci zachytíte.
 - Hrajete na čas, počítá se, kolik ovcí jste zachránili.
 - Síť se pohybuje vpravo a vlevo klikáním na pravé a levé tlačítko myši.
 
Obtížnější zadání: pro zájemce
Ovčí bludiště
- Ovce musí projít bludištěm.
 - Ovce jde vždy k nejbližšímu trsu trávy.
 - Na začátku je bludiště a ovce na začátku.
 - V bludišti jsou vlci (nehýbou se) a zdi.
- vlk ovci sežere
 - zeď není průchozí
 
 - Trávu umísťujete kliknutím myši.
 - Máte omezený počet trav pro dané bludiště.
 
Návod
- Pohybující se objekty
 
- Vytvořte třídy pro každý typ pohybujících se objeků
 - Objekt bude mít informace o aktuální pozici.
 - Objekt bude mít informace o pozici, kam se pohybujete.
 - Ideálně to budou třídy potomky třídy Figurka, která bude realizovat načtení obrázku a další akce, které jsou pro všechny typy pohybujících se objektů společné (pozici).
 
- Hra
 
-  Vytvořte si třídu Hra s metodou hrej(). Dokud nenastaly podmínky pro konec hry, provádějte opakovaně cyklus, ve kterém:
- Necháte objevit se nebo zmizet objekty, které se tak mají chovat.
 - Posunete automaticky se pohybující objekty (řekne jim, ať se sami posunou).
 - Uživatelem ovládané objekty posunete patřičným směrem (řekne jim, ať se sami posunou).
 -  vyžádáte si překreslení okna metodou 
repaint() - Počkáte nějaký zadaný čas:
 
 
           try {
               Thread.sleep(počet milisekund, které čekám);
           } catch (InterruptedException ex) {}
- GUI
 
- Vytvořte grafické plátno a listener, který bude reagovat na události v plátně.
 -  Pokud nastane událost, nastavte uživatelem ovládaným objektům správný směr, kam se budou pohybovat.
-  !!! Pozor, pouze nastavíte směr. Samotný pohyb se bude realizovat později, až si to vyžádá metoda 
hrej()!!! 
 -  !!! Pozor, pouze nastavíte směr. Samotný pohyb se bude realizovat později, až si to vyžádá metoda 
 
- Užitečné
 
-  Potřebujete náhodná čísla. Pro náhodné číslo od MIN do MAX zapište:
-  
int nahodne = (int) Math.floor(Math.random()*(MAX-MIN+1))+MIN; - (Btw. pamatujete na Excel? ;))
 
 -  
 
- Obecná pravidla
 
- Nezapomeňte dodržovat konvence pro psaní programů v Javě.