Postřehová hra Zadání projektu 1 Moje cíle

Transkript

Postřehová hra Zadání projektu 1 Moje cíle
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<Objekt> 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

Podobné dokumenty

Dokumentace

Dokumentace Key.getCode()), avšak po posbírání informací již nic nebrání uložení události.

Více

Aliens atack - Gymnázium Arabská

Aliens atack - Gymnázium Arabská The goal of the project was to crate a game called „Aliens atack“. This game come from popular game „Space Invaders“. The game was created in programming language Java in development environment Ne...

Více

Dokumentace bakalářské práce

Dokumentace bakalářské práce Původní MahJong je hra pocházející z Číny, určená pro čtyři hráče. Pro její úspěšné hraní je třeba umění strategie, předvídavosti, dobrá pamět’, ale stejně tak i štěstí. V závislosti n...

Více

Processing 3.0 a p5.js

Processing 3.0 a p5.js this.setSize(600, 600); //The window Dimensions setDefaultCloseOperation(javax.swing.WindowConstants. EXIT_ON_CLOSE); this.setVisible(true);

Více

Java FAQ velmi rozsáhlý soubor otázek a odpovědí

Java FAQ velmi rozsáhlý soubor otázek a odpovědí Jednak interfejs, který definuje metody jež slouží přijetí specifických událostí, jednak objekt (handler), který tyto metody implementuje a tudíž objekty-události přijímá a zpracovává. E#096 Co je ...

Více

Bioelektrické jevy a jejich měření (B150P30)

Bioelektrické jevy a jejich měření (B150P30) retinoschisis, diabetická retinopatie, hypertensní retinopatie či Takayasuova choroba. snímek 8 prezentace 7 ERG záznam se poněkud liší při použití různých typů záznamových elektrod (vlevo, jde o z...

Více

Automatický rezerva£ní systém

Automatický rezerva£ní systém doporučení vhodných technologií a také za podrobné připomínky k textu této práce.

Více

Zde v pdf - zoosdmotol.cz

Zde v pdf - zoosdmotol.cz princip univerzálního dědického nástupnictví, což znamená, že dědic nastupuje nejen do zůstavitelových práv, ale i do povinností. Odkaz je výjimkou z tohoto pravidla. Nabytí dědictví potvrzuje dědi...

Více