Gymnzium Praha 10 Vodradsk 2 Projekt OBZORY Projekt
Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Projekt Hra první část Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond
Zadání projektu • Vytvořte v Greenfoot vlastní svět, který bude mít tyto prvky: – hrdina – zeď – protivník – poklad – oznámení o ukončení hry
Vlastnosti prvků hry • Hrdina– postavička, kterou ovládá hráč pomocí šipek, sbírá poklady, vyhýbá se zdem a protivníkům, • Zeď – prvek, který pro všechny pohyblivé prvky hry představuje překážku, kterou nelze „podlézt“ ani „přelézt“, sám nepohyblivý, • Poklad – prvek, který představuje to, co hrdina sbírá. Ve hře určíte počet pokladů, umísťují se náhodně, ne na zeď, hrdinu nebo protivníka, poklady se nepohybují,
Vlastnosti prvků hry • Protivník – postavička, která se pohybuje náhodně po světě, nesmí ho opustit, vyhýbá se zdem, nesbírá poklady, když potká hrdinu, hra končí prohrou. V první verzi hry nebude mít protivník žádnou inteligenci, tj. nebude hrdinu nijak vyhledávat, • Oznámení o ukončení hry – tento prvek se objeví na konci hry a oznámí hráči, zda vyhrál (posbíral všechny poklady) nebo prohrál (dostihnul ho protivník).
Cíle projektu • naučit se volat metody objektů, zjišťovat jejich návratové hodnoty atd. • naučit se orientovat v dokumentaci tříd – hlavně tříd prostředí Greenfoot, • naučit se psát metody objektů s využitím – příkazů if a switch pro rozhodování, – příkazů for a while pro cykly, • naučit se vytvořit a používat výčtový typ v Javě.
Postup vytváření projektu • Vytvořte nový scénář (projekt) v Greenfoot, • Vytvořte vlastní svět, musí být potomkem třídy World, a pojmenujte ho Muj. Svet a nastavte mu pozadí, • Vytvoří se nová třída Muj. Svet, projekt přeložte, po překladu se svět zobrazí.
Nastavení velikosti světa public class Muj. Svet extends World • { Ve zdrojovém kódu třídy Muj. Svet /** velikost buňky světa a počet nastavíme * Constructor for objects of class Muj. Svet. ho budou tvořit, buněk, které * – jedna */ buňka bude mít velikost 50 x 50 pixelů public Muj. Svet() a {svět bude tvořen 10 x 10 buňkami // Create a new world with 20 x 20 cells //with a cell size of 10 x 10 pixels. super(20, 10); super(10, 50); } }
Vytvoření hrdiny • V Greenfoot platí, že jakýkoli prvek, který chcete vložit do světa, musí být potomkem třídy Actor, • Vytvořte novou třídu jako potomka třídy Actor, pojmenujte ji Hrdina a jako obrázek jí přiřaďte duke. gif (případně jiný z knihovny Greenfoot), – panáček Duke je maskotem Javy, – soubor s Dukem o velikosti 50 x 50 pixelu je ke stažení na portále v knihovně.
Vložení hrdiny do světa public Muj. Svet() • Otevřete zdrojový kód třídy Muj. Svet. { • Přidejte vytvoření instance hrdiny do super(10, 50); kódu konstruktoru. • Umístěte vytvořenou instanci na pozici Hrdina duke = new Hrdina(); 5, 5 this. add. Object(duke, 5, 5); ve světě. }
Vložení hrdiny do světa • Přeložte upravený zdrojový kód, svět se zobrazí včetně hrdiny
Nastavení ovládání hrdiny public void act() • {hrdina se bude pohybovat podle toho, jaká šipka bude stisknuta, this. pohyb(); • činnost hrdiny je dána kódem metody act() – } zatím neobsahuje nic, • vytvoříme metodu pohyb (bez parametrů a návratové hodnoty), kterou v metodě act() zavoláme.
Nastavení ovládání hrdiny int x = this. get. X(); int y = this. get. Y(); • Do metody pohyb() vložíme toto: – zjistíme a zapamatujeme si souřadnice, kde je Greenfoot. is. Key. Down("up") if (Greenfoot. is. Key. Down("up")){ hrdina umístěn, y--; – pro zjištění, která klávesa je stisknuta, použijeme } metodu is. Key. Down() třídy Greenfoot, this. set. Location(x, y); – změníme příslušnou souřadnici umístění hrdiny, – umístíme hrdinu do světa na nové souřadnice.
private void pohyb(){ int x = this. get. X(); int y = this. get. Y(); if (Greenfoot. is. Key. Down("up")){ y--; • Celý kód metody pohyb(): } if (Greenfoot. is. Key. Down("down")){ y++; } if (Greenfoot. is. Key. Down("left")){ x--; } if (Greenfoot. is. Key. Down("right")){ x++; } this. set. Location(x, y); } Nastavení ovládání hrdiny
Vytvoření překážek (zdí) ve světě • Vytvořte novou třídu Zed, která je potomkem třídy Actor a jako obrázek přiřaďte zed. png, – obrázek je k dispozici na portále v knihovně, • Do metody act() ve třídě Zed nebudeme psát žádný kód, zeď nemá přiřazenou žádnou činnost (bude pouze umístěna a zobrazena ve světě).
private void umisti. Zdi(){ for (int i = 0; i < 5; i++) { Umístění zdí do světa add. Object(new Zed(), i, 3); } public class Muj. Svet extends World{ • do světa umístíme 4 řady zdí, dvě svislé a for (int i = 5; i <10; i++) { public Muj. Svet() { dvě vodorovné, add. Object(new Zed(), i, 7); } super(10, 50); • upravujeme kód třídy Muj. Svet, for (int i = 0; i < 6; i++) { Hrdina duke = new Hrdina(); • přidáme metodu umisti. Zdi(), kterou add. Object(new Zed(), 7, i); zavoláme z konstruktoru, this. add. Object(duke, 5, 5); } for (int i = 5; i < 10; i++) { • pro umístění zdí využijeme cyklus for. umisti. Zdi(); add. Object(new Zed(), 3, i); }. . . . } } }
Vytvoření překážek ve světě • Po přeložení kódu se svět zobrazí včetně zdí
Nastavení hrdiny, aby nepodlézal zdi • Pokud by se hrdina měl posunout na políčko, kde je zeď, musí zůstat stát, • je třeba napsat metodu muzu. Dal(), která vrací true v případě, že před hrdinou není zeď, jinak false, • pouze pokud metoda muzu. Dal() vrátí true, hrdina se posune.
Metody pro detekování objektů na zadané pozici Metoda Popis Metody vracející jednu z instancí daného typu vyhovující podmínce Actor get. One. Object. At. Offset(int dx, int dy, java. lang. Class cls) Vrací odkaz na jednu instanci uvedeného typu, která se nachází na pozici relativně od tohoto objektu. Actor get. One. Intersecting. Object(java. lang. Class cls) Vrací odkaz na jednu instanci uvedeného typu, která se nachází na stejné pozici jako objekt. Metody vracející seznam všech instancí daného typu vyhovujících podmínce java. util. List get. Objects. In. Range(int radius, java. lang. Class cls) Vrací seznam všech instanci uvedeného typu, které se nachází v dosahu (kruhu) kolem objektu. Poloměr kruhu je dán parametrem metody. java. util. List get. Objects. At. Offset(int dx, int dy, java. lang. Class cls) Vrací seznam všech instanci uvedeného typu, které se nachází na pozici relativně od tohoto objektu. java. util. List get. Neighbours(int distance, boolean diagonal, java. lang. Class cls) Vrací seznam všech instanci uvedeného typu, které se nachází v uvedené vzdálenosti od objektu a to jen horizontálně a vertikálně nebo i na diagonále, podle zadaných parametrů. java. util. List get. Intersecting. Objects(java. lang. Class cls) Vrací seznam všech instanci uvedeného typu, které se nachází na stejné pozici jako objekt.
Zadání domácího úkolu • doplňte do projektu Hra kód, který zajistí, že hrdina nebude přelézat nebo podlézat zdi – napište metodu muzu. Dal(), ve které využijete metodu get. One. Object. At. Offset() – metodu muzu. Dal() volejte v metodě pohyb()
Použité zdroje a literatura • Developer Resources for Java Technology [online]. c 2010 [cit. 2010 -03 -28]. Dostupné z WWW: http: //java. sun. com • Greenfoot : The Java Object World [online]. 2010 [cit. 2010 -03 -28]. Dostupné z WWW: http: //www. greenfoot. org.
Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Tato prezentace byla vytvořena v rámci projektu OBZORY Autor: Ing. Jarmila Pavlíčková Předmět: seminář Java Datum: 28. 3. 2010 Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond
- Slides: 21