IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

9. diel - Šibenice pre Android - Analýza a návrh aplikácie

V minulej lekcii, Šibenice pre Android - Animácie, Shared preferences a Intent , sme sa bavili o animáciách, zdieľaných nastavenie a intent. Poznáme teda už všetko potrebné pre vytvorenie našej šibenice. Dnešné Java Android tutoriál venujeme zberu požiadaviek, analýze a návrhu aplikácie.

Požiadavky

Vytvoríme jednoduchú hru Šibenica podľa klasických pravidiel s tým, že bude obsahovať:

  • systém bodovania hráčov; hráč bude mať na začiatku hry 10000 bodov, za každú chybu mu bude 1000 bodov odpočítané a za každé uhádnuté písmeno 500 bodov pripočítané s tým, že ak uhádne viac písmen za sebou, bude sa mu počet bodov násobiť.
  • slová z niekoľkých okruhov,
  • maximálna dĺžka slová bude 10 písmen,
  • hráč si bude môcť vybrať, z akého okruhu chce slová hádať,
  • po výhre / prehre sa zobrazí hádanie slovo a dosiahnuté body (skóre),
  • dosiahnuté skóre bude môcť hráč uložiť,
  • hráči bude tiež umožnené vymazať doterajšie výsledky,
  • ako pri uložení skóre, tak pri mazaní skóre bude hráčovi položený dotaz, či skutočne chce údaje uložiť / zmazať vo forme dialógu.
  • v žiadnej časti aplikácie nebude umožnená zmena orientácie obrazovky.

Analýza a návrh aplikácie

Aktivity

V našej aplikácii budeme potrebovať nasledujúce aktivity:

  • úvodnej animácie (Kapitola 11 úvodnej animácie)
  • hlavné menu - (ponuka),
  • aktivita pre zobrazenie výsledkov,
  • aktivita pre výber okruhu,
  • aktivita pre samotnú hru,
  • po výhre / prehre prejdeme do aktivity Endgame, kde dôjde k zobrazenie výsledkov a hádaného slová.

Logika prechodov medzi aktivitami bude vyzerať teda nasledovne:

diagram aktivít - Programovanie Android aplikácií v Jave

Obrázok 1 - diagram aktivít

Welcome

Túto úvodnú aktivitu sme si už opisovali v lekcii Welcome screen animácie kalkulačky a tu ju vytvoríme úplne rovnako.

Menu

Jednoduchý "rozcestník" pre našu druhú aplikáciu. Návrh bude obsahovať tri tlačidlá a jeden ImageView s obrázkom pre spestrenie.

  • prvý pre prechod do aktivity, v ktorej si hráč vyberie okruh adaných slov,
  • druhé pre zobrazenie výsledkov, prechod do aktivity pre výpis skóre,
  • tretí pre zatvorenie aplikácie.

Logika menu

Pomocou Intent zmeníme po kliknutí na tlačidlo aktivitu buď na výber okruhov (prvé tlačidlo) alebo na výpis skóre (druhé tlačidlo) alebo ukončíme aktivitu pomocou finish (tretie tlačidlo).

Výber okruhu

V tejto aktivite si užívateľ vyberie, z akého okruhu bude chcieť slová hádať. Pre výber použijeme RadioGroup so štyrmi RadioButton. Na záver pridáme tlačidlo, ktorým budeme spúšťať "prechod" do ďalšej aktivity.

Logika Výberu okruhu

Pomocou metódy getCheckedRadioButtonId() dostaneme ID RadioButton u, ktorý je zaškrtnutý. Pomocou tohto ID vytvoríme objekt RadioButton, z ktorého dostaneme metódou getText() String s okruhom.

Tento String zobrazíme ako toast.

Pomocou podmienky zistíme, aký okruh bol vybraný a nastavíme patričnú hodnotu premennej met (hodnota 1 pre informatiku, 2 pre mestá, 3 pre zvieratá a 4 pre automobily).

Vytvoríme intent, ktorý nás presunie do ďalšej aktivity Maingate. Ešte pred preskokom pridáme extra dáta pod názvom "VybranaMetoda", ako konkrétna hodnota bude figurovať premenná met.

Maingate

Aktivita, v ktorej bude prebiehať hranie našej hry. Pri spustení sa v hornej časti obrazovky spustí animácie v ImageView. Pod animácií sa bude zobrazovať "hracia plocha". V tej sa budú zobrazovať chybne zadané písmená a postupne sa bude vykresľovať šibenice podľa obvyklých pravidiel. Pod hraciu plochu sa budú vypisovať uhádnutie písmená.

Pod uhádnutými písmenami bude editText pre vkladanie znakov.

Logika Maingate

V onCreate() nastavíme animáciu pomocou AnimationDrawable. Pomocou getIntent().getIntExtra() vytiahneme hodnotu, ktorú sme pridávali v predchádzajúcej aktivite ako extra dáta. Táto hodnota nám povie, z akého okruhu budeme vyberať slovo. Zavoláme metódu vyberSlovo().

V metóde vyberSlovo() vyžrebujeme jedno slovo na základe vybraného okruhu pomocou triedy Random. Hneď potom ešte v onCreate() zavoláme metódu uprav().

Metóda uprav() má ako vstup vyžrebované slovo. V úvode metódy si vytvoríme objekty TextView 3 až 10, pretože naše slová budú mať minimálne 2 písmená a maximálne 10 písmen (jeden TextView pre jedno písmeno). Na základe dĺžky vylosovaného slová "pošleme preč" určitý počet TextView. To urobíme pomocou metódy setVisibility() s parametrom GONE.

Pre pochopenie pridávam príklad. Ak slovo bude mať dĺžku 2, je jasné, že obsahuje iba dve písmená, takže môžeme "poslať preč" textView3, textView4, ... textView10. Ak slovo bude mať dĺžku 8, pošleme preč iba textView9 a textView10.

Tlačidlu "Zadaj" priradíme metódu vlozeni().

Vloženom ()

V tejto metóde načítame vložený znak ako reťazec z editText, ten vyprázdnime a aby sme predišli rozlišovanie medzi malými a veľkými písmenami, aplikujeme na načítaný reťazec metódu toLowerCase(), čím zabezpečíme, že aplikácia nebude brať ohľad na veľké a malé písmená. Prevedieme na char a podmienkou zistíme, či sa jedná o českej písmeno. Na editText je nastavené maxLength="1", preto nie je potrebné ošetrovať vstup dlhší ako 1 znak. Ešte pred prevodom na char musíme zistiť podmienkou, či je vôbec čo prevádzať (inak by došlo k pádu aplikácie).

Pomocou for cyklu prejdeme všetky znaky v hádanie slove. Ak narazíme na zhodu, zavoláme metódu zapisSpravne() a scorePlus(), ďalej zdvíhame hodnotu premennej pocetVyskytu.

Po každom dokončenom prejdení cykle kontrolujeme, či sa zadané písmeno vyskytuje v našom pomocnom stringu pomDelka.

pomDelka je pomocný String, do ktorého budeme ukladať zadanej písmená. Na začiatku je prázdna. Ak nám metóda indexOf(zadané písmeno) vráti hodnotu -1, znamená to, že sme počet uhádnutých písmen ešte nepripísala. V tomto prípade pripočítame k premennej delkaSlova hodnotu premennej pocetVyskytu.

pocetVyskytu musí byť nastavená na 0 pred každým novým zadaním. Vo for cyklu sa jej hodnota dvíha o 1 zakaždým, keď dôjde k zhode zadaného písmená v hľadanom slove. Počíta nám teda, koľkokrát sa vyskytuje zadané písmeno v hádanie slove. Ak sa táto hodnota rovná 0, je jasné, že sme písmeno neuhádli.

Po zdvihnutí hodnoty premennej delkaSlova sa kontroluje, či už táto hodnota zodpovedá dĺžke hádaného slová. Ak áno, hráč vyhral, pretože uhádol všetky písmená.

Na záver sa skontroluje, či je pocetVyskytu rovný 0. Ak áno, volá sa metóda zapisSpatne() a scoreMinus(), pretože zadané písmeno sa v slove nevyskytuje a tým pádom hráč hádal zle.

Pre lepšie pochopenie pridávam spomínaný priebeh spracovaný graficky. Pre väčšiu prehľadnosť sú jednotlivé premenné zvýraznené.

Diagram hádanie písmená - Programovanie Android aplikácií v Jave

Obrázok 2 - diagram hádanie písmená

ZapisSpravne

Ako parameter má zadané písmeno a jeho pozíciu v hľadanom slove. Vytvoríme si objekty textView1textView10. Na základe pozície pomocou konštrukcie switch zistíme, aký TextView prepísať z pôvodného _ na zadané písmeno.

ScorePlus

Multiplikátor bude na začiatku nastavený na 0. Ak sa zavolá táto metóda, zdvihne multiplikátor o 1 a vynásobia ho hodnotou 500. Za prvý uhádnutie je teda 500 bodov, za druhé v rade 1000, za tretie 1500 atď. Multiplikátor sa bude nastavovať späť na 0 v metóde scoreMinus() (tzn. Pri chybe).

Aby sme predišli tomu, že hráč zadá niekoľkokrát za sebou rovnaké písmeno a bude sa mu dvíhať skóre, použijeme rovnaký spôsob ako v metóde vlozeni().

Vytvoríme si teda ďalšie inštančný premennú. Prázdny String suhadnute:

if (suhadnute.indexOf(pismeno)==-1) { ... }

Ak je podmienka splnená, znamená to, že sme skóre pre zadané písmeno ešte nepripísala. V tele podmienky nesmieme zabudnúť pridať uhádnuté písmeno do pomocného reťazca:

suhadnute+=pismeno;
ZapisSpatne ()

Táto metóda sa volá, ak sa zadané písmeno v hádanie slove nevyskytuje ani raz. Do TextView pridáme zadané písmeno a podľa počtu chýb vykreslíme správny obrázok až do deviatej chyby, potom sa bude volať metóda konecHry().

ScoreMinus ()

Metóda od skóre odpočíta 1000 a nastaví multiplikátor na 0. Ošetríme rovnakým spôsobom ako u scorePlus(), aby sme predišli odpočítaní skóre pri zadaní rovnakého chybného písmena viackrát za sebou.

KonecHry ()

Volá sa pri deviatej chybe. Pomocou Intent prejdeme do aktivity Endgame a pridáme extra dáta v podobe hádaného slová a dosiahnutého score.

Je dôležité aktivitu Maingau ukončiť pomocou finish().

Vyhra ()

Obdobné ako konecHry(). Pomocou Intent preskočíme do aktivity WinGame a ako extra pridáme hádanie slovo a dosiahnuté skóre.

Aj tu pomocou finish ukončíme Maingate aktivitu.

Endgame

Ide o aktivitu, v ktorej sa zobrazia výsledky po dokončení hry, teda hádanie slovo a dosiahnuté skóre. Tiež sa zobrazí animácia podľa toho, či sa bude jednať o výhru alebo prehru. Hráč bude môcť skóre uložiť alebo sa vrátiť do hlavnej ponuky bez uloženia.

Logika Endgame

V onCreate() sa vytiahne pomocou getIntent() hodnota skóre, hádanie slovo a informácie o tom, či sa jedná o prehru alebo výhru. Ešte v onCreate() zavoláme metódu zobrazScore() a nactiAnimaci().

ZobrazScore ()

V TextView zobrazíme hádania slovo, ktoré sme si načítali v onCreate(). To isté urobíme s hodnotou skóre.

NactiAnimaci ()

Vytvoríme objekt AnimationDrawable a pomocou podmienok zistíme, či sa jedná o prehru alebo výhru (podľa hodnoty, ktorú sme načítali v onCreate()) a nahráme patričné snímky pre animáciu.

UlozScore ()

Na tlačidlo "Ulož score" nastavíme metódu ulozScore(). Tá si načíta String z editText. Pokiaľ tento String bude dlhšia ako 3 znaky (podmienka) a nebude obsahovať Enter, vytvorí AlertDialog. V prípade, že ho užívateľ potvrdí kliknutím na "Áno", zavolá metódu ulozDoPameti().

UlozDoPameti ()

Vytvorí SharedPreferences "VYSLEDKY", ktorý bude v móde private. Ďalej vytvorí editor. Pomocou editora vloží výsledky do SharedPreferences.

Po uložení sa aktivita pomocou finish() ukončí.

Ukončí ()

Táto metóda bude na tlačidle Hlavná ponuka. Urobí iba to, že ukončí súčasnú aktivitu pomocou finish().

ShowScore

Aktivita pre zobrazenie výsledkov.

Logika ShowScore

V onCreate() načíta dáta z SharedPreferences a zobrazí ich v TextView.

Na tlačidle "Vymazať" bude AlertDialog builder pre potvrdenie akcie.

Tlačidlo "X" bude slúžiť pre ukončenie tejto aktivity pomocou finish.

V budúcej lekcii, Šibenice pre Android - Aktivity a implementácia , sa budeme venovať návrhu jednotlivých aktivít a začneme s implementáciou.


 

Predchádzajúci článok
Šibenice pre Android - Animácie, Shared preferences a Intent
Všetky články v sekcii
Programovanie Android aplikácií v Jave
Preskočiť článok
(neodporúčame)
Šibenice pre Android - Aktivity a implementácia
Článok pre vás napísal Jiří Frank
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v C# a vývoji aplikací pro platformu Android a dalším věcem spojeným s Android OS
Aktivity