Myš a obrázky v Javě — cvičení

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(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:PRO]]
+
  
== Cvičení ==
+
== Doporučená cvičení ==
  
# Upravte projekt z hodin tak, aby:
+
=== Přesun autíčka tažením ===
#* autíčko šlo přesunout pouze pomocí tažení myší (nikoli jen kliknutím)  
+
* Upravte projekt z hodin tak, aby autíčko šlo přesunout pouze pomocí tažení myší (nikoli jen kliknutím)  
#*: sledujte události „stisk tlačítka“ a „uvolnění tlačítka“ místo „kliknutí“.
+
* Zobrazte aktuální souřadnice autíčka ve dvou textových polích (souřadnice X a souřadnice Y).
#* Zobrazte aktuální souřadnice tlačítka 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

Nápověda:

Nastavení pozice pomocí souřadnic

Nápověda:

Změna vzhledu autíčka

Nápověda:

Jedoucí autíčko

Nápověda:

Mnoho autíček

Nápověda:


Samostatná práce

Jak zjistím číslo svého zadání?

Která úloha je povinná pro konkrétního studenta OA?

  1. vezměte své číslo v třídní knize
  2. přičtěte k němu konstantu letošní posun (pro rok 2010/11 je letošní posun = -1)
  3. výsledek vydělte počtem zadání a spočtěte zbytek po dělení (viz 4. třída základní školy)
  4. 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

2. Hra na ovečky (2)

3. Stříhání ovcí

4. Pasáček ovcí

5. Malý princ

6. Obrana zahrady

Pro rok 2011/12

7. Záchranář

Obtížnější zadání: pro zájemce

Ovčí bludiště

Návod

Pohybující se objekty
Hra

           try {
               Thread.sleep(počet milisekund, které čekám);
           } catch (InterruptedException ex) {}

GUI
Užitečné
Obecná pravidla
Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje