Obsah

Hra ,,Fotbal``
Popis hry
Ukázka hry
Popis programového řešení
Knihovna
Funkce
Vstupní parametry
Výstup
Datové struktury
Způsob hodnocení

Hra ,,Fotbal``

Popis hry

Hru ,,Fotbal`` hrají dva hráči na čtverečkovaném papíře. Nakreslí se ,,hřiště`` libovolné velikosti a tvaru, vyznačí se počáteční bod a brány obou soupeřů.

Hřiště2. hřiště

Táhnout je možné osmi směry, tzn. do libovolného vrcholu kteréhokoliv ze čtyř čtverečků, které sdílí aktuální bod.

Tahy

Nesmí se táhnout po čáře, kde již někdo táhl. To znamená, že jediným případem, kdy lze použít všech osm možností je první tah, v každém dalším tahu je pak vždy maximálně sedm možností.

Zeď můžeme v takovémto případě popsat tak, že zakázanou oblast vyplníme tahy.

Zdi

Pokud hráč svým tahem dosáhne zdi nebo místa, kde již nějaký tah je, pokračuje ve hře (tzv. ,,odraz``).

Úkolem je dosáhnout soupeřovy brány nebo donutit soupeře se zablokovat, tzn. dojít do místa, z nějž již žádný další tah není možný.

Ukázka hry

Následující obrázek odpovídá situaci krátce po začátku hry. Celkové hřiště je nakresleno na obrázku výše (první obrázek).

Začátek

Situace po tahu obou hráčů

Tah obou

Situace po tahu modrého

Tah modrého

Situace po tahu červeného

Tah červeného

Popis programového řešení

Úkolem je napsat funkci, která podle aktuální situace vrátí následující tah. Funkce bude součástí knihovny. Jméno funkce i jméno knihovny bude mít jako prefix unikátní kód týmu.

Knihovna

Jedinou položkou v části interface (tzn. veřejnou) bude hlavička výsledné funkce, vše ostatní bude ukryto v části implementation. Knihovna může využívat globální proměnné, jiné knihovny, libovolé datové typy atd. Paměť je třeba využívat s rozvahou, algoritmy, které budou mít potíže s pamětí budou oproti ostatním znevýhodněny.

Funkce

function <prefix>Tah(Hriste: PPole; dx, dy, x, y: Integer; BVlastni, BSoupere: PBrana; Cas: LongInt): Integer;

Vstupní parametry

Hriste: PPole
Pole popisující hřiště s již provedenými tahy
dx, dy: Integer
Rozměry hřiště
x, y: Integer
Souřadnice aktuální pozice ve hřišti
BVlastni, BSoupere: PBrana
Seznamy s jednotlivými body vlastní a soupeřovy brány
Cas: LongInt
Zbývající čas (konec času neznamená prohru, pouze nevýhodu)

Výstup

Pokud nenastane při zpracování chyba, vrátí funkce nastavený jeden bit podle vybraného tahu, pokud došlo k chybě, vrátí kód chyby podle následující tabulky

-1Nedostatek paměti
-2Chyba přístupu na disk
-3Aktuální souřadnice mimo rozměry hřiště
-4Záporné nebo nulové rozměry hřiště
-5Ukazatel Hriste je nil
-6Ukazatel BVlastni je nil
-7Ukazatel BSoupere je nil
-8Seznam BVlastni obsahuje odkaz na nil
-9Seznam BSoupere obsahuje odkaz na nil
-10Není možný žádný další tah
-50M$ Windows detected
-51Obecné porušení ochrany
-1000Neznámá chyba

Pokud vás napadne nějaká další chyba, pošlete mi, prosím, mailem její přesnou specifikaci, bude zařazena a přidělím jí volný kód.

Přidělení bitů jednotlivým směrům je popsáno níže.

Datové dtruktury

Všemi používané datové dypy budou definované v knihovně Typy, kterou budou používat všechny vaše knihovny.

PPole
type PPole = Pointer;

Hřiště je popsáno dvourozměrným polem čísel typu Byte. Každý bit reprezentuje jeden směr z daného bodu. Je-li bit 1, je tah obsazen, je-li 0, je tah volný.

Následující tabulka ukazuje rozdělení bitů mezi jednotlivé směry. Souřadnice jsou relativní vůči aktuální pozici (přičítají se k aktuální pozici)

  x
-101
y 1842
016 1
-13264128

Pole je uloženo po řádcích, tzn. vnitřním indexem je x a vnějším y.

PBrana
type PBrana = ^TBrana;
     TBrana = record
                 x, y: Integer;
                 Predchozi, Dalsi: PBrana;
              end;

Jedná se o oboustranně zřetězený cyklický seznam souřadnic jednotlivých bodů soupeřovy brány.

Způsob hodnocení

Ke konci semestru bude uspořádán turnaj (podle náročnosti buď každý s každým nebo jiným způsobem). Algoritmy se utkají na dvou (nebo více) hřištích různého tvaru, na každém hřišti se utkají celkem 4 krát. Každý bude hrát postupně na obě brány a jako první i jako druhý.

Na závěr bude vytvořena statistika ze všech utkání a srovnání všech algoritmů podle různých kritérií.