Boulder Dash
2011 Vendula Michlíková
Obsah O hře ................................................................................................3 Program............................................................................................4 Vstupní data.......................................................................................5 Třída Hra......................................................................................7 Třída Level....................................................................................7 Třída Fronta..................................................................................9 Objekty bludiště............................................................................10 Pinčulík....................................................................................12 Prostor....................................................................................13 Bahno................................................................................13 Nic.....................................................................................13 Zdi..........................................................................................14 Nevýbušná.........................................................................14 Kouzelná............................................................................14 Slizká.................................................................................14 Améba...............................................................................15 Expandující.........................................................................17 Cíl......................................................................................18 Kameny.....................................................................................18 Šutr...................................................................................19 Diamant.............................................................................19 Nepřátelé....................................................................................20 Motýl..................................................................................21 Zdroj.................................................................................................22
Vendula Michlíková
Stránka 2 / 22
O hře Hra je přepracováním velice povedené hry Boulder Dash, kterou můžete znát i pod jmény Supaplex, Rocks and Diamonds, The Digger apod. V této verzi ovládáte malou fialovou lentilku s červeným nosem, která se ztratila v podzemí a skrz jednotlivé levely se prokousává zpět na pevninu. V průběhu své cesty podzemním bludištěm se, zatímco sbírá chutné kousky zeleniny, setkává s různými nebezpečnými tvory a předměty, kterým musí uniknout za pomoci buďto vlastního důvtipu, nebo rychlých nohou. Ke hře rozhodně patří: •
Tato dokumentace
•
Uživatelská dokumentace v souboru DoukumentaceUziv.pdf
•
instalační soubor BoulderDash.exe
•
Zdrojové texty (pro otrlé)
Vendula Michlíková
Stránka 3 / 22
Program Program je napsán v jazyce C# 3.0 pro .NET 3.5. Hra je postavena z několika Formů, hlavní okno Form1 obsahuje hlavní menu a hrací plán, ostatní okna obstarají drobné další operace. Samotná hra je realizovaná na Panelu HraciPlan, do kterého se vykreslují PictureBoxy o velikosti 40*40 px, obrázky jsou uloženy v rámci Resources. Hra je uložena ve dvojrozměrném poli objektů bludiště Mapa[,] s rozměry podle velikosti plánu. Každý objekt bludiště vlastní svůj PictureBox o který se stará co do obsahu a polohy. Hrací plán se celý překreslí pouze při načítání levelu metodou Kresli() ve třídě Hra. Po té už pole Mapa i vykreslování obrazovky obstarávají samy objekty při vlastních akcích. Hlavní menu hry je na vlastním Panelu PanelMenu sestaveno ze 4 tlačítek: •
Nová hra - spouští novou hru od 1. levelu.
•
Vybrat level - spouští novou hru od vybraného levelu. Výběr je proveden ve zvláštním okně FormSelectLevel pomocí listboxu se seznamem vstupních souborů.
•
O hře - spustí zvláštní okno FormAbout s informacemi o hře.
•
Konec - zavře hlavní okno hry.
Další nové okno zajišťuje pauzu ve hře, otevře se, pokud uživatel v průběhu hry stiskne klávesu „P“ a nabízí volby k návratu do hlavního menu, restartování levelu a návratu do hry. Hra je realizována na odděleném panelu PanelHraciPlan (Dock na výplň okna), který obsahuje panel HraciPlan. Do panelu HraciPlan se vykresluje hra a manipuluje se s jeho pozicí tak, aby byl panďuláček vždy o pět políček od okraje okna, pokud nestojí na krajních pozicích. Kontrola zobrazení se volá při každé změně polohy panáčka a metoda k tomu určená je umístěna ve třídě Level. Okno také obsahuje StatusStrip, který se zobrazuje při probíhající hře a ukazuje informace o počtu kroků a sebraných diamantech.
Vendula Michlíková
Stránka 4 / 22
Vstupní data Herní mapa se načítá z textového souboru, který doporučuji prefixovat číslem levelu. Vstupní soubory jsou umístěny ve složce Levely u spouštěného exe souboru a uživatel si je může libovolně upravovat nebo přidávat vlastní. Na začátku hry se cesty ke zdrojovým souborům načtou do Listu SouboryLev<soubor> pomocí Directory.GetFiles. Objekty typu soubor obsahují plnou cestu k souboru, a metodou ToString() vrací pouze jeho název. Soubor je ve formátu: width x (šířka max 100) height y (výška max 100) diamonds z (minimální počet diamantů k odemknutí cílů) mapa Všechny řádky hlavičky začínají malým počátečním písmenem. Číslo (x, y, z) označuje počet políček plánu na daném rozměru, v případě diamantů jde o počet paprik (diamantů), které je třeba sesbírat, aby se otevřely neaktivované cíle ve hře. K anglickým názvům jsem se rozhodla, protože neměly diakritiku a lépe splynuly s prostředím. Není nutné je přirozeně používat, důležité je, aby řádek začínal správným písmenkem, w, h nebo d, a první číslo na řádku byl požadovaný rozměr. Omezení výšky a šířky je spíše praktická záležitost, protože nepředpokládám, že vzhledem ke způsobu zadávání mapy by se někomu chtělo zapisovat nebo kontrolovat správnost zadání. Jistá omezení plynou ze zakódovatelnosti pozic améb, ale ty jsou od zvolené 100 příliš daleko. Mapa musí být zadána včetně nevýbušných stěn kolem okrajů. Každý objekt se v mapě definuje pomocí dvou znaků, prvním je charakteristický znak objektu, druhým doplňující informace. Pokud ji objekt nepotřebuje, nahrazuje se mezerou. Při špatně zadaném vstupním souboru (nezadané rozměry, chybějící panáček, neúplné okraje) program vyhodí hlášku o vadném souboru a automaticky přeskočí na následující level.
Vendula Michlíková
Stránka 5 / 22
Ukázková mapa: width 10 height 10 diamonds 3 X X X X X X X X X X X . . . J>r . . r X X x x x x x . o o X X f^. . . X . o d X X . . x cAX . o o X X x x x x x F^r o X X . . . . . . d d X X . . . . . . . . X X cD. . . . . . . X X X X X X X X X X X Seznam objektů a charakteristických znaků:
Typ
zeď
kámen nepřítel prostor pinčulík
Podtyp
Znak
nedestruktivní
X
destruktivní
x
kouzelná
m
expandující
M
Upřesnění
VH
améba
a
sliz
s
cíl
c
šutr
r
diamant
d
vážka
f
^> v<
motýl
F
^> v<
bahno
o
nic
. J
AD
^> v<
pozn. V H = expanduje vertikálně nebo horizontálně A D = cíl je na začátku aktivovaný nebo deaktivovaný ^ > v < = směr otočení objektu v bludišti
Vendula Michlíková
Stránka 6 / 22
Třída Hra Třída Hra je hlavní třída programu. Obstarává reakce na události ve hlavním okně - tiknutí timeru, schovávání a ukazování panelů, nahrávání nových levelů, reakce na zmáčnutá tlačítka v okně nebo klávesy z klávesnice (volání metod pro pohyb panáčka). Hlavní metody ve třídě: NovaHra(), int cisloLevelu - metoda skryje potřebné panely, nahraje nový level podle aktuálního čísla levelu, vykreslí obrázky, zapne timer a zobrazí správné panely. Aktualizuj() - metoda pro provádění změn na spodním statusBaru. Kresli() - při načtení hry projde celé pole Mapy a zavolá pro objekty vykreslovací metodu. Kontrolují se taky stisknutí kláves (událost Keydown) v průběhu hry. Kurzorové klávesy ovlivňují pohyb panáčka, „P“ vyvolá pauzu, nové okno s možností volby restartování hry nebo návratu do hlavního menu.
Třída Level Třída Level obsahuje veškeré nezbytné informace pro aktuální level, zajišťuje jeho nahrání, správné zobrazení (scrollování hracího plánu), aktivaci cílů a komponenty améb. Třída obsahuje tyto proměnné a metody: int cislo levelu - číslo levelu List
cile - seznam všech cílů ve hře pinculik pinclik - odkaz na panáčka int sirka int vyska int mindiamanty - minimální počet diamantů k odemknutí cílů int diamanty - aktuální počer nasbíraných diamantů int pocetKroku - počet kroků, které hráč provedl Mapa objektů bludiště Mapa[šířka, výška] - hrací plán. Dictionary seznamReprz - seznam reprezentantů komponent améb, podrobněji v popisu améby.
Vendula Michlíková
Stránka 7 / 22
•
UpravZobr()
Zajišťuje scrollování obrazovky při pohybu panáčka. Metoda vrací true/false, jestli došlo nebo nedošlo ke změně pozice panelu se hrou. •
NastavZobr()
Při nahrávání levelu - zajišťuje, aby byl spolu s panáčkem zobrazen dostatečný kus hracího plánu (provádí UpravZobr() dokud neproběhne beze změny). •
PridejDiamant()
Pro diamanty - kontroluje splnění minimálního počtu sebraných diamantů a aktivuje cíle. •
UkoncLevel()
Volá se, pokud panáček dojde do cíle. Spustí nahrání následujícího levelu ze třídy Hra. •
RestartLevel()
Znovu nahraje stejný level. Spouští se pokud panáček zemře nebo si ji uživatel vyžádá. •
NahrajLevel()
Metoda nahraj level vrací odkaz na Panáčka. Čte vstupní soubor, o dosazení se rozhoduje podle prvního písmena na řádku, je tedy nezbytné, aby byl soubor ve správném formátu. (formát viz Vstupní data) . Po nahrání levelu se kontroluje, zda je zadána platná výška a šířka (1 - 100) a v mapě je panáček. V mapě se kontroluje, že je úplně zaplněna objekty a její okraje tvoří nevýbušné zdi. Pokud některá z podmínek není splněna, level se přeskočí a začne se nahrávat následující. •
PripravMapu()
Je volána z metody NahrajLevel, pokud řádek začíná X - nevýbušnou stěnou. Bere jeden řádek z mapy a doplní jej na správné místo do pole.
Vendula Michlíková
Stránka 8 / 22
Třída Fronta Události ve hře se zpracovávají pomocí „fronty“. Je realizovaná pomocí dvou seznamů, Dictionary, prvním seznamem je právě prováděná fronta (UrobTed) a druhým fronta, která se bude vyhodnocovat následující tah (UrobPak). Dictionary nezachovává pořadí, nejde tedy o opravdovou frontu, ale při vyhodnocování na pořadí příliš nezáleží. Třída obsahuje metodu Přidej(objekt bludiště, událost), kterou využívají jednotlivé objekty k vlastnímu naplánování. Ověřuje se, zda objekt již nemá naplánovanou událost a tehdy se přidá do seznamu UrobPak. Ověření má s použitou strukturou složitost O(1), přidání do seznamu O(1), dokud není kapacita seznamu naplněna, při naplnění je přidání do seznamu jednorázově O(n), kde n je počet záznamů v seznamu. Pokud již objekt má nějakou událost naplánovanou a má být přeplánována, přeplánuje se pouze výbuchem. Využívá se zde rovněž metoda ProvedSadu(), která vyhodnotí aktuální seznam a vyčistí a vymění seznamy. Procházení seznamu a výměna má dohromady složitost O(n), n počet záznamů v seznamu UrobTed. Události se vyhodnocují jedině za předpokladu, že objekt je stále na svém místě v mapě a až na událost výbuch je stále označen jako živý. Fronta se vyhodnocuje při každém tiknutí timeru který je momentálně nastaven na 300 ms. Události ke kterým může ve hře z hlediska Fronty dojít jsou Tři: •
Start
Naplánuje se objektu při načtení nového Levelu. Ve většině případů je startovní metoda shodná s Akční metodou. •
Akce
Plánuje se v průběhu celého zbytku hry. Akce je činnost typická pro konkrétní herní objekt, má ji každý objekt bludiště. •
Vybouchni
Metoda pro odstranění objektů. Provádí se i pro objekty označené jako mrtvé.
Vendula Michlíková
Stránka 9 / 22
Objekty bludiště Třída ObjektBludiště zastřešuje veškeré objekty ve hře. Struktura objektů:
Třída objektBludiště obsahuje virtuální metody Start(), Vykresli(), Vybouchni(), Akce() a AktivujOkoli() k předefinování ostatními objekty. •
Vykresli()
Upravuje pozici a obrázek pictureBoxu, který se vykreslí na obrazovce. •
AktivujOkoli()
Aktivuje okolí všem objektům, kterých se může týkat vzniklý volný prostor na pozici objektu. Jde o kameny (šutr, diamant), expandující stěny a kameny nad speciálními zdmi.
Vendula Michlíková
Stránka 10 / 22
Na obrázku vznikne volný prostor místo panďuláka, aktivované objekty jsou označené žlutým puntíkem, ale metodu používají všechny objekty, které svým pohybem uvolní místo na hracím plánu a mohou aktivovat některé z těchto objektů. Každý objekt ve hře si s sebou nese proměnné: int sourX int sourY bool vybuch bool ziju PictureBox obrazek ObjektBludiště navíc obsahuje Továrnu na ostatní objekty ve třech vyhotoveních. •
Továrna(int sourX, int sourY, char typ)
Je používána na tvorbu objektů které nepotřebují žádné doplňující informace. •
Továrna(int sourX, int sourY, char typ, int inf)
Používá se na vytváření objektů, jejichž doplňující informace je typu int. •
Továrna(int sourX, int sourY, char typ, char inf)
Vytváří všechny objekty ve hře. Další
důležité
metody
jsou
Nahrad(char cim)
a
VymenObjekty(prvni, druhy),
Nahrad(char cim) nahrazuje objekt bludiště, na který byla zavolána, jiným objektem podle jeho charakteristického znaku včetně zneplatnění původního obrázku a vykreslení nového. VymenObjekty(prvni, druhy) vezme 2 objekty bludiště, které mezi sebou vymění včetně všech aktualizací (v poli, vlastní informace o pozici, překreslení obrázků). Používá se v situacích kdy by zahazování objektů v bludišti zavánělo ošklivým plýtváním, především při pohybu objektů po prázdném prostoru.
Vendula Michlíková
Stránka 11 / 22
Pinčulík Je hlavním hrdinou hry, pamatuje si o sobě navíc char stav, který ukazuje jak je aktuálně otočený. Akce se mu většinou neplánují do kalendáře, hráč je vyvolává stiskem určených kláves (pohyb: kurzorové klávesy). Je nutné, aby byl v mapě právě jeden exeplář tohoto typu. Pohybuje se pomocí metody Krok, která přijímá jako parametr směr jedno z čísel 0-3, které určují směr pohybu. ^
>
v
<
0
1
2
3
Pokud se orientace panáčka neshoduje se směrem pohybu, panáček se pouze otočí. Je-li otočen správným směrem, provede krok dopředu. Souřadnice kroku se vypočítává. ^
>
v
<
0
1
2
3
X posun
0
1
0
-1
Y posun
-1
0
1
0
Souřadnice
X souřadnice: sourX − smer −2 mod 2 Y souřadnice: sourX smer −1mod 2 Když panáček umře, vykreslí se výbuch a restartuje level.
Vendula Michlíková
Stránka 12 / 22
Prostor Prostor vyplňuje plán na místech, kde není žádný akční objekt.
Bahno Bahno brání v pádu kamenům, průchodu nepřátelům a expandování zdí. Může zmizet výbuchem nebo jej může odstranit panáček. Jednou odstraněné bahno se už nevrátí. Nevadí v rozšiřování amébám. Jinak nemá žádnou zvláštní vlastnost. Jak panáček konzumuje bahno
Nic Nic je základní stavební prvek hry - padají jím kameny, chodí jím příšery, roste s každým výbuchem a téměř každým krokem. Nemá žádnou speciální akci ani vlastnost.
Vendula Michlíková
Stránka 13 / 22
Zdi Zdi brání objektům v pohybu. Je jich celkem 7 typů: Nevýbušná, Normální, Kouzelná, Sliz, Améba, Expandující, Cíl. Protože normální stěna nemá oproti základní třídě zeď nic navíc, nemá jako jediná vlastní třídu.
Nevýbušná Z nevýbušné stěny je postaven okraj mapy. Je imunní vůči výbuchům, nemá vlastní akci.
Kouzelná Kouzelná stěna nechává kameny propadávat skrz. Přeměňuje při tom objekty typu kámen z diamantu na šutr a naopak, ale pouze za předpokladu, že je pod zdí na kámen místo. Přeměna:
Zeď je aktivovaná pouze kamenem ve chvíli, kdy na ni dopadne. Akce kouzelné stěny se nikdy neplánuje do kalendáře.
Sliz Sliz nechává, podobně jako kouzelná zeď, propadnout kameny skrz. Není předem určené, kdy, je propustí. Pokud je možné nechat kámen propadnout, sliz si hodí kostkou a s pravděpodobností cca 25% kámen v daném kole propadne. Propadnutí:
Sliz se opět stejně jako kouzelná stěna neobjevuje ve frontě, ale je aktivován pouze na něm sedícím kamenem, který by rád spadnul.
Vendula Michlíková
Stránka 14 / 22
Améba Améba je samorozšiřující se zeď. Každá komponenta (skupina sousedících améb) se rozšiřuje každé kolo o jedno políčko na sousední pozici s obsahem typu „prostor,“ pokud takové existuje. Sousední políčka améby
Protože se při rozšíření améby může stát, že splynou dvě různé komponenty améb, je nutné rychle zjišťovat, do které komponenty která améba patří. Améby si tedy navíc nesou další doplňující informace: •
int rank - číslo, které určuje hloubku podstromu komponenty pod konkrétní amébou.
•
ameba komFotr - otec améby ve stromě komponenty. Kořen stromu komponenty má v odkazu na otce sám sebe.
Ve třídě level se rovněž udržuje seznam reprezentantů komponent (seznamRepr) se seznamem sousedních políček komponenty. Seznam je Dictionary>. V seznamu jsou obsažena všechna sousední políčka, která by potenciálně mohla být uvolněna a améba by se zde mohla rozšířit. Dvě souřadnice jsou pro dobrou funkci struktury HashSet zakódovány jako 1 integer. Pro kódování a dekódování pozice améby slouží třída Kod s metodami Zakoduj(int X, int Y) - vraci int kod - a Dekoduj(int kod) - vrací pole int[2] se souřadnicemi. Třída vybere ze šířky a výšky delší číslo, stanoví vhodnou mocninu desíti (mocnina = délka největšího rozměru) jako koeficient a zakóduje souřadnici. Při zakódování se X souřadnice vynásobí koeficientem a sečte s Y. Pozice [20,2] na poli 50*50 má potom kód 2002. Rozšíření améby funguje následovně: •
Ze seznamu reprezentantů se získá seznam sousedů
Operace O(1).
Vendula Michlíková
Stránka 15 / 22
•
Do pole o velikosti seznamu sousedů se vloží souřadnice polí, na které lze v danou chvíli rozšířit amébu, náhodně se některé vybere.
Složitost O(m), kde m je počet všech sousedů améb. (nejhůř 2n + 2 pro n améb). •
Pro novou amébu je vytvořen seznam sousedů, který se spojí se stávajícím seznamem.
Pro všechna sloučení seznamů (nejvýše 4) složitost celkem O(m), m nejpočetnější seznam sousedů. •
Kontrola spojení komponent
Při přidání améby se zkontrolují komponenty sousedících améb. Pokud nová améba sousedí s amébou z jiné komponenty, porovnají se ranky kořenů a sloučí se seznamy sousedů. Připojuje se vždy komponenta s nižším rankem pod komponentu s vyšším rankem přepojením ukazatele na otce v kořeni mělčí komponenty. Pokud se spojují améby se shodným rankem, rank kořene se zvýší o jedna. Nová améba je, kromě načítání levelu, vždy ve hloubce jedna a odkazuje přímo na kořen komponenty. Nejhorší případ pro strom komponent nastane v případě, kdy se budou spojovat zásadně komponenty se stejným rankem. Složitost určení komponenty je potom O(log2n), kde n je počet améb v komponentě. V jedné z verzí hry (Boulder Dash - Treasure Pleasure) jsem narazila na zajímavé chování améby, která se ve chvíli, kdy nemůže dále expandovat, přemění na diamanty. Tuto vlastnost by nebylo těžké naimplementovat, v tuto chvíli by pouze stačilo zkontrolovat, zda existuje nějaké použitelné pole mezi sousedy (jak se přirozeně tak jako tak děje) a od reprezentanta komponenty spustit vlnu k přeměně améb na diamanty. Tato vlastnost nebyla implementována, neboť nebyl zaveden časový limit pro splnění levelu a taková vlastnost by lákala ke zneužívání.
Vendula Michlíková
Stránka 16 / 22
Expandující Expandující stěna je další rostoucí zeď. Vypadá stejně jako běžná zeď, ale na volný prostor (nic) expanduje. Má doplňující proměnnou int směr která určuje expanzi vertikálně (smer = 1) nebo horizontálně (smer = 0). Souřadnice expanze se vypočítávají pomocí směrových proměnných. ( i = {-1,1} )
X: sourX i∗smer −1 Y: sourX i∗smer
Vertikální expanze
Horizontální expanze
Vendula Michlíková
Stránka 17 / 22
Cíl Cíl ukončuje hru. Má dva stavy (int aktivovan), aktivovaný a neaktivovaný. Neaktivovaný cíl se chová jako zeď, aktivovaný ukončí při našlápnutí hraný level. Po kratší úvaze a pár zákeřných levelech různých verzí hry byl cíl určen jako běžně vybuchující stěna. Cíl může být aktivován od úplného začátku hry nebo může být určen počet sebraných diamantů k odemknutí všech deaktivovaných cílů. Třída Level si při nahrání levelu sestaví seznam (List) cíle, který ve chvíli sebrání posledního diamantu aktivuje cíle v seznamu. Sestavení seznamu se provádí zároveň s načítáním mapy.
Kámen Kameny se ve hře vyskytují dvou typů: šutr a diamant. Kameny mají jako akční metodu pád, navíc nabízí také možnost Interakce s panáčkem. Šutr je možné tlačit, Diamant se sbírá. Kameny jsou nebezpečné jak pro panáčka, tak pro berušky, nebo třeba améby, kterým mohou zabránit v růstu. Zavraždění panáčka pádem kamene nastane pouze za předpokladu, že kámen „už padá“ (bool pada). Pro nepřátele není nutné pád rozlišovat, protože nepřítel při chůzi neaktivuje žádné objekty typu kámen, neboť chodí pouze po ničem.
Problém při zabití panáčka:
Vendula Michlíková
Stránka 18 / 22
Kámen padá různými způsoby:
Spadne rovnou dolů
Skutálí se dolů
Propadne skrz
Kutálí se z většiny zdí a objektů typu kámen, pokud je na pád dostatek prostoru.
Kámen propadává skrz kouzelnou stěnu a sliz.
Po vlastním pádu si kámen sám naplánuje do kalendáře akci na následující kolo.
Šutr Interakci šutru s panáčkem vyvolává vlastním krokem panáček. Pokud panáček tlačí z boku a za kamenem je volný prostor, panáček může kámen potlačit. Úspěšnost interakce zhodnotí sám šutr a případně aktualizuje počítadlo počtu kroků.
Diamant Interakci s diamantem také vyvolává panáček. Akce je úspěšná, mimo situaci kdy se panáček pokouší sebrat padající diamant zespodu. Při akci se aktualizuje počítadlo kroků a především počet sebraných diamantů (k tomu slouží metoda ve třídě Level PridejDiamant(), která zavolá i metodu třídy Hra Aktualizuj(), která obnoví StatusBar).
Vendula Michlíková
Stránka 19 / 22
Nepřítel Ve hře se vyskytují dva typy nepřátel - ti hodnější a ti zlejší - vážka a motýl. Akční metoda zastupuje 1 krok nepřítele. Nepřítel chodí pouze dopředu a každé otočení o 90° je jeden krok. Pohybuje se pouze po ploše pokryté ničím. 2 nepřátelé se od sebe liší směrem chůze a způsobem výbuchu. Vážka (žlutá beruška) chodí kolem zdi po směru hodinových ručiček se stěnou po levé straně, motýl (červená beruška) chodí proti směru se stěnou po pravé straně. Pokud nepřítel nemá po správné straně stěnu, chodí dokola po čtverci 2*2, zablokovaný se točí dokola na místě.
Pro pohyb v mapě mají navíc nepřátelé další doplňující informace: •
char stav - orientace nepřítele v prostoru (znaky ^ > v <).
•
int druh - čísla -1 a 1, určují směr chůze pro a proti směru. Metoda Akce je definovaná pro třídu Nepřítel a zpracovává obě možnosti směru.
•
bool zabocila - pro zpracování zákeřnějších situací v otočení:
Nepřátelé při svém pohybu aktivují pouze okolní expandující stěny, vybuchují při kontaktu s panáčkem nebo kamenemn a to na čtverec 3*3, žlutá beruška spouští klasický výbuch, červená beruška vyprodukuje na volný prostor vzniklý výbuchem diamanty.
Vendula Michlíková
Stránka 20 / 22
Vážka nemá vlastní třídu, neboť od třídy Nepřítel nevyžaduje nic navíc a rozdělení není potřeba.
Motýl U běžného nepřítele - vážky, žluté berušky - proběhne pro všechna sousední políčka jednotlivě standardní výbuch s vykreslením výbušných obrázků, přičemž vlastní políčko nepřítele je nahrazeno za jiný objekt se srandardním výbuchem (nic). Pro motýla (červenou berušku) je situace komplikovanější, protože musí dojít k vygenerování diamantů až po vykreslení výbušných obrázků a musí se vhodně zamezit zacyklení. K tomu slouží objekt Zombie, který se umístí na pozici objektů k vybouchnutí kolem motýla včetně. Zombie se naplánuje akční metoda. Metoda má na práci pouze nahrazení objektu na diamant a jeho aktivaci pro možnost pádu. Vykreslení zombie je vyřešeno vykreslováním pouze ilustrace výbuchu, neboť v jiné situaci zombie nemá vůbec existovat.
Vendula Michlíková
Stránka 21 / 22
Zdroje a použité materiály Pro specifikaci zadání co do implementovaných objektů a akcí ve hře jsem si použila popis hry na wikipedii. Pro kontrolu jsem prohlédla ještě několik dalších stránek fanoušků. •
http://en.wikipedia.org/wiki/Boulder_Dash
•
http://www.boulderdash.nl/
Pro napsání hry bylo ale především nutné zkusit některou z již napsaných verzí hrát. Vyzkoušela jsem různé verze hry:
•
Boulder Dash online
http://www.onlinegames.com/boulderdash/
•
Boulder Dash - Treasure Pleasure
Pěkná, po několika dnech chtěla registrovat a zaplatit, ale měla příjemný tutoriál, hezkou grafiku a zajímavé dodatky k původnímu zadání - nepřátele chodící po předem daných trasách a amébu přeměňující se v diamanty. Lehko se hrála, pravděpodobně spíš pro nižší věkovou skupinu, je taková odpočinková.
•
Rocks'n Diamonds (1995 - 2005), Holger Schemer
Slušná grafika, nesmyslné ovládání a otřesná hudba, která se naštěstí dá vypnout a hra se pak hraje docela pěkně. Levely jsou o mnoho náročnější než u Treasure Pleasure, nezvládla jsem pořádně ani zlomek tutoriálu, ale moc jsem se o to ani nesnažila. Opět nabízí další zajímavé objekty jako neviditelné zdi a možná něco víc, tak daleko jsem ve hře nedošla.
Softwarové zázemí: •
Microsoft Visual C# 2008 Express Edition 91910-152-0000061-60367
•
Gimp 2.6.9
•
Malování verze 6.1
•
OpenOffice.org 3.2.1
•
Inno Setup Compiler 5.4.2
a další.
Vendula Michlíková
Stránka 22 / 22