Jestliže nevidíte správně česká písmena, zvolte potřebné kódování češtiny manuálně.
api.h
.
Zdůrazněno pořadí zadávání souřadnic.libstack.a
pro Linux.Hledání min je dobře známá hra, která spočívá v nalezení min v hracím poli (moři). Na začátku zakryté hrací pole odkrýváme po políčkách, ze kterých se dozvídáme, kolik min se nalézá v jejich bezprostředním okolí. Hra končí prohrou, když hráč při odkrývání narazí na políčko s minou. Naopak hráč vítězí, když se mu podaří odkrýt všechna políčka bez min.
api.c
): Obsahuje důležité funkce na
práci s hracím polem, aplikační část programu. K dispozici máte
zdrojový kód hlavičkového souboru api.h
,
který definuje rozhraní
API. Tento soubor použijete beze změny. Do souboru
api.c
opíšete deklarace funkcí a naplníte jejich těla.
Účel každé funkce je popsán v komentáři.
miny.c
): Slouží jako prezentační složka
programu. Bude přijímat vstup od užvatele a generovat výstup. Měl
by kromě funkcí na vstup/výstup používat funkce výhradně z API (není to podmínka, ale
slušnost).Procházení zásobníkem (+5 bodů) - políčko uložíme na zásobník, abychom ho v zápětí na začátku cyklu ze zásobníku vybrali, a označili ho jako objevené. Pokud kolem políčka nejsou žádné miny, uložíme na zásobník všechna okolní políčka, a postup opakujeme, dokud není zásobník prázdný.
Máte k dispozici statickou knihovnu (libstack.a
pro IRIX; libstack.a
pro Linux) s hlavičkovým souborem (stack.h
),
které obsahují funkce na práci se zásobníkem. Dokumentace viz.
hlavičkový soubor. Abyste mohli knihovnu použít, sestavíte program
příkazem:
gcc -std=c99 -pedantic -Wall miny.o api.o -o miny
-lstack -L.
-L.
znamená, že se má při hledání knihoven pátrat i v
aktuálním adresáři
Hráč může zadat vstup ve čtyřech variantách (první se zadává souřadnice sloupce, číslování je od jedné):
>>> 10 5
// odkrýt políčko na pozici 10 (sloupec) 5 (řádek)
>>> 10 5 f
// označit/odznačit políčko 10 5; označené políčko nelze odkrýt
>>> 10 5 x
// odkrýt blok 3*3 políček se
středem v 10 5; označená políčka se neodkrývají
>>> exit
(nebo znak ^D) // ukončí hru
Pro zásobníkovou verzi programu naprogramujte podle rozhraní
definovaného v stack.h
knihovnu na práci se zásobníkem
(stack.c
). Pro uchovávání dat není dovoleno používat pole,
ale je nutné použít strukturu deklarovanou v hlavičkovém souboru. Ze
souboru stack.o
si můžete vytvořit knihovnu příkazy:
ar r libstack.a stack.o
ranlib libstack.a # vygeneruje index knihovny
ranlib
je součástí balíku
devel2 (module add devel2), ale použitelnou knihovnu můžete
vytvořit i pouze pomocí prvního příkazu. V manuálové stránce
ranlib
stojí: "Index ve statické knihovně urychluje
její linkování a umožňuje funkcím z knihovny, aby se vzájemně
volaly, a nemusely přitom vědět o svém umístění(adrese)."
/export/e1/pb071/váš_login/zaver
soubory
miny.c
, api.c
a odevzdáváte-li rozšířenou
variantu, tak i stack.c
(podle přítomnosti tohoto souboru
bude určeno, zda se jedná o rozšířenou variantu) *.c
si můžete pro vlastní
potřebu vytvořit další funkce.sea_uncover(...)
je výhodné použít statickou
proměnnou na počítání odkrytých políček.main
můžete
použít
unixový příkaz echo $?
/home/jkucera/pb071/zaver/miny
. Jeho zdrojové
soubory mají velikost včetně komentářů: miny.c
201 řádků
(5738 bajtů), api.c
240 řádků (5187 bajtů),
stack.c
63 řádků (991 bajtů). ![]() |
![]() |