Téma: Arkanoid. X36SOJ Strojově orientované jazyky Semestrální práce. Vypracoval: Marek Handl Datum: červen 2006



Podobné dokumenty
Hodnocení soutěžních úloh

Kapitola 1: Úvodní strana PARTICLER

UŽIVATELSKÁ PŘÍRUČKA KLÁVESNICE

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

Záznamník teploty ZT, ZT1ext Návod k použití

Elektronický slovník. Comet 52T. Návod k použití

Národní kolo soutěže Baltie 2011, kategorie A a B

Návod na použití prezentační techniky

POVLTAVSKÉ SETKÁNÍ BALTÍKŮ - 9.ročník a

Tabulkové processory MS Excel (OpenOffice Calc)

Regionální kolo soutěže Mladý programátor 2013, kategorie A, B

Základní ovládání aplikace

Když už má vykopané cesty, může postavit domyr opět přesně podle obrázku. Domy se objeví najednou. Program opět čeká.

SEZNÁMENÍ S PROGRAMEM

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress

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

Stav: červen TRACK-Guide

FTC08 instalační manuál k dotykovému panelu systému Foxys

Alfanumerické displeje

Spinelterminal. Terminálový program pro ladění aplikací s protokolem Spinel. 20. září 2005 w w w. p a p o u c h. c o m v

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

Interaktivní mapy ÚAP Uživatelská příručka

Hráč, který je na tahu musí vyložit předem daný počet karet z ruky. Počet karet je určen počtem symbolů

Uživatelská příručka IS KP14+: Pokyny pro vyplnění formuláře žádosti o podporu

Školní kolo soutěže Mladý programátor 2013, kategorie A, B. Úloha č. 1 - Baltík v zoo

Uživatelský návod fotorámeček Bluetech 10,2

universální monitorovací program

Mezinárodní programátorská soutěž Baltík 2005 úlohy školního kola

X-Sign Basic Uživatelská příručka

Výukový materiál zpracovaný v rámci projektu. Základní škola Sokolov, Běžecká 2055 pracoviště Boženy Němcové 1784

Po obrazovce přejede formule, před kterou se budou postupně objevovat písmena slova formule.

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

Hodnocení soutěžních úloh

Zapisovač nemá síťový vypínač a zapne se připojením síťové šnůry na zdroj napájení.

THE FORGOTTEN PLANET. Hra pro 2-4 hráče od 12 let

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu

Razzia!. Od Reinera Knizia

Gravitační pole manuál Jan Hrnčíř, Martin Klejch, Gravitační pole. Využití multimédií při výuce fyziky. Manuál k multimediální prezentaci

Měřící a senzorová technika Návrh měření odporových tenzometrů

TE-218 TG-218 TW-218. Electronic Publishers EURO INTERPRETER. Návod k použití

Kontrola pravopisných chyb. Kontrola pravopisu Kontrola gramatiky Nastavení jazyka dokumentu Tezaurus Překlad textu

Tepelná čerpadla HP. tepelná čerpadla. Návod k obsluze a instalaci pro verzi software xx

Parametrizace, harmonogram

Měřič tělesného tuku ENI

MLE2 a MLE8. Datalogery událostí

Uživatelská příručka Navigační software. Blaupunkt BikePilot. Česky

JSR tutorial 2 Transformace v JSR-184

POKLADNÍ DISPLEJ LCD. hotline: strana 1

Vizualizace a evidence výroby a prostojů

SimOS. Jakub Doležal Radek Hlaváček Michael Očenášek Marek Reimer

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

PROSTŘEDKY AUTOMATICKÉHO ŘÍZENÍ Úloha č. 3 Dálková správa s využitím WIFI technologie

Souhrn. Cíl hry. Autoři: Marco Rusowski a Marcel Süßelbeck

PRO MĚŘITELNÝ ÚSPĚCH. Návod k obsluze.

Uživatelská příručka - Naves

Eufrat a Tigris HRACÍ MATERIÁL PŘÍPRAVA NA HRU. Sestavení monumentů. Příprava hrací desky. Výběr dynastie

SIGNÁLNÍ GENERÁTORY DDS2, DDS7 A DDS20 - PROVOZNÍ MANUÁL

Nástroj WebMaker TXV první vydání Únor 2009 změny vyhrazeny

1. Uživatelská úprava příkazů I.

Program je určen pro děti se specifickými poruchami učení.

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

1. Zobrazení typu telefonního přístroje. 3. Protokol LLDP Link Layer Discover Protocol. 4. Inicializace síťového připojení

SPIRIT Nové funkce. SOFTconsult spol. s r. o., Praha

RC-300. U ivatelská pøíruèka. Instalaèní firma: Servisní telefon: Datum Počet stran Číslo dokumentu 11/ PU-RC-3-01-C

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Programovací stanice itnc 530

Comenius Logo. Úterý 20. března. Princip programování. Prostředí Comenius Logo

Manuál pro ovládání a nastavení regulátoru ERAM spol s.r.o

OPEL INSIGNIA. Infotainment System

Uživatelská příručka ClinkMe

Studentská tvůrčí a odborná činnost STOČ 2015

Verze. Hydroprojekt CZ, a.s. WINPLAN systém programů pro projektování vodohospodářských liniových staveb. Prefabrikované kanalizační šachty

INSTALAČNÍ MANUÁL pro aplikaci ihc-mirf

Přídavný modul čtečky ClearReader +

HERNÍ PLÁN IVT SYNOT

mpos mobilní aplikace Průvodce pro použití s Lenovo A2010

PROJEKT MINY - DOKUMENTACE

Kurz Word 2000 Odrážky a číslování Kurz Word 2000 Odrážky a číslování Oddíly Záhlaví a zápatí

Smart PSS dohledový systém

Návod pro používání Automaticky Čtených Učebních Pomůcek vytvořených v rámci projektu ARET

Source Defender. PPJ semestrální projekt. Martin Přeták, ARI

9. Práce s naskenovanými mapami

INSTALAČNÍ MANUÁL pro aplikaci ihc-mirf

Při bodování se mohou přidělovat body za každou dílčí úlohu (tj. a, b ), maximální bodové hodnocení je uvedeno na konci každé dílčí úlohy.

Kamerová lupa TOPAZ Uživatelská příručka. Freedom Scientific, Inc. GALOP, s.r.o.

NĚKTERÉ Z MOŽNOSTÍ VYUŽITÍ POČÍTAČE OVLÁDANÉHO HLASEM VE SPECIÁLNÍ PEDAGOGICE

Comenius Logo. Princip programování. Prostředí Comenius Logo

mitesemo Popis programu pro komunikační zařízení

NÁVOD K OBSLUZE

Uživatelský manuál. Návod k obsluze řídící jednotky TM3007. Mode: Running o. >Temperature 65.0 C O2 8.0% Setting

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

Postup při instalaci a nastavení programu

ZÁKLADY OVLÁDÁNÍ LETECKÉHO SIMULÁTORU V GOOGLE EARTH

Návod na použití portálu 802

Potrubní laser Mikrofyn MLP 120

Uloha1 šumavský prales

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA INFORMAČNÍCH TECHNOLOGIÍ. Uživatelská příručka k programu FloodFilling Art

EVIDENČNÍ FORMULÁŘ. FTVS-UK evidence VaV výsledků nepodléhající řízení o zápisu u ÚPV v Praze

Příručka pro aplikaci KSnapshot

Transkript:

Vypracoval: Marek Handl Datum: červen 2006 X36SOJ Strojově orientované jazyky Semestrální práce Téma: Arkanoid Úvod Program je verzí klasické hry Arkanoid. Na herní ploše jsou rozloženy kostičky, které má hráč za úkol odstranit pomocí nárazů kuličky. Kulička se odráží od stěn (vpravo, vlevo a nahoře) a od lodě, která se nachází naspodu herní plochy a hráč s ní může pohybovat. Pokud hráč dole neodrazí kuličku pomocí lodě, ztrácí život. Uživatelská příručka Program se spouští souborem arkanoid.com. Ve stejném adresáři by se měl nacházet také soubor arka.cfg, který obsahuje nastavení (viz dále). Program lze spustit i bez tohoto souboru, ale bude použito standardní nastavení. Po spuštění se objeví úvodní obrazovka, kde je popsáno, jak se program ovládá. Po stisknutí jakékoli číslice, která reprezentuje rychlost hry (0-nejlehčí až 9-nejtěžší), se program spustí. Vlevo dole pod hrací plochou je zobrazen počet životů hráče. Pohyb lodě se ovládá myší. K vystřelení kuličky se používá levé tlačítko myši. Hráč vyhrává, pokud se mu podaří odstranit všechny kostičky, toto je signalizováno zelenou vlajkou. Hráč prohrává, pokud již nemá žádný život, v takovém případě se zobrazí vlajka červená. Po zobrazení vlajky, lze začít novou hru stisknutím levého tlačítka nebo ukončit program pravým tlačítkem myši. Program je možné kdykoli ukončit stisknutím klávesy ESC. Konfigurační soubor Konfigurační soubor má název arka.cfg a musí se nacházet ve stejném adresáři jako arkanoid.com. Je to textový soubor a při dodržení jistých pravidel, je možné jeho obsah měnit a tím ovlivnit nastavení programu. Soubor musí obsahovat na prvním řádku 9 dekadických čísel, každé napsané pomocí 3 číslic. Čísla jsou oddělena mezerami a za posledním číslem musí být alespoň jeden znak (např. odřádkování). Čísla mají tento význam: Vlastnost Přípustné hodnoty Standardní hodnota počet životů 001 009 003 šířka lodě 002 045 010 počet řad kostiček 001 010 005 rychlost uživatelova počítače 150 600 320 barva rámečku herní plochy 000 255 213 barva kuličky 000 255 003 barva pozadí herní plochy 000 255 210 barva lodě 000 255 006 barva kostičky 000 255 165 Čísla reprezentující barvy musejí být navzájem různá. Konfigurační soubor může vypadat například takto:

003 010 005 320 213 003 210 006 165 Programátorská dokumentace Zdrojový kód celého programu je v souboru arkanoid.asm. Je napsán v assembleru pro TASM. Datové proměnné: P pevně nastavená hodnota ve zdrojovém souboru S hodnota se načítá z konfiguračního souboru V hodnota se mění v průběhu programu Název proměnné Druh proměnné Význam proměnné barva_kosticka S Barva kostiček, které má hráč odstranit. Musí se lišit od ostatních zvolených barev. barva_kulicka S Barva kuličky, kterou hráč odstraňuje kostičky. Musí se lišit od ostatních zvolených barev. barva_lod S Barva lodě, kterou hráč ovládá. Musí se lišit od ostatních zvolených barev. barva_pozadi S Barva pozadí herního pole. Musí se lišit od ostatních zvolených barev. barva_ramecek S Barva rámečku kolem herní plochy. Musí se lišit od ostatních zvolených barev. handle V Handle konfiguračního souboru (metoda cteni). chyba_cteni P String chybová hláška chyba při čtení z konfiguračního souboru. chyba_soubor P String chybová hláška nebyl nalezen konfigurační soubor. konfiguracni_soubor P Obsahuje název souboru, který obsahuje nastavení. lod V Aktuální pozice lodě během hry. Určuje pozici levého horního pixelu lodě. Pozice je udána jako offset ve videopaměti (levý horní roh má pozici 0, pravý dolní roh má pozici 63999). pocer_rad_kosticek S Počet řad kostiček, které má hráč odstranit, při zahájení hry. pocet_kosticek V Aktuální počet kostiček, které hráč musí ještě odstranit. pocet_kosticek_v_rade P Udává počet kostiček v jednom řádku. pocet_zivotu V Aktuální počet životů hráče během hry. pocet_zivotu_puvodni S Počet životů hráče při zahájení hry. posun_vlevo P Udává vzdálenost herního pole od okraje obrazovky v pixelech. posunuti_lode_dolu V Obsahuje offset začátku řádku s číslem posunuti_v_radkach ve videopaměti. posunuti_v_radkach P Určuje, na jakém řádku na obrazovce se pohybuje loď, zároveň tak určuje hranici, pod kterou se nesmí kulička dostat.

pozice V Aktuální pozice kuličky během hry. Určuje pozici prostředního pixelu kuličky. Pozice je udána jako offset ve videopaměti (levý horní roh má pozici 0, pravý dolní roh má pozici 63999). rychlost S Hodnota určuje, jaké množství prázdných operací se bude provádět v každém průběhu nekonečného cyklu. Slouží ke zpomalení hry na úroveň vhodnou pro člověka. sirka_lode S Šířka lodě, kterou hráč ovládá. Po vynásobení dvěma se rovná šířce v pixelech. smer_vert V Používá se při odstraňování kostičky (metody vymaz_kosticku a vymazavani). Udává, zda se aktuálně mazají pixely směrem nahoru (-1) nebo dolů (1). smer_vymaz V Používá se při odstraňování kostičky (metody vymaz_kosticku a vymazavani). Udává, zda se aktuálně mazají pixely směrem doleva (-1) nebo doprava (1). stav V Udává, zda je kulička v pohybu (1), nebo je přilepena na lodi a čeká na vystřelení (0). str1 P String pokyny. str2 P String pokyny. str3 P String pokyny. str4 P String závěrečná hláška. temp_soubor V Dočasná proměnná využívaná při načítání nastavení z konfiguračního souboru (metoda cteni) x V Určuje jakým směrem se aktuálně kulička pohybuje: doleva (-1), doprava (1), nepohybuje se (0). x_puvodni P Udává směr, jakým se bude kulička pohybovat po vystřelení: doleva (-1) nebo doprava (1). y V Určuje jakým směrem se aktuálně kulička pohybuje: nahoru (-1), dolů (1), nepohybuje se (0). y_puvodni P Udává směr, jakým se bude kulička pohybovat po vystřelení: nahoru (-1) nebo dolů (1). Metody Název metody cekej cteni kontrola_hranic Popis metody Způsobuje zpomalení programu, aby byl hratelný. Obsahuje cykly, které nic neprovádějí, pouze zaměstnávají procesor. Délku cyklu určuje proměnná rychlost. Slouží k načítání nastavení z konfiguračního souboru. Načte vždy 4B ze souboru a první 3 převede na numerickou hodnotu, tu uloží před návratem do AX. Je volána po každém pohybu kuličky. Nejprve se kontroluje, jestli kulička není níže než je hrací plocha tedy hráč ji nestihl zachytit lodí. Pokud ano, je mu snížen počet

kosticky kresli_k kresli_lod kulicka_fce lod_fce životů a kulička je posazena na loď a čeká na vystřelení. Pokud má hráč 0 životu, je zavolána metoda prohra. Poté se kontrolují nárazy. Při pohybu nahoru se kontrolují nejbližší pixely nahoru od kuličky. Obdobně pro pohyb dolů, doleva a doprava. Pokud je nalezen pixel jiné barvy než má pozadí, dochází k odrazu, tj. směr pohybu je změněn na opačný (doleva změněno na doprava apod.). Nakonec se zkontrolují diagonálně umístěné nejbližší pixely, pokud je tam nalezen pixel jiné barvy, dojde ke změně v obou pohybech (tj. jak v horizontálním, tak vertikálním). Pokud důvodem odrazu byl pixel barvy barva_ramecek nebo barva_lod, dojde pouze k odrazu. Pokud měl barvu barva_kosticka, je zavolána metoda vymaz_kosticku (v SI-1 je offset daného pixelu). Vykreslí kostičky na herní plochu. Využívá proměnné barva_kosticka, pocet_rad_kosticek, pocet_kosticek_v_rade. V AX (AL obsahuje stejnou hodnotu jako AH) je uložena barva, která určuje, zda se bude vykreslovat nebo mazat a v pozice je aktuální pozice kuličky. Provede vykreslení pixelů kuličky. V AX (AL obsahuje stejnou hodnotu jako AH) má uloženou barvu, která určuje, zda bude loď vykreslena nebo vymazána. V lod má uloženou pozici lodě. Vykreslí jednotlivé pixely lodě. Pokud se hraje (kulička byla již vystřelena), vymaže kuličku na její původní pozici (vymaz_k), vypočte její novou polohu a vykreslí ji tam (vykresli_k). Vymaže loď na její poslední pozici (vymaz_lod), ze souřadnic myši zjistí její novou polohu a vykreslí ji tam (vykresli_lod). Pokud ještě nebyla kulička vystřelena, je pozice kuličky změněna odpovídajícím způsobem. nakresli_pole Nejprve smaže celou obrazovku a pak vykreslí herní pole okraje, pozadí herní plochy. Zavolá kosticky, vykresli_pocet_zivotu a vykresli_lod. nova_hra prohra start ukonci vyhra Provede inicializaci proměnných před započetím nové hry. Zavolá metody pro vykreslení herního pole a kostičky. Nastaví barvu vlajky na červenou a zavolá vykresli_vlajku. Pokud se program vrátí, zavolá metodu nova_hra. Hlavní metoda. Načítá nastavení ze souboru, vypíše pokyny, načte rychlost hry, nastaví videomód, inicializuje myš, zavolá nova_hra a přejde do nekonečného cyklu, který reprezentuje hru. V cyklu se vždy kontroluje stisk klávesy (zmacknutoesc) a pohyb (tj. pohyb lodě) a kliknutí (tj. vystřelení kuličky) myši. Zavolají se funkce lod_fce, kulicka_fce a cekej. Tato metoda je volána, pokud si uživatel přeje program ukončit. Vypne grafický mód obrazovky a ukončí program službou DOSu. Nastaví barvu vlajky na zelenou a zavolá vykresli_vlajku. Pokud

vykresli_k vykresli_lod vykresli_pocet_zivotu vykresli_vlajku vymaz_k vymaz_kosticku vymaz_lod vymazavani zmacknutoesc se program vrátí, zavolá metodu nova_hra. Slouží k vykreslení kuličky. Nastaví barvu na barva_kulicka a zavolá kresli_k. Slouží k vykreslování lodě. Nastaví barvu na barva_lod a zavolá kresli_lod. Vymaže z obrazovky informaci o životech a vykreslí jich jen aktuální počet. V AX (v AL je stejná hodnota jako v AH) má uloženo jakou vlajku má vykreslit (červenou nebo zelenou). Provede její vykreslení a čeká na reakci uživatele. Po stisknutí klávesy ESC, zavolá metodu ukonci, která ukončí program. Jinak po kliknutí levým tlačítkem myši, se metoda standardně ukončí a vrátí řízení volající metodě (prohra nebo vyhra). Slouží k vymazání kuličky z hrací plochy. Nastaví barvu na barva_pozadi a zavolá kresli_k. Používá se při vymazávání kostičky z hrací plochy. V SI-1 je offset jednoho z pixelů kostičky. Funkce nejprve nastaví vymazávání pixelů směrem vpravo a nahoru od zadaného pixelu a zavolá funkci vymazavani. Poté provede vymazávání ve směru vlevo a dolu. Nakonec sníží počet kostiček ve hře, pokud je nulový, zavolá metodu vyhra. Slouží k vymazávání lodě. Nastaví barvu na barva_pozadi a zavolá kresli_lod. V SI-1 má offset pixelu kde se má začít vymazávat. Smer_vymaz udává, jestli se maže směrem doprava nebo doleva. Smer_vert udává jestli nahoru nebo dolu. Metoda maže pixely (mění barvu pixelů na barvu pozadí) ve směru smer_vymaz, dokud nenarazí na pixel s barvou pozadí, v takovém případě vybere jako aktuální pixel pixel ve směru smer_vert, změní směr smer_vymaz a pokračuje dál. Pokud je při posunu dolu nebo nahoru jako aktuální pixel vybrán pixel barvy pozadí, metoda končí. Zkontroluje, zda byla stisknuta klávesa, pokud ano, zjistí její ASCII kód a porovná ho s kódem klávesy ESC. Pokud bylo stisknuto ESC, zavolá metodu ukonci. Jinak neprovede nic dalšího. Zpomalení hry na hratelnou rychlost: Nejjednodušším způsobem je zavést zdržovací cykly. Tento způsob jsem použil, protože se mi nepodařilo najít žádný jiný, který by fungoval. Zdržovací cyklus je implementován v metodě cekej, která je volána v každé iteraci nekonečného cyklu cyklus, který se nachází v metodě start. Dobu, kterou program stráví v tomto cyklu ovlivňuje proměnná rychlost (čím je vyšší, tím déle tam program zůstává), jejíž hodnota se vypočte z hodnoty, která je v konfiguračním souboru a z hodnoty zadané uživatelem při zahájení hry. Jinou možností je využít čítač tiků procesoru, například pomocí INT 1Ah. Tento čítač se ale inkrementuje pouze 18,2-krát za sekundu, což je nepoužitelné pro plynulou hru. Také jsem zkoušel funkci BIOSu wait (MOV AX, 8600h; INT 15h), ale ta patří mezi extended funkce a je implementována jen v některých procesorech. V mém Intel Celeron 2GHz

implementována není. Základní myšlenka řešení: Z velké části využívám videopaměť, místo abych udržoval některé informace v proměnných. K odrazu od stěn, lodě a kostiček dochází pokud se kulička dostane na pixel jiné barvy než má pozadí. V každé iteraci nekonečného cyklu dochází k pohybu kuličky a následné kontrole, na jaké pixely se kulička dostala. Odrazy: Kulička má v každém momentě přiřazenu rychlost horizontální a vertikální. Pokud dochází k odrazu, je jednoduše odpovídající složka, nebo obě složky rychlosti změněny na opačnou hodnotu. Vymazání kostičky: Pokud má dojít k vymazání kostičky po nárazu od kuličky, program označí pixel, kde byl zjištěn náraz jako počáteční. Potom jsou jednotlivé pixely kostičky vymazávány ve dvou krocích. V prvním kroku se začnou mazat pixely napravo od počátečního pixelu, dokud se nenarazí na pixel s barvou pozadí. Poté se pomyslný mazací kurzor posune o řádek výše a maže se směrem doleva, dokud se opět nenarazí na pozadí a nezmění se tak směr mazání. Tak se pokračuje do té doby, dokud jsou o řádek výše pixely barvy jako má kostička. V druhém kroku se začne opět od startovního pixelu, ale ve směru doleva a dolu.