16. Projekt Hádání slov

Podobné dokumenty
Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

M-10. AU = astronomická jednotka = vzdálenost Země-Slunce = přibližně 150 mil. km. V následující tabulce je závislost doby

MS Word 2007 REVIZE DOKUMENTU A KOMENTÁŘE

Grafické řešení soustav lineárních rovnic a nerovnic

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Rozšířená nastavení. Kapitola 4

Business Contact Manager Správa kontaktů pro tisk štítků

Poruchy modul pro rychlé hlášení poruch z provozu.

Evidence dat v prostředí MS Excelu Kontingenční tabulka a kontingenční graf

20. Projekt Domácí mediotéka

DMX512 PC Control Stručný návod k použití programu Verze 1.0 Copyright 2007 Dokumentace: Ing. Jaroslav Nušl

Příručka pro práci s dataloggerem Labquest 2. Zapínání a domácí obrazovka

Novinky v programu Majetek 2.06

Goniometrie trigonometrie

DATABÁZE DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1. Podpora digitalizace a využití ICT na SPŠ CZ.1.07/1.5.00/34.

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

2.1. Pojem funkce a její vlastnosti. Reálná funkce f jedné reálné proměnné x je taková

František Hudek. červen ročník. Nastavení myši, místní a jazykové nastavení.

Asymptoty grafu funkce

4 Část II Základy práce v systému. 6 Část III Úvodní obrazovka. 8 Část IV Práce s přehledy. 13 Část V Kontakty. 19 Část VI Operativa

Operační program Rybářství

Zadávání tiskových zakázek prostřednictvím JDF a Adobe Acrobat Professional

Seznámení žáků s pojmem makra, možnosti využití, praktické vytvoření makra.

Obsah. Úvodem 9 Komu je kniha určena 9 Forma výkladu 9 Konkrétní postup výuky 10 Příklady ke knize 11

Návod ke stažení a instalaci bodů zájmu do navigace TomTom řady Via a Go100x

C. 2. Pořízení a implementace IS

Druhá mocnina. Druhá odmocnina Druhá odmocnina. Předpoklady: V této hodině jsou kalkulačky zakázány.

Změnu DPH na kartách a v ceníku prací lze provést i v jednotlivých modulech.

Modul pro testování elektrických obvodů

Předmluva 1 Typografická konvence použitá v knize 2. 1 Úvod do Wordu Popis obrazovky 7 Popis panelu nabídek 9 Zadávání příkazů 10

Numerická integrace. 6. listopadu 2012

Programování 1. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

NUMEROLOGIE CO JE NUMEROSKOP

AMU1 Monitorování bezpečného života letounu (RYCHLÝ PŘEHLED)

4. cvičení: Pole kruhové, rovinné, Tělesa editace těles (sjednocení, rozdíl, ), tvorba složených objektů

(k 1)x k + 1. pro k 1 a x = 0 pro k = 1.

Java a Caché IV: Manipulace s objekty

téma: Formuláře v MS Access

Pocasicz.cz / pocasiesk.sk - zadání výroby

Zálohování a obnova Uživatelská příručka

Matrika otázky a odpovědi Vidimace částečné listiny. Ing. Markéta Hofschneiderová Eva Vepřková

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Záloha a obnovení Uživatelská příručka

2.8.8 Kvadratické nerovnice s parametrem

MSSF Benefit praktický průvodce pro žadatele v rámci Operačního programu Rozvoj lidských zdrojů

Kapitola 5 WCF, webové služby a mezidoménové zásady

Externí zařízení Uživatelská příručka

TIP: Pro vložení konce stránky můžete použít klávesovou zkratku CTRL + Enter.

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému.

Uživatelský manuál k instalaci a aktivaci systému BUILDpower S

Uživatelské postupy v ISÚI Založení ulice a změna příslušnosti adresního místa k ulici

Zápis dat z dotykového displeje s integrovaným PLC SmartAxis Touch na USB Flash disk a vyčítání dat pomocí softwaru Downloader

2.6.4 Lineární lomené funkce s absolutní hodnotou

TVORBA MULTIMEDIÁLNÍCH PREZENTACÍ. Mgr. Jan Straka

WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE

František Hudek. únor ročník

Úprava tabulek v MS Word. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí

Android Elizabeth. Verze: 1.3

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

2.2.2 Zlomky I. Předpoklady:

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

Autodesk Inventor 8 vysunutí

1. Základní nastavení telefonu Vložení SIM karty Vložení paměťové karty Zapnutí telefonu a PIN. 2. Kontakty. 3. Volání

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

rozlišení obrazovky 1024 x 768 pixelů operační systém Windows 2000, Windows XP, Windows Vista 1 volný sériový port (volitelný) přístup na internet

Jan Březina. Technical University of Liberec. 17. března 2015

Informační a komunikační technologie. 1.4 Data, informace, komprimace

Algoritmizace a programování

Žáci mají k dispozici pracovní list. Formou kolektivní diskuze a výkladu si osvojí grafickou minimalizaci zápisu logické funkce

Outlook manuál. BeeOnline. Rychlý kontakt:

JAK ZVLÁDNOUT E-LEARNINGOVÝ KURZ

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

Ozobot aktivita lov velikonočních vajíček

Poukázky v obálkách. MOJESODEXO.CZ - Poukázky v obálkách Uživatelská příručka MOJESODEXO.CZ. Uživatelská příručka. Strana 1 / 1. Verze aplikace: 1.4.

Praktické úlohy- zaměření specializace

BlueJ a základy OOP. Programování II 1. cvičení Alena Buchalcevová

Třetí sazba DPH 10% v programech Stravné a MSklad pokročilé nastavení

Manuál Kentico CMSDesk pro KDU-ČSL

Výrazy lze též zavést v nečíselných oborech, pak konstanty označuji jeden určitý prvek a obor proměnné není množina čísel.

Návod k použití aplikace jízdního řádu v mobilním telefonu. Stažení

Sada 2 - MS Office, Excel

titul před titul za rodné číslo datum narození (nebylo-li přiděleno rodné číslo)

modul Jízdy a Kniha jízd uživatelská příručka

Změna sazby DPH v HELIOS Red po

Operace nad celými tabulkami

Škola VOŠ a SPŠE Plzeň, IČO , REDIZO

DUM 09 téma: Vytvoření a uložení nového obrázku

Rychlý postup k nastavení VoIP telefonu WELL 3130 IF

Novinky verze ArCon 14 Small Business

Magnetic Levitation Control

Stručný návod na práci v modulu podatelna a výpravna

Hypertextový odkaz No.1. Word 2010

Algoritmizace a programování

Postup doplnění kódu adresního místa

Jednotný vizuální styl: podpis v ové korespondenci.

Podrobný postup pro doplnění Žádosti o dotaci prostřednictvím Portálu Farmáře. 1. kolo příjmu žádostí Programu rozvoje venkova ( )

Modul Řízení objednávek.

Želva se nachází v tzv. grafickém okně (zviditelníme ji klávesou +), v němž jsou vidět i čáry, které nakreslila.

Transkript:

Projekt Hádání slov strana 157 16. Projekt Hádání slov 16.1. Základní popis, zadání úkolu Pracujeme na projektu Hádání slov, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy HadaniSlov a zavoláme metodu show(). Spustí se grafická aplikace umožňující hádání slov viz obrázek 16.1. Obrázek 16.1 Vzhled aplikace Hádání slov po spuštění Naším úkolem je: rozšířit tuto aplikaci tak, aby poskytovala více slov k hádání, poskytovat slova k hádání v náhodném pořadí. Cílem tohoto projektu je: naučit se používat seznamy v Javě (konkrétně třídu java.util.arraylist a některé její metody), naučit se generovat náhodná čísla v Javě. 16.2. Struktura tříd Projekt Hádání slov je tvořen těmito třídami: Obrázek 16.2 Struktura tříd projektu Hádání slov, převzato z BlueJ

Projekt Hádání slov strana 158 16.3. Popis komunikace mezi objekty V konstruktoru třídy HadaniSlov se vytvoří instance třídy PoskytovatelSlov a předá se jako parametr konstruktoru při vytváření instance třídy GrafikaHadani. V konstruktoru třídy PoskytovatelSlov je vytvořena instance třídy HledaneSlovo. Při zobrazení grafiky na obrazovce instance třídy GrafikaHadani zavolá metodu getslovo() instance PoskytovatelSlov a získá odkaz na instanci třídy HledaneSlovo. Dokud hráč neuhádne slovo, posílá GrafikaHadani zprávy instanci třídy HledaneSlovo. Po uhodnutí slova GrafikaHadani požádá o další slovo instanci PoskytovalSlov. Pokud již nemá další slovo k hádání, vrátí hodnotu null a na obrazovce se zobrazí zpráva, že již není další slovo k hádání. Instance třídy GrafikaHadani se při komunikaci s instancí třídy HledaneSlovo nejdříve zeptá na nápovědu (voláním metody getnapoveda()) a na políčka k zobrazení (voláním metody kzobrazeni()). Po stisknutí tlačítka uživatelem pošle grafika stisknuté písmeno instanci třídy HledaneSlovo (volání metody stisknutopismeno) a následně požádá o políčka k zobrazení (opět volání metody kzobrazení()). Dále se zeptá, zda je již celé slovo uhodnuto (metoda nalezenovse()) pokud ano, tak zobrazí příslušnou zprávu na obrazovce a přejde k dalšímu slovu. Postup komunikace mezi jednotlivými třídami je zachycen v diagramu na obrázku 16.3.

Projekt Hádání slov strana 159 Obrázek 16.3 Diagram komunikace mezi instancemi při hádání slov 16.4. Popis kódu třídy PoskytovatelSlov Třída PoskytovatelSlov obsahuje datový atribut slovo typu HledaneSlovo (řádek 13 v následujícím výpise). V konstruktoru je slovo inicializováno (řádek 19). Metoda getslovo() pro každé zavolání vrací odkaz na tuto instanci. Mimo tuto metodu jsou zde i dvě jednoduché metody poskytující jméno autora a číslo verze (řádky 34 53). Díky této implementaci je možné hádat pouze jedno slovo. Jakmile hráč uhodne, je mu znovu nabídnuto stejné slovo, navíc již s doplněnými písmeny z minulého hádání.

Projekt Hádání slov strana 160 1 /** 2 * Tato třída zpřístupňuje grafickému rozhraní slovo, 3 * které se má hádat. Slovo je 4 * instancí třídy HledaneSlovo a obsahuje vedle vlastního 5 * slova i nápovědu, která se zobrazí. 6 * Třída dále poskytuje informace o autorovi a o verzi. 7 * 8 * @author Luboš Pavlíček 9 * @version 1.0 10 */ 11 public class PoskytovatelSlov { 12 13 private HledaneSlovo slovo; 14 /** 15 * konstruktor pro vytvoření instance třídy pro 16 * poskytování slov 17 */ 18 public PoskytovatelSlov() { 19 slovo = new HledaneSlovo("velbloud","pouštní zvíře"); 20 } 21 22 /** 23 * Metoda vrací slovo k hádání jako instanci třídy 24 * HledaneSlovo (tj. ke slovu je připojena nápověda). 25 * Pokud není již další slovo k dispozici, vrátí 26 * hodnotu null 27 * 28 * @return slovo k hádání 29 */ 30 public HledaneSlovo getslovo() { 31 return slovo; 32 } 33 34 /** 35 * Metoda vrací jméno autora programu 36 * jméno se zobrazuje v grafickém rozhraní 37 * 38 * @return jméno autora, např. "L. Pavlicek" 39 */ 40 public String getautor() { 41 return "???"; 42 } 43 44 /** 45 * Metoda vrací verzi programu - ta se zobrazuje 46 * v grafickém rozhraní 47 * 48 * @return verze programu, např. "1.0" 49 */ 50 public String getverze() { 51 return "0.1"; 52 } 53 }

Projekt Hádání slov strana 161 16.5. Postup řešení 16.5.1. Přidání možnosti hádat více slov Naším prvním úkolem je úprava třídy PoskytovatelSlov, aby nabízela více slov k hádání. Jakmile hráč vyčerpá zásobu slov, vrátí metoda getslovo() hodnotu null. Nebudeme potřebovat datový atribut slovo, ale jiný, který umožní uchovat větší počet slov k hádání. Pro jejich uložení použijeme instanci třídy ArrayList, kterou nazveme seznamslov. Třída ArrayList je z balíčku java.util a je tedy nutné psát plné jméno java.util.arraylist nebo na úvodní řádky kódu doplnit import následujícím způsobem: import java.util.arraylist; D o tohoto seznamu budeme ukládat instance třídy HledaneSlovo. Při deklaraci seznamu uvedeme toto: private ArrayList <HledaneSlovo> seznamslov; Nyní musíme v konstruktoru tento datový atribut inicializovat (řádek 22) a naplnit zásobou slov k hádání (řádky 23 28). Třída HledaneSlovo má několik nedostatků, na které je nyní nutno poukázat: neumí samohlásky s interpunkcí a nezná velká písmena. Slova k hádání tedy mohou obsahovat pouze ty znaky, které jsou uvedeny na klávesnici grafického uživatelského rozhraní aplikace, např. Praha s malým p na začátku (řádek 27). 1 import java.util.arraylist; 2 3 /** 4 * Tato třída zpřístupňuje grafickému rozhraní slova, 5 * která se mají hádat. Slovo je instancí třídy HledaneSlovo, 6 * slova jsou uložena v seznamu (ArrayList). 7 * Třída dále poskytuje informace o autorovy a o verzi. 8 * 9 * @author Luboš Pavlíček 10 * @version 1.1 11 */ 12 public class PoskytovatelSlov { 13 14 private ArrayList <HledaneSlovo> seznamslov; 15 private int index; 16 17 /** 18 * konstruktor pro vytvoření instance třídy pro 19 * poskytování slov 20 */ 21 public PoskytovatelSlov() { 22 seznamslov = new ArrayList<HledaneSlovo>(); 23 seznamslov.add(new HledaneSlovo("velbloud", 24 "pouštní zvíře")); 25 seznamslov.add(new HledaneSlovo ("veverka", 26 "zrzavé zvíře")); 27 seznamslov.add(new HledaneSlovo ("praha", 28 "naše hlavní město")); 29 index = 0; 30 } 31

Projekt Hádání slov strana 162 32 /** 33 * Metoda vrací slovo k hádání jako instanci třídy HledaneSlovo 34 * (tj. ke slovu je připojena nápověda). 35 * Pokud není již další slovo k dispozici, vrátí hodnotu null 36 * 37 * @return slovo k hádání 38 */ 39 public HledaneSlovo getslovo() { 40 HledaneSlovo slovo = null; 41 if (index < seznamslov.size() ) { 42 slovo = seznamslov.get(index); 43 index++; 44 } 45 return slovo; 46 } Metoda getslovo() při každém zavolání postupně vrací jednotlivá slova, pokud už není žádné slovo k dispozici, vrátí hodnotu null. Je nutné přidat další datový atribut, abychom si zapamatovali, které slovo je na řadě (musí to být datový atribut, aby se v něm uchovávala pozice mezi jednotlivými voláními metody getslovo()). Využijeme toho, že ArrayList používá indexy budeme si uchovávat, které slovo je další na řadě k hádání. Datový atribut pojmenujeme index, bude typu int ( řáde k 15) a v konstruktoru mu přiřadíme hodnotu 0 (řádek 29). Hodnota nula odkazuje na první prvek v seznamslov, protože Java používá indexy v rozsahu 0 až n-1, kde n je počet prvků. V metodě getslovo() si na začátku deklarujeme pomocnou proměnnou slovo typu H ledaneslovo a inicializujeme ji hodnotou null (řádek 40). Potom zkontrolujeme, zda hodnota atributu index je menší než počet prvků v seznamu slov, který zjistíme metodou size() řádek 41. Pokud je index menší, do pomocné proměnné uložíme metodou get(index) odkaz na instanci třídy HledaneSlovo, která je na pozici udané indexem (řádek 42). Následně zvýšíme h odnotu indexu o jedna, abychom při příštím volání metody getslovo() poskytli následující slovo ( řádek 43). Poku d je index větší nebo roven počtu prvků seznamu, znamená to, že již nemáme další slovo k hádání v proměnné slovo tedy ponecháme hodnotu null, kterou jsme přiřadili při inicializaci. Větev else příkazu if proto nepotřebujeme. Na konci metody příkazem return předáme obsah pomocné proměnné slovo (řádek 45 výpisu). 16.5.2. Poskytování slov k hádání v náhodném pořadí Nyní budeme řešit druhou část zadání, tj. poskytování slov v náhodném pořadí. Budeme postupovat následovně: Potřebujeme náhodné číslo z intervalu 0 až n-1 (n je počet slov k hádání v kopii seznamu), neboť indexy jsou od 0 do n-1. Pro generování náhodných čísel poskytuje Java třídu Random z balíčku java.util. Stejně jako u třídy ArrayList můžeme psát buď celý název (java.util.random) nebo na začátku zdrojového textu importovat tuto třídu (import java.util.random;) a poté psát jenom název Random. V konstruktoru vytvoříme instanci třídy Random (řádek 16 deklarace a řádek 30 inicializace). Třída Random má více metod pro generování náhodných čísel, my použijeme metodu nextint(int n), která vrací celé kladné číslo z intervalu <0, n), tj. od nuly (včetně) po hodnotu parametru (není v intervalu zahrnuta) 36. Jako parametr použijeme aktuální velikost seznamu slov (řádek 43). 36 Čtenáře může napadnout, co vrací metoda nextint(int n), pokud bude parametrem záporná hodnota. Máte tří možnosti, jak to zjistit podívat se do dokumentace třídy Random, napsat si vlastní zkušební program a podívat se do zdrojového textu třídy Random.

Projekt Hádání slov strana 163 Slovo k hádání, které je uloženo v seznamu na místě s indexem odpovídajícím náhodnému číslu, uložíme do pomocné proměnné slovo (deklarace a inicializace na řádku 41). V seznamu toto slovo zrušíme, metoda vrátí vybrané slovo z pomocné proměnné. Pokud již v seznamu slov k hádání není žádné slovo, vrátí metoda hodnotu null, která se ukládá do pomocné proměnné slovo na začátku metody (zda je či není slovo k hádání k dispozici, se zjišťuje na řádku 42). V uvedeném řešení se slovo určené k hádání maže ze seznamu slov, tj. po předání již není k dispozici v instanci třídy PoskytovatelSlov. Pokud bychom chtěli slova dále uchovávat, vytvořili bychom na začátku kopii seznamu a slova bychom vydávali z kopie. 1 import java.util.random; 2 import java.util.list; 3 import java.util.arraylist; 4 5 /** 6 * Tato třída zpřístupňuje v náhodném pořadí grafickému rozhraní 7 * slova, která se mají hádat. Slovo je instancí třídy 8 * HledaneSlovo, slova jsou uložena v seznamu (ArrayList). 9 * Třída dále poskytuje informace o autorovi a o verzi. 10 * 11 * @author Luboš Pavlíček 12 * @version 1.1 13 */ 14 public class PoskytovatelSlov { 15 16 private List <HledaneSlovo> seznamslov; 17 private Random nahoda; 18 19 /** 20 * konstruktor pro vytvoření instance třídy pro 21 * poskytování slov 22 */ 23 public PoskytovatelSlov() { 24 seznamslov = new ArrayList<HledaneSlovo>(); 25 seznamslov.add(new HledaneSlovo 26 ("velbloud", "pouštní zvíře")); 27 seznamslov.add(new HledaneSlovo 28 ("panenka", "hračka pro holčičky")); 29 seznamslov.add(new HledaneSlovo 30 ("praha", "naše hlavní město")); 31 nahoda = new Random(); 32 } 33 34 /** 35 * Metoda vrací slovo k hádání jako instanci třídy HledaneSlovo 36 * (tj. ke slovu je připojena nápověda). 37 * Pokud není již další slovo k dispozici, vrátí hodnotu null 38 * 39 * @return slovo k hádání 40 */

Projekt Hádání slov strana 164 41 public HledaneSlovo getslovo() { 42 HledaneSlovo slovo = null; 43 if (seznamslov.size() > 0 ){ 44 int index = nahoda.nextint(seznamslov.size()); 45 slovo = seznamslov.get(index); 46 seznamuslov.remove(index); 47 } 48 return slovo; 49 } 16.6. Domácí úkol 1. Upravte aplikaci tak, aby umožňovala používat malá a velká písmena (tj. aby slovo Praha bylo s velkým písmenem P) a aby se nerozlišovaly samohlásky s čárkami, háčky (např. pokud by se mělo hádat slovo nápad, tak by se po volbě tlačítka a odkryly znaky a a á ). Neměli by jste upravovat grafické rozhraní aplikace.