98
Kapitola 5: Návrh správce scénářů konkrétní hry 48 Zmíněno prostorů: 6 - vyhovuje [koupelna, kuchyň, lednička, ložnice, obývák, předsíň] 49 Z toho navštíveno: 5 - vyhovuje [koupelna, kuchyň, lednička, obývák, předsíň] 50 Zadané akce: 9 - [jdi, konec, nasaď, otevři, podlož, polož, přečti, vezmi, zavři] 51 Neprovedených typů kroků: 13 - [tsHELP, tsEMPTY, tsUNKNOWN, tsMOVE_WA, tsPICK_UP_WA, tsPUT_DOWN_WA, tsBAD_NEIGHBOR, tsBAD_ITEM, tsNOT_IN_BAG, tsNON_STANDARD0, tsNON_STANDARD3, tsDEMO, tsNOT_SET] 52 Z toho povinných: 0 - [] 53 Nenavštívené prostory: [ložnice] 54 Zmíněné h-objekty: [botník, brýle, deštník, houska, lednička, papír, pivo, rum, salám, televize, umyvadlo, víno, časopis] 55 ===== Test ukončen 56 Autor: PECINOVSKÝ Rudolf 57 Třída správce: class eu.pedu.adventure15p.RUPScenarioManagerLit 58 Scénář: _HAPPY_ 59 ===== Scénář vyhověl 60 ############################################################################# 61 62 63 ############################################################################# 64 Autor: PECINOVSKÝ Rudolf 65 Třída správce: class eu.pedu.adventure15p.RUPScenarioManagerLit 66 Scénář: _MISTAKE_ 67 ===== Start testu ===== 2015-07-08 — 19:34 68 -1. tsNOT_START - Start 69 0. tsSTART 70 1. tsUNKNOWN - maso 71 2. tsEMPTY 72 3. tsPICK_UP - vezmi deštník 73 4. tsMOVE - jdi koupelna 74 5. tsBAD_NEIGHBOR - jdi záchod 75 6. tsBAD_ITEM - vezmi koupelna 76 7. tsUNMOVABLE - vezmi umyvadlo 77 8. tsNOT_IN_BAG - polož papír 78 9. tsPICK_UP - vezmi brýle 79 10. tsBAG_FULL - vezmi Časopis 80 11. tsHELP - ? 81 12. tsEND - konec 82 Nepokryté typy akcí: [tsMOVE_WA, tsPICK_UP_WA, tsPUT_DOWN_WA] 83 ===== Konec testu ===== 84 Kroků testu: 13 85 Vlastních akcí: 5 - [NASAĎ, OTEVŘI, PODLOŽ, PŘEČTI, ZAVŘI] 86 Zmíněno prostorů: 4 - [koupelna, ložnice, obývák, předsíň] 87 Z toho navštíveno: 2 - [koupelna, předsíň] 88 Zadané akce: 5 - [?, jdi, konec, polož, vezmi] 89 Neprovedených typů akcí: 11 - [tsPUT_DOWN, tsMOVE_WA, tsPICK_UP_WA, tsPUT_DOWN_WA, tsNON_STANDARD0, tsNON_STANDARD1, tsNON_STANDARD2, tsNON_STANDARD3, tsDIALOG, tsDEMO, tsNOT_SET] 90 Z toho povinných: 3 - [tsPUT_DOWN_WA, tsPICK_UP_WA, tsMOVE_WA] 91 Nenavštívené prostory: [ložnice, obývák]
Strana 98 z 351 Ukázka elektronické knihy, UID: KOS211340
99
Kapitola 5: Návrh správce scénářů konkrétní hry 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
Zmíněné h-objekty: [botník, brýle, deštník, umyvadlo, časopis] ===== Test ukončen Autor: PECINOVSKÝ Rudolf Třída správce: class eu.pedu.adventure15p.RUPScenarioManagerLit Scénář: _MISTAKE_ ===== Scénář NEVYHOVĚL ############################################################################# ########## STOP: St 2015-07-08 — 19:34:40 — Trvání testu 252 ms – Test scénáře byl NEÚSPĚŠNÝ Konec testu scénářů autora: RUP999 – PECINOVSKÝ Rudolf
############################################################################# Správce scénářů NEPROŠEL testy - nejméně jeden scénář NEVYHOVĚL! #############################################################################
Jak se můžete ve výpisu přesvědčit, úspěšný scénář testu vyhověl, ale neúspěšný ne. Příčina tohoto nevyhovění je oznámena na řádku 90, kde se můžete dozvědět, že scénář neobsahuje kroky tří povinných typů – konkrétně testy toho, jak bude hra reagovat, když hráč zapomene zadat, kam se má přesunout, resp. co se má zvednout, resp. co se má položit.
5.4
Trochu chytřejší správce
Výše uvedená definice má jednu nevýhodu: kdykoliv se budeme chtít ve hře odkázat na některý z textů ze scénáře, budeme muset tento text zkopírovat. Pokud jej budeme chtít později změnit (najdeme v něm překlep nebo se rozhodneme pro lepší formulaci), budeme muset najít všechny jeho výskyty a tuto opravu do nich zanést. Testovací program navíc nebude spokojen s naším řešením ani tehdy, když někde v textu posílaných zpráv a názvů pojmenovaných objektů (akcí, prostorů a h-objektů) uděláme nějaký, byť malý překlep. Někde přehlédneme nenápadnou mezeru a budeme se divit, co že je na našem programu špatně. Programátorsky výhodnější řešení je proto definovat (nejlépe v odděleném zdrojovém souboru) sadu textových konstant a nahradit ve správci scénářů textové literály těmito konstantami. Scénář tím sice trochu ztratí na své přehlednosti, ale na druhou stranu budeme moci v budoucnu měnit texty vždy jenom na jediném místě – v definici příslušné konstanty. Uvedené řešení má další výhodu: rozhodnete-li se v budoucnu program lokalizovat do jiného jazyka, bude stačit změnit pouze třídu definující jednotlivé konstanty a zbytek programu může zůstat jaký je. Strana 99 z 351 Ukázka elektronické knihy, UID: KOS211340
Kapitola 5: Návrh správce scénářů konkrétní hry
5.5
100
Definice třídy Texts
Definici třídy Texts definující jednotlivé textové konstanty pro naši hru si můžete prohlédnout ve výpisu 5.5. Výpis 5.5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Definice třídy Texts definující jednotlivé textové konstanty
/******************************************************************************* * Knihovní třída {@code Texts} slouží jako schránka na textové konstanty, * které se používají na různých místech programu. * Centralizací definic těchto textových řetězců lze nejsnadněji dosáhnout toho, * že texty, které mají být shodné na různých místech programu, * budou doopravdy shodné. */ class Texts { //== CONSTANT CLASS ATTRIBUTES ================================================= /** Jméno autora programu. */ static final String AUTHOR_NAME = "PECINOVSKÝ Rudolf"; /** Xname autora programu. */ static final String AUTHOR_ID = "PECR999"; /** Názvy používaných prostorů - místností. */ static final String PŘEDSÍŇ = "Předsíň", LOŽNICE = "Ložnice", OBÝVÁK = "Obývák", KOUPELNA= "Koupelna", KUCHYŇ = "Kuchyň"; /** Názvy používaných h-objektů. */ static final String BOTNÍK = "Botník", DEŠTNÍK = "Deštník", BRÝLE = "Brýle", UMYVADLO= "Umyvadlo", TELEVIZE= "Televize", ČASOPIS = "Časopis", LEDNIČKA= "Lednička", PAPÍR = "Papír", PIVO = "Pivo", RUM = "Rum", SALÁM = "Salám", HOUSKA = "Houska", VÍNO = "Víno", POSTEL = "Postel", ZRCADLO = "Zrcadlo", ŽUPAN = "Župan"; Strana 100 z 351 Ukázka elektronické knihy, UID: KOS211340