Myš a obrázky v Javě — cvičení
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (→Cvičení) | m (Přejmenováno na Cvičení, doplněny kategorie.) | ||
| (Není zobrazeno 9 mezilehlých verzí od 1 uživatele.) | |||
| Řádka 1: | Řádka 1: | ||
| − | [[Category:VSE]] | + | [[Category:VSE]][[Category:Škola]][[Category:Informatika]][[Category:Programování]][[Category:Java]][[Category:GUI]] | 
| − | [[Category:Informatika]] | + | |
| − | [[Category: | + | |
| − | ==  | + | == 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í <code>int Integer.parseInt(String s)</code> (třída <code>java.lang.Integer</code>). | ||
| + | |||
| + | === 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 <code>java.util.ArrayList</code> pro ukládání instancí třídy <code>Auticko</code>. | ||
| + | |||
| + | |||
| + | == 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 <i>letošní posun</i> (pro rok 2010/11 je <i>letošní posun</i> = -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í. | ||
| + | |||
| + | [[Funkce_Modulo | (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. | ||
| + | <!-- | ||
| + | ==== 2. Hra na ovečky (3) ==== | ||
| + | *Jako zadání 1), ale ovce se pohybuje konstatní rychlostí směrem ke kurzoru myši. | ||
| + | --> | ||
| + | ==== 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 <tt>hrej()</tt>. 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 <code>repaint()</code> | ||
| + | *# Počkáte nějaký zadaný čas: | ||
| + | <code> | ||
| + |             try { | ||
| + |                 Thread.sleep(''počet milisekund, které čekám''); | ||
| + |             } catch (InterruptedException ex) {} | ||
| + | </code> | ||
| + | ; 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 <code>hrej()</code>!!! | ||
| + | ; Užitečné | ||
| + | * Potřebujete náhodná čísla. Pro náhodné číslo od MIN do MAX zapište: | ||
| + | ** <code> int nahodne = (int) Math.floor(Math.random()*(''MAX''-''MIN''+1))+MIN; </code> | ||
| + | ** (Btw. pamatujete na Excel? ;)) | ||
| + | ; Obecná pravidla | ||
| + | * Nezapomeňte dodržovat [[Konvence#Java|konvence pro psaní programů v Javě]]. | ||
Aktuální verze z 14. 4. 2015, 10:15
| 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ě.
