Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek
Postřehová hra ročníkový projekt Matouš Jokl, 1E květen 2014
Obsah 1 Moje cíle................................................................................................................................1 2 Kód........................................................................................................................................2 1.Objekty a ArrayList................................................................................................................2 2.Jpanel a jeho metody + metody na vytváření objektů............................................................3 3.Ovládání hry + fungování ovládacích prvků..........................................................................5 4.Přehled použitých datových typů...........................................................................................6 3 Grafické zpracování..............................................................................................................6 4 Prohlášení............................................................................................................................10
Zadání projektu Hra bude obsahovat několik objektů, které se budou postupně náhodně objevovat a mizet. Každý se zobrazí cca na 1 sekundu. Budou zde 2 typy objektů: 1) ScoreObjekty, po jejichž „sestřelení“ se hráči přičte skóre. Ty budou rozděleny do 3 velikostí: malé, střední a velké. Čím větší bude objekt, tím menší bude skóre. 2) EndObjekty, které po sestřelení ukončí hru. Tyto objekty se budou velmi podobat (barevně i tvarem) ScoreObjektům. Ty budou rozděleny také do 3 velikostí (stejně jako ScoreObjekty). Hráči se na konci hry zobrazí jeho skóre.
1 Moje cíle Jako hlavní cíl ročníkového projektu jsem si stanovil využít co nejefektivněji svoje dosavavaní znalosti z programovacího jazyka Java a vytvořit jednoduchou hru, která by zároveň vynikala svojí banalitou . K vytvoření ročníkové práce jsem využil platformu Netbeans, kde jsem se snažil vytvořit jednoduchou postřehovou hru. K tomu jsem použil Jpanel a pomocí jeho vykreslovací metody jsem vykresloval na obrazovku jednoduché geometrické obrazce, přesněji čtverce.
1
2 Kód 1. Objekty a ArrayList Jako první je potřeba si vytvořit 2 objekty, „objekty“ a „endObjekty“ (viz Příklad 1 a Příklad 2). Ty se dají využít v takzvaném ArrayListu (česky kolekce), do něhož můžeme vkládat objekty, kterým specifikujeme datový typ, které pak do kolekce budou uloženy. Pro každý objekt si vytvoříme jednu kolekci. Do první vložíme objekty s názvem „objekty“ a do druhé objekty s názvem „endObjekty“ (viz níže příkald 1 a 2). ArrayList<EndObjekt> endObjekty = new ArrayList<>(); ArrayList
objekty = new ArrayList<>(); Příklad 1 import java.util.Random; public class Objekt { Random random = new Random(); int x; int y; int velikostX; int cas; boolean vybuch = false; public Objekt(int x, int y, int velikostX, int cas) { this.x = x; this.y = y; this.velikostX = velikostX; this.cas = cas; } }
Příklad 2 public class EndObjekt { int x; int y; int velikostX; int cas; boolean vybuch = false; public EndObjekt(int x, int y, int velikostX, int cas) { this.x = x; this.y = y; this.velikostX = velikostX; this.cas = cas; } }
2
2. Jpanel a jeho metody + metody na vytváření objektů Název metody addMouseListener(new MouseListener() { @Override public void mousePressed(MouseEvent e) { } }
Co se stane při stisknutí myši
addKeyListener(new KeyListener() { @Override public void keyPressed(KeyEvent e) { } }
Jak jsem ji použil if (konecHry) { return; } for (Objekt o : objekty) { if (o.cas > 0 && e.getX() >= o.x && e.getX() <= o.x + o.velikostX && e.getY() >= o.y && e.getY() <= o.y + o.velikostX) { skore = skore + 65 - o.velikostX / 4; o.vybuch = true; o.cas = 200; } } if (konecHry = false) { return; } e.isActionKey(); skore = 0; repaint();
Co se stane při stisknutí klávesy @Override public void actionPerformed(ActionEvent ae) { }
Kód, který se má vykonat. Metoda odebírá EndObjekty z kolekce a volá metodu pridejObjekt.
if (casovac > 0) { for (Objekt o : objekty) { o.cas = o.cas - 100; } if (random.nextInt(100) <= 50) { pridejObjekt(); } for (EndObjekt oE : endObjekty) { oE.cas = oE.cas - 200; } if (random.nextInt(100) <= 40) { endObjekty.remove(endObjekty); } } casovac = casovac - 1; repaint(); }
3
Název metody @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; {
Vykreslovací metoda
Jak jsem ji použil if (konecHry) { Font font = new Font("Serif", Font.PLAIN, 50); { g2d.setFont(font); g2d.drawString("_______________", 550, 150); g2d.drawString("Konec Hry ", 550, 200); if (skore < 200) { g2d.drawString("Máš přesnost slepého po obrně!", 550, 300); if (skore > 199 && skore < 1000) { g2d.drawString("Máš špatnou mušku! Miř lépe!", 550, 300); if (skore > 1000 && skore < 2000) { g2d.drawString("Jsi dobrý střelec, ale máš co zlepšit!", 550, 300); if (skore > 1999 && skore < 4000) { g2d.drawString("Tvoje střelecké shopnosti jsou neuvěřitelné!", 550, 300); } } } } else { g2d.drawString("Jsi výborný střelec!", 550, 300); } g2d.drawString("Tvoje skóre je: " + skore, 550, 400); g2d.drawString("_______________", 550, 410); g2d.drawString("pokud chcete hrát znovu", 550, 500); g2d.drawString("zmáčkněte libovolnou klávesu", 550, 550); } }
return;
4
Metoda pridejObjekt vytváří a přidává do kolekce Objekty s náhodnou velikostí a náhodnými souřadnicemi (viz příklad níže). K náhodnému zobrazení je použit objekt Random. Příklad void pridejObjekt() { int size = random.nextInt(170) + 50; int a = getWidth() - 80; int b = getHeight() - 80; Objekt o1 = new Objekt(random.nextInt(a - size) + 40, random.nextInt(b - size) + 40, size, random.nextInt(2500) + 500); if (b - size > 0 && a - size > 0) { objekty.add(o1); } EndObjekt oE = new EndObjekt(random.nextInt(a - size) + 40, random.nextInt(b - size) + 40, size, random.nextInt(2500) + 500); if (b - size > 0 && a - size > 0) { EndObjekty.add(oE); }
}
3. Ovládání hry + fungování ovládacích prvků 1.Kurzor myši – pomocí kurzoru myši se hráč snaží setřelit náhodně se objevující Objekty Při každém pokusu o setřelení se vyhodnotí jestli se souřadnice objektu shodují se souřadnicemi kurzoru. Pokud se shodují, hráč zasáhl a připočítává se mu skóre. 2.Libovolná klávesa – poku je konecHry True, tak se stisknutím libovolné klávesy vynuluje skore (viz příklad níže) a konecHry se změní na false. Příklad public void keyPressed(KeyEvent e) { if (konecHry = false) { return; } e.isActionKey(); skore = 0; repaint(); }
5
4. Přehled použitých datových typů import javax.swing.Timer; Timer timer; int x = 0; boolean zobrazen = false; int skore = 0; int casovac = 3000; boolean konecHry = false;
3 Grafické zpracování 1 – podmínka, určující jestli je nebo není konec hry. Pokud ano, spustí kód uvnitř. 2 – pokud je podmínka true, vytvoří se nové písmo (Font) 3 – g2d je metoda, pomocí níž jsou vykreslovány vytvořené čtverce(„Objekty“/„EndObjekty“) na obrazovku 4 – pokud jsou tyto podmínky splněny, hráči se zobrazí jeho skóre, přesnost a další instrukce 5 – pokud je výbuch (datový typ boolean) true, metoda g2d nastaví na „Objektu“, čtvereci patřičnou barvou. 6 – pokud je výbuch (datový typ boolean, na začátku je nastaven jako false) true, metoda g2d vykreslí na obrazovku „Objekt“, neboli čtverec, na souřadnicích (x,y) a velikosti (velikostX, velikostX). Pokud ne, „Objekt“ (čtverec) je vykreslen na obrazovku zeleně(na stejných souřadnicích o stejné velikosti). 7 – z kolekce EndObjektů jsou postupně brány prvky EndObjekty, které jsou stejně jako v bodě 6 vykresleny. 8 – pomocí metody g2d se na obrazovku vykrelí aktuální skóre a čas zbývající do konce hry. (viz níže Ilustrace 3)
6
Ilustrace 1: Výchozí stav hry
Ilustrace 2: Stav po skončení hry
7
Ilustrace 3: tento obrázek popisují body výše (viz Kapitola 3, Grafické zpracování) 8
Anotace Cílem mojí ročníkové práce bylo vytvořit jednoduchou a zábavnou postřehovou hru.V této hře se vyskytují dva druhy barevně odlišených čtverců. Ty se náhodně objevují na náhodných pozicích. Každý čtverec má svojí náhodnou velikost. Hráč se snaží „sestřelit“ zelené čtverce objevující se jen na krátkou dobu. Pokud není hráč příliš přesný a sestřelí čtverce červené, hra končí. Hra je omezena časovým limitem a je urcěna pouze pro jednoho hráče.
Abstract I tried to create an easy and funy perception game. In this game there are two types of squares with two colours. They are randomly shown on random positions. Each square has its random size. The player tries to shoot the green squares which are displayed in a short time as much as possibile. If he shot the red square, the game is finished. The game is limited by a time limit and it is just for one player.
9
4 Prohlášení Prohlašuji, že jsem jediným autorem tohoto projektu, všechny citace jsou řádně označené a všechna použitá literatura a další zdroje jsou v práci uvedené. Tímto dle zákona 121/2000 Sb. (tzv. Autorský zákon) ve znění pozdějších předpisů uděluji bezúplatně škole Gymnázium, Praha 6, Arabská 14 oprávnění k výkonu práva na rozmnožování díla (§ 13) a práva na sdělování díla veřejnosti (§ 18) na dobu časově neomezenou a bez omezení územního rozsahu.
10