Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek Hra Snake ročníkový projekt Jan Vondráček, 1E květen 2014
Obsah Anotace : ................................................................................................................................................. 1 Anotation………………………………………………………………………………………………………………………………………2 Zadání projektu : ..................................................................................................................................... 2 Samostatná práce : .................................................................................................................................. 2 Princip Hry : ........................................................................................................................................ 2 Cíl projektu: ......................................................................................................................................... 2 Historie hry Snake :.............................................................................................................................. 2 Samotný projekt : ................................................................................................................................ 3 Začátek : .......................................................................................................................................... 3 Třída Herní Objekt : ........................................................................................................................ 3 Třída Had : ....................................................................................................................................... 3 Třída Snake : .................................................................................................................................... 3 Ukázky obrázků ................................................................................................................................ 4,5,6 Instalace a spuštění : .............................................................................................................................. 7 Závěr: ....................................................................................................................................................... 7 Prohlášení : .......................................................................................................................................... 7
Anotace : Cílem projektu bylo vytvoření světoznámé hry Snake . Hráč se chopí role hada , který se snaží posbírat co nejvice jídel . S každým sebráním jídla se had prodluží o jednu kostičku . Hra končí když se začátkem hada nabourá do okraje nebo do hadova těla . Cílem hry je nasbírat co nejvíce jídel a mít tím pádem nejvyšší skore . Had se pohybuje 4 zakladními směry – doprava , doleva , nahoru a dolu . Ovládá se pomocí šipek.
~1~
Anotation: Goal of the project was to create well-known game Snake .Player has a role of snake which is about to collect as much food as possible .With each collected food the snake gets longer by one part. Game ends when collision of the snake with walls or his body occure . The goal of the game is to collect as much food as possible and thus receiving the highest score . The snake is driven in four basic directions – up, down, left, right . It’s controled by arrows keys.
Zadání projektu : Cílem je hra , ve které je had z čverečků a vy pomocí šipek hadem pohybujete a snažíte se posbírat co nejvíc „jídel“, které hada prodlužují . Had s každým soustem o trochu vyroste a nesmíte nabourat do svého hada a nebo do okrajů . Had se zrychlovat nebude a jídla se budou objevovat po sebrání toho předchozího Bude to projekt v Javě A na ploše asi 500x500 pixelech A na 50 x 50 hracich polich
Samostatná práce : Princip Hry : Had , který je na začátku jenom kostička , má za úkol posbírat co nejvíce jídel a přitom nenabourat do svého vlastního těla nebo do okrajů . Had se ovládá pomocí šipek . Skore se zobrazuje v pravém horním rohu . Jídla se objevují náhodně.
Cíl projektu: Mnou stanovený cíl projektu byl vytvořit jednoduchou hru snake , kterou může hrát každý a je velice jednoduchá na ovladatelnost .
Historie hry Snake : S hrou Snake přišla poprvé společnost Nokia v roce 1998 (obr . 1) a podle této verze jsem se snažil vytvořit svojí ročníkovou práci . O dva roky později přišla nová verze u které bylo již možné rozeznat hlavu hada a vrtící se ocásek a také se v této verzi oproti minulé objevilo 5 nových bludišt‘(obr . 2). Poté v roce 2002 vyšel snake ex a ex2 u prvního se moc nezmenilo od předchozí verze . Jenom se had stal barevným a trochu se zdokonalilo jídlo, ale ke změně došlo u verze ex2 (obr . 3), kde se objevil extreme mode , kde se po dosažení určitého počtu bodů objevil „teleport“ do dalšího a těžšího levelu . Poté přišel Snake Xenzia (obr . 4)v roce 2005 a změnila se především grafika. Hadovo tělo už nebylo rovné , ale zacalo se trochu vlnit a místo brouků už sbírá bonusové menší a větší bubliny . Další generace hry byla Snake 3 (rok 2006) . Tato verze již byla velice odlišná od minulých verzí . Grafické zpracování již bylo ve 3D a vylepšením prošel nejen had , ale i jidlo. Nejednalo se jen o kostičky a malé bublinky, ale zde se objevily nejen třešničky ale i hrušky, jablka, houby a spousta dalších (obr . 5).
~2~
Samotný projekt : Začátek : Nejdříve jsem začal tím ,že jsem si vytvořil nový projekt a poté dále třídu s názvem Snake . Do této třídy jsem zkopíroval My pannel a stanovil si velikost okna ,které má být podle zadání projektu 500 na 500 pixelů (ve zdrojovém kodu je velikost nastavena na 506 na 528 pixelů, protože okno celé má o něco vice než hrací plocha a tím pádem velikost hrací plochy zůstala 500 x 500 pixelů) a také jsem zde určil pevnou velikost okna .
Třída Herní Objekt (obr . 6) : Poté jsem si založil třídu herní objekt ve které jsem si založil pole s názvem pozice které má dva prvky – x-ovou a y-ovou osu . Také jsem zde založil řetězec s názvem typ a do určení jsem napsal “nic”, jelikož se typ herního objektu určí až u vytvoření nového objektu a také jsem založil barvu objektu , která se také určí později . A metoda kresli vykreslí vytvořené herní objekty . Třída Had (obr . 7): Dále jsem si vytvořil třídu Had , kde jsem vytvořil Arraylist s typem objektu Herní objekt a nazval jsem ho casti. A pak jsem si založil číselnou hodnotu směr . Následovalo založení metody Had, ve které jsem určil směr roven jedné ( jelikož jsou 4 směry (1 = nahorů, 2 = Dolů, 3 = Doprava, 4 = Doleva) Pak jsem založil nový herní objekt a nazval ho novaCast. Následně jsem určil všechny proměnné, jako barvu, typ a pozici a do Arraylistu casti jsem přidal na první (nulté) místo novaCast . Následně jsem vytvořil novou metodu pohyb , ve které jsem si opět založil nový herní objekt a určil jsem mu proměnné barvu a typ . Poté jsem přidal 4 podmínky , ve kterých jsem přesunul hlavu hada o jednu pozici dopředu (relativně k pohybu hada) a ubral jsem poslední kostičku těla hada. A posledním metoda třídy Had udělá to, že přidá hada do herního pole ale nevykreslí ho. Třída Snake : Začal jsem zkopírováním My Pannel, jak jsem již psal na začátku, a dále jsem si vytvořil několik neznámých nejdříve dvojrozměrné pole – objekty, ve kterém jsou uloženy všechny objekty na hrací ploše . Poté hada , jidlo , nahodu (na jidlo) ,boolean hraBezi , která je nastavena na true a font velkyText (na nápis GAME OVER) . Následně v metodě start jsem určil většinu proměnných jako objekty, had a založil jsem jidlo , které se bude zobrazovat na souřadnicích (nahoda.nextInt(48) + 1, nahoda.nextInt(48) + 1) . Následně jsem vytvořil ve dvou cyklech okraje hracího pole . Následovala prodleva (program počká x- milisekund než bude pokračovat dál).Poté také 4 série podmínek po 4 (pro všechny směry). V první serii se kontroluje zda čtvereček před hadem je prázdný, pokud ano had se tímto směrem pohybuje . Ve druhé sérii se kontroluje zda-li je před hadem jidlo a když ano tak hadovi neumaže poslední kostičku , a zároven‘ vygeneruje nové jídlo .Ve třetí serii se kontroluje zda had nenaboural do okrajů a když ano tak zavolá metodu GameOver .A konečně ve čtvrté sérii se kontroluje to samé, jako ve třetí,jen s tím rozdílem, že kontroluje, zda-li had nenarazil do svého těla . Pokud není splněna ani jedna podmínka z posledních dvou sérii tak se had jednoduše pohne dopředu . A nakonec v metodě start je repaint (překreslit). Následuje metoda Game Over ,ve které je napsáno že hrabezi = false a také repaint . Poté je metoda Snake , která je kostruktorem stejnojmenné třídy . Tato metoda kontroluje vstupy z klávesnice a upraví směr pohybu hada podle stisknutí šipky. Poslední metoda paintComponent zajištuje
~3~
vykreslení všech objektů do okna . Jako první odebereme všechny části hada a poté je znovu přidáme. Toto se provádí , protože by potom mohly na herní ploše zůstat zbytky starých částí hada . Následně vykreslíme všechny ostatní části jako je jídlo nebo okraje . Dále se vykreslí hráčovo skore a zkontrolujeme zda-li hráč prohrál . Pokud ano ,tak se zobrazí velký nápis „GAME OVER“ . A je zde také zakomentovaná část umožnující vykreslení mřížky .
Obr . 4
Obr . 5
Obr . 2
Obr . 1
Obr . 3
Obr . 4
Obr . 5
~4~
Obr . 6
Obr . 7
~5~
Obr . 8
Obr 9 . Metoda paintComponent a také ukáza herního pole s a bez mřížky
~6~
Instalace a spuštění : Moje verze hry snake nepotřebuje instalaci jenom stačí rozkliknout a mít správnou verzi Javy.
Závěr: Podle mého názoru se mi určený cíl podařilo splnit a jsem spokojen . Byla to dobrá zkušenost a poučení pro příští roky studia. Mohl bych dále pracovat na zlepšení: jiné barvy, druhy jídla, barvy prostředí, překážky, atd. , ale v příštím roce se těším i na jiné projekty.
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. V Praze, dne 18.5. 2014
~7~