Gymnázium, Praha 6, Arabská 16 Předmět Programování, vyučující Tomáš Obdržálek Hledání Min Ročníkový projekt Filip Mašát, 1.

Podobné dokumenty
Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek Šibenice ročníkový projekt Tadeáš Váša, 1E květen 2014

V Dolních Břežanech dne 10. května 2014

Gymnázium, Praha 6, Arabská 14. předmět Programování, vyučující Tomáš Obdržálek. Počítačová hra Fotbalový Manažer. ročníkový projekt.

Gymnázium Arabská. Hra Pexeso. ročníkový projekt předmět programování vyučující Tomáš Obdržálek autor Ondřej Novák školní rok 2013/2014

Gymnázium, Praha 6, Arabská 16. předmět Programování, vyučující Tomáš Obdržálek Lodě Dokumentace ročníkového projektu Martin Karlík, 1E 17.5.

Piškvorky. Gymnázium, Praha 6, Arabská 16. Kristofer Filip, 1.E. Květen Stránka 1. předmět programování, vyučující Tomáš Obdržálek

Gymnázium, Praha 6, Arabská 14. předmět Programování, vyučující Tomáš Obdržálek. Program pro kontrolu správného vývoje dítěte.

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

Obsah Anotace :... 1 Anotation 2

Gymnázium, Praha 6, Arabská 14. Loydova patnáctka. Dokumentace ročníkového projektu. Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1.

Vědomostní test. Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek

Matematika. Gymnázium, Praha 6, Arabská 16. předmět Programování, vyučující Tomáš Obdržálek. dokumentace ročníkového projektu.

Restaurator. Semestrání projekt předmětu PDA

Příručka aplikace KNetWalk. Fela Winkelmolen Eugene Trounev

Gymnázium, Praha 6, Arabská 14. předmět: Programování. vyučující: Tomáš Obdržálek. Piškvorky. ročníkový projekt. Le Hoang Nguyen, 1.E.

Karty Prší. Anotace: Abstract: Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek

Mobilní hra Block Runner ročníkový projekt David Novák, 1.E květen 2014

Záznam uživatelského testování "Pojištění před zahraniční cestou"

Copyright 2013 Martin Kaňka;

Hledání správné cesty

[BAL-MLP] Multiplayer

Manuál pro uživatele on-line hry Pimp Your Landscape. On-line hra Pimp your Landscape Návod pro uživatele

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Uživatelská příručka Autor: Martin Fiala

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Příručka aplikace Bovo

DUM č. 9 v sadě. 30. Inf-6 Imagine Logo a animace pro nižší gymnázium

NÁVOD LOGIX mini Hra pro 2-4 hráče

Sběr informačních povinností regulovaných subjektů. Návod na instalaci certifikátů a nastavení prohlížeče. Verze: 2.1

Nová hra od Sazky JEDINÁ KASIČKA, KTERÁ NÁSOBÍ VKLADY. Splňte si svůj sen

TESTOVÁNÍ UŽIVATELSKÉHO ROZHRANÍ

Micro:bit lekce 3. - Konstrukci If Then a If Then Else najdete v kategorii Logic - Podmínky od If (např. porovnání < >= atd.) najdete taktéž v Logic

Cíl hry: Cílem hry je získat počet bodů, který si hráči stanoví na začátku. Body lze získat za slova složená z písmen na vylosovaných kostkách.

Úvodem... 9 Kapitola 1 Karetních

Informatika 8. třída/6

Baltík 2008 zadání školního kola kategorie A a B

MS SQL Server 2008 Management Studio Tutoriál

JAK PROMĚNIT NÁVŠTĚVNÍKY V ZÁKAZNÍKY

GEOMETRICKÁ MÍSTA BODŮ V MATEMATICE ZŠ ÚVOD

Algoritmizace a programování

Úvod do počítačových sítí

PISA 2015 Online učitelský dotazník: Manuál pro učitele

THEOPHILOS. (návod k použití)

Návod. Logická hra pro 2 5 hráčů. Hrací doba: přibližně 45 minut. Věk: od 7 let. Obsah balení:

Příručka aplikace Kollision. Paolo Capriotti

DOTAZNÍK PRO URČENÍ UČEBNÍHO STYLU

Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek. Napking 87

HERNÍ PLÁN. Multi Lotto je modulární systém pro obsluhu více her v jednom terminál.

ABSOLVENTSKÁ PRÁCE ZÁKLADNÍ ŠKOLA, ŠKOLNÍ, BYSTRÉ ROČNÍK. AZ-kvíz. Jaroslav Jíra

Počítačové zpracování obrazu Projekt Učíme se navzájem

ČVUT FEL. Testování nemocničního systému Fonsakord

Uživatelská příručka T UC-One pro windows

aneb velice zjednodušené vysvětlení základních funkcí a možností systému Vypracoval: Tomáš Dluhoš tomas.d@centrum.cz

TECHNICKÁ DOKUMENTACE SOCIÁLNÍ SÍŤ MRSHARE. David Malát, Adam Novák, David Vurbs, Dominik Walta. SPŠ Na Proseku 2012/13. Pod velením Davida Vurbse

Semestrální práce C1- Test s uživatelem

Školní kolo soutěže Baltík 2007, kategorie A a B

Emotion Technická charakteristika

Manuál pro Zákaznický servis CCS

PROJEKT MINY - DOKUMENTACE

Zlepšování kvality dat zločinců EU

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Výukový materiál pro projekt Elektronická školička reg. č. CZ.1.07/1.3.05/ "Interaktivní DUMy"- interaktivity lze dosáhnout i v MS PowerPoint

Zadání soutěžních úloh

ŘEŠENÍ MULTIPLIKATIVNÍCH ROVNIC V KONEČNÉ ARITMETICKÉ STRUKTUŘE

Martin Heni Eugene Trounev Kontrolor: Mike McBride

Regionální kolo soutěže Baltík 2007, kategorie A a B

HERNÍ PLÁN PANDORA APOLLO GAMES APOLLO SOFT k. s.

Tvorba počítačové hry. GameJN

-menu: dává přístup k funkcím programu. v návodech, pokud chceme říct "klikněte na Soubor a pak na volbu Nový", to zapisujeme jako: Soubor / Nový

Školní kolo soutěže Mladý programátor 2013, kategorie C, D

Pokyny pro žáky k testování písemné zkoušky na počítači

HERNÍ PLÁN WIN AND RACE APOLLO GAMES APKSOFT s.r.o.

ekasa popis funkcionality pro PNS

Kreslící program. V této lekci se naučíš vytvořit si vlastní kreslící program! Následujte postupně tyto INSTRUKCE

Nastavení stránky : Levým tlačítkem myši kliknete v menu na Soubor a pak na Stránka. Ovládání Open Office.org Draw Ukládání dokumentu :

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 27 NÁSTROJE KRESLENÍ]

NÁVOD K POUŽITÍ. IP kamerový systém.

HERNÍ PLÁN GOLDEN TREASURE APOLLO GAMES APKSOFT s.r.o.

Možnosti tisku v MarushkaDesignu

Tabulkový kalkulátor

A) IF předmět před Baltíkem

Proces editace JOSM. Tato příručka může být stažena jako josm_more-about-josm_en.odt or josm_more-aboutjosm_en.pdf

Popis ovládání aplikace - Mapový klient KÚPK

Návod na tvorbu časové přímky v programu Microsoft PowerPoint 2013

WEBsro.cz. Krok za krokem Založení webu. krásné weby pro české podnikatele 1 / 10

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

ANOTACE vytvořených/inovovaných materiálů

Před začátkem programování by se měl vždy robot zkalibrovat Klikněte na tlačítko Home v pravém horním rohu DobotStudia

František Hudek. březen ročník

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

PROJEKT WEBOVÉ STRÁNKY Conor Anthony McGregor

VÝUKOVÝ MATERIÁL. Informační a komunikační technologie: studijní a učební obory Bez příloh

VISUAL BASIC. Přehled témat

Česká příručka. Obsah Balení. Systémové Požadavky. Instalace a podpora. Roccat Isku klávesnice Rychlá instalační příručka

Gabriela Janská. Středočeský vzdělávací institut akademie J. A. Komenského

HERNÍ PLÁN. Multi Lotto je modulární systém pro obsluhu více her v jednom terminál.

Univerzální postup zřízení certifikátů pro přístup do Czech POINT

BARVY. Příkaz barva. Barvy TrueColor. Se objeví dialogové okno

Transkript:

Gymnázium, Praha 6, Arabská 16 Předmět Programování, vyučující Tomáš Obdržálek Hledání Min Ročníkový projekt Filip Mašát, 1.E květen 2014

anotace: Hledání min je logická hra pro jednoho hráče, ve které jde o odhalení všech políček, až na ty kde se nachází miny. Pokud hráč odhalí políčko s minou, hra končí a on prohrál. Hráčovi pomáhají čísla na různých políčkách, které udávají, kolika min se dotýká. Hra je zpracovaná graficky a tento projekt byl vytvořen ve vývojovém prostředí Netbeans za užití programovacího jazyka Java Minesweeper is a single player logic game, the objective of the game is to uncover a minefield without detonating any mines. If the player uncovers a box with a mine, he loses. The numbers in boxes help the player, because they tell the player, how many mines they re touching. The game is graphically processed and this project was written in Java using Netbeans. 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. Stránka 1

Zadání projektu Filip Mašát 1.E Funkce Java Hrací pole Možnost označení políčka Každé políčko kde není mina, bude ukazovat, kolika min se dotýká Náhodné naplňování políček minami (vždy stejný počet) Ukončení aplikace v případě kliknutí Bonusové funkce Měření času Pokud hráč klikne na prázdné pole, odhalí se všechna okolní nevyplněná Stránka 2

Obsah Hledání min... 4 Úvod... 4 1 Instalace... 4 2 Vytváření mé hry... 4 2.1 Vytvoření hracího pole... 4 2.2 Naplňování pole... 5 2.3 Ovládání myší... 5 2.4 Odhalování polí... 5 3 Problémy a zádrhely... 6 3.1 ArrayOutOfBoundsException... 6 3.2 Označováni a od-označování políček... 6 3.3 Zobrazování nul... 6 3.4 Počet min... 7 Závěr... 8 Zdroje... 8 Stránka 3

Úvod Hledání min Jako ročníkový projekt jsem si vybral hru hledání min. Zvolil jsem si ji z toho důvodu, že to byla první hra, která mě napadla, kterou bych mohl zvládnout. Hledání min je hra, která se poprvé objevila v roce 1990 jako součást Windows Entertainment Pack. 1 Instalace Otevřeme si složku Hledání min a spustíme soubor HledaniMin.jar. Instalace není potřeba. Obrázek 1- Historie vzhledu hledání min 2 Vytváření mé hry 2.1 Vytvoření hracího pole Celý projekt jsem dělal v NetBeansech v MyPanelu, který jsme obdrželi od pana profesora Obdržálka. Je to třída, která má v sobě již načrtnuté metody jako paintcomponent, MouseListener, KeyListener a samozřejmě Main. Jako jednu z prvních věcí jsem si vytvořil třídu Tlačítko a v ní objekty typu int: mina a dotyky. Postupem času jsem k nim přidal objekty typu boolean: wasclicked a oznaceni (viz. Obrázek 2). Objekt mina jsem měl původně typu boolean, avšak potom jsem zkusil omezit počet min pomocí random.nextint(). To je však neomezilo úplně, ale na chvíli to účel splnilo. Int dotyky určuje, počet min kterých se dané políčko dotýká, boolean wasclicked říká, zda hráč již na tlačítko klikl a boolean oznaceni nám určuje, zda hráč toto dané políčko označil z důvodu, že si myslí, že je zde mina. Nejdříve jsem si vytvořil dvojrozměrné pole, které jsem naplňoval jednotlivými objekty. Poté jsem ho v paintcomponentu vytiskl. Na vytisknuté pole jsem potom položil modré čtverce, které zakrývají jednotlivá políčka. Obrázek 2- Objekty v třídě Tlacitko Stránka 4

2.2 Naplňování pole Pole jsem naplňoval v metodě Main. Pole jsem nejdříve pouze vytvořil a naplnil. Všechny objekty, které nyní byly v poli, byly stejné. Poté jsem vytvořil cyklus, který se 15x opakoval a během každého opakování si náhodně vygeneroval dvě čísla, tedy souřadnice kde leží mina. Poté následoval cyklus, kde jsem se ptal, kolika min se dané tlačítko dotýká. Kvůli tomuto jsem musel udělat obrovské množství podmínek, protože pokud bych ho neudělal, tak by se objevovala chyba: ArrayOutOfBoundsException. V překladu: ptal jsem se na pozice, které neexistují. Objekty wasclicked a oznaceni se neměnili. 2.3 Ovládání myší Tato část mi dala velice zabrat. Před tím jsem s metodou mouselistener nikdy nepracoval a bylo pro mě obtížné pochopit její podstatu. Zde se začali měnit objekty wasclicked a oznaceni. V mouselistener jsem si musel vytvořit podmínku, která říká, na které políčko jsem klikl (viz. Obrázek 3). Dále jsem vytvořil podmínku, díky které program ví, zda je již konec. Pokud konec ještě nebyl, tak se u daného tlačítka změní wasclicked na true. Zde jsem také musel naprogramovat označování jednotlivých políček. Udělal jsem to stejně jakou u odhalování políček, jen s tím rozdílem, že to je pro pravé tlačítko myši a na true se mění oznaceni. Avšak to nebylo vše, protože jsem musel nějak zařídit, abych dané označení mohl vrátit zpět. K tomuto účelu jsem použil prostřední tlačítko myši, které vypadalo v podstatě stejně jako pravé, jen s tím rozdílem, že se zde oznaceni menilo na false. Obrázek 3- Podmínka pro zjištění pozice v poli 2.4 Odhalování polí Jak jsem říkal v předchozí části, vždy pokud kliknete levým tlačítkem myši na políčko tak se změní wasclicked na true. To v paintcomponent tudíž musí způsobit něco, díky čemuž se čtverec na dané pozici nevykreslí. K tomuto jsem použil podmínku if (!miny[i][j].wasclicked). V této podmínce jsem začal kreslit čtverce, tudíž pokud se wasclicked rovná true, tento krok se přeskočí a tím pádem se čtverec nevykresli, respektivě nevyplní. Stejně tak funguje i označování políček, pouze v podmínce je oznaceni a čtverec se vyplní žlutou barvou. HledaniMin Tlacitko MyPanel BufferedImage Objekty: mina, dotyk wasclicked, oznaceni main MyPanel paintcomponent mouselistener mousereleased Obrázek 4-Diagram struktury projektu Stránka 5

3 Problémy a zádrhely 3.1 ArrayOutOfBoundsException Jak jsem říkal už při vyplňování pole, tak tato chyba se mi ukazovala kvůli ptaní se na políčka v poli, která ani neexistovala. Dlouho mi trvalo, než jsem přišel na to, co musím udělat, sice název chyby je dost zavádějící ale i tak jsem si nebyl jistý. Tak jsem vytvořil asi šest podmínek, ale všechny pouze pro pozice kde figurovala nula. Takže se mi i přes těchto několik podmínek chyba stále ukazovala. Já jsem však pokračoval v projektu dále, protože se mi i zároveň pole špatně vykreslovalo a zkrátka a jednoduše tato chyba nebyla jediná. Když jsem se však na to opět s odstupem času koukl, uvědomil jsem si, že musím udělat i podmínky pro pozice kde jedna ze souřadnic je devítka, protože jsem si před tím neuvědomil, že i když to neodkazuje na zápornou souřadnici, stále to může být špatně. A tak přibily další podmínky. Obrázek 5- Jedna z podmínek pro zjištění min kolem 3.2 Označováni a od-označování políček Toto jsem již popsal v ovládání myší, a tak zde nebudu psát o tom, jak tato metoda funguje, nýbrž o tom v čem mi to dělalo problém. Hledal jsem na internetu jak na to, ale i tak jsem nemohl na nic přijít. Jedna z mých myšlenek, na kterou jsem přišel hledáním na internetu, byla taková, že kliknu pravým tlačítkem na políčko a objeví se mi PopUpMenu(menu s možnostmi), ve kterém zvolím označení políčka. To bylo moc složité. Poté jsem zjistil, že existuje metoda BUTTON1 (2,3). A tak jsem označování dal do metody BUTTON2. To mi však stále nefungoval a netušil jsem proč. Důvod byl takový, že jsem si myslel, že BUTTON2 je pravé tlačítko myši. Ono to však bylo prostřední (myslí se tím samozřejmě kolečko). A tak jsem toho využil a do BUTTON2 jsem dal od-označení a do BUTTON3 označení. 3.3 Zobrazování nul Toto je jediný problém, který jsem nedokázal vyřešit. Naštěstí je součástí bonusových funkcí, ale i tak jsem se pokusil toto splnit. Princip této funkce byl takový, že pokud hráč klikne na políčko, které se nedotýká žádné miny, tak se odhalí i všechna okolní. A pokud je na vedlejším místě další políčko s dotykem rovnajícímu se nule, tak se odhalí okolní políčka i u něj a vznikne jakási řetězová reakce. Mě se povedlo pouze zobrazit políčka obklopující odhalené políčko. Využil jsem k tomu již použité podmínky, pro zjištění kolika min se políčko dotýká, pouze jsem je trochu upravil, aby fungovali, jak potřebuji. Obrázek 6-Rozklikávání v mém programu, rozklikávání v originálních hledání min Stránka 6

3.4 Počet min Tento problém jsem se ze začátku snažil vyřešit tím, že nebudu používat pouze náhodu z ano nebo ne, ale tím, že budu každé pole vyplňovat náhodnými čísly 0-9 a pokud by bylo číslo nižší nebo rovno 1 tak by zde byla mina. K tomuto účelu jsem uzpůsobil i všechny podmínky. Poté mi však začalo vadit, že počet min není omezený, a tak jsem začal hledat nový způsob. Udělal jsem cyklus, který se patnáctkrát opakoval a během kterého se vygenerovalo 15 náhodných souřadnic, kde jsou miny umístěny. To však mělo menší zádrhel a to že se mohly objevit dvě miny na jedné souřadnici. A tak k tomu jsem musel vytvořit další cyklus, ve kterém jsem znovu vygeneroval náhodné souřadnice, a poté jsem se ptal, zda tyto souřadnice jsou již minou obsazené, pokud byly, tak se cyklus opakoval. Obrázek 7-Cyklus k naplňování minami Stránka 7

Závěr Upřímně se svým projektem jsem velice spokojený, protože jsem splnil všechny základní cíle, které jsem si dal a to i včetně jednoho z bonusových. Práce jako taková mě bavila a upřímně si myslím, že mi hodně pomohla s programováním jako takovým. Zdroje http://www.techradar.com/news/gaming/the-most-successful-game-ever-a-history-ofminesweeper-596504 Stránka 8