Sokoban Intermezzo: the Curses
Ciele
- Osvojiť si základy práce s knižnicou curses.
Úvod
Na tomto cvičení začínate pracovať na svojom druhom zadaní - jednoduchej konzolovej hre Sokoban. Pri práci môžete vychádzať z vašej implementácie knižnice robota Karla a pri čítaní nasledujúcich modulov budú jednotlivé úlohy nadväzovať na vašu predchádzajúcu implementáciu.
Hlavným cieľom tohto cvičenia je však zoznámiť sa s knižnicou curses, ktorá vám poskytne viac možností pri práci s obrazovkou, ako poskytujú funkcie printf() alebo putchar(). Okrem toho umožňuje odchytiť stlačenie klávesy, čo budete vedieť využiť pri ovládaní svojej postavy v hre.
Postup
Krok č. 1
Úloha 1.1:
Jeden z možných problémov sa bude týkať vlastného typu boolean, ktorý ste vytvárali. Typ boolean sa totiž v knižnici curses nachádza.
Ďalší problém môže vzniknúť, ak ste nepoužili pripravený projekt z cvičenia č. 5, ale vytvorili ste si vlastný projekt. Potrebujete ho nastaviť tak, aby pracoval s knižnicou curses.
Úloha 1.2:
Úloha 1.3:
Úloha 1.4:
Poznámka:
Krok č. 2
Úloha 2.1:
- printw() - print formatted output in curses windows
- move() - move curses window cursor
- refresh() - refresh curses windows and lines
- clear() - clears the screen
Poznámka:
Úloha 2.2:
Krok č. 3
Úloha 3.1:
Poznámka:
Úloha 3.2:
Úloha 3.3:
Poznámka:
Úloha 3.4:
Úloha 3.5:
Doplňujúce úlohy
-
Oboznámte sa s podporou a prácou s farbami v knižnici curses
a vhodným spôsobom ich použite vo svojom riešení. Pre prácu s farbami
môžete použiť nasledujúce funkcie:
- has_colors() - vracia TRUE alebo FALSE podľa toho, či terminál podporuje prácu s farbami
- start_color() - funkcia musí byť zavolaná, ak chcete v programe používať farby (ideálne rovno po funkcii initscr(), ale je dobré najprv overiť, či terminál prácu s farbami podporuje)
- init_pair() - mení definíciu dvojice farieb, pričom dvojica farieb je chápaná ako farba pozadia a farba popredia. Funkcia má tri argumenty: číslo páru, čislo farby popredia a číslo farby pozadia.
- attrset() - nastaví atribúty okna na atribúty zadané ako argument funkcie, pričom parametrom môže byť aj dvojica farieb definovaná funkciou init_pair().
- Upravte funkciu draw() tak, aby sa pri každom volaní nemusela vykreslovať celá scéna znova, ale prekreslili sa len vzniknuté zmeny. Za zmenu sa v tomto prípade dá považovať stará a nová pozícia robota Karla, ako aj aktualizácia stavového riadku.
- V prípade, že sa s robotom Karlom nechcete rozlúčiť tak skoro, tak namapujte vhodné klávesové skratky aj na funkcie putBeeper() a pickBeeper().
Ďalšie zdroje
- curses (programming library)
- PDCurses - verzia knižnice curses pre operačný systém Windows (pdcurses.lib, pdcurses.dll)
- Writing Programs with NCURSES
- Introduction to the Unix Curses Library
- initscr(), endwin() - curses screen initialization and manipulation routines
- getch() - get characters from curses terminal keyboard
- refresh() - refresh curses windows and lines
- printw() - print formatted output in curses windows
- move() - move curses window cursor
- echo(), noecho() - curses input options
- curs_set() - sets the cursor state to invisible, normal, or very visible for visibility equal to 0, 1, or 2 respectively. If the terminal supports the visibility requested, the previous cursor state is returned; otherwise, ERR is returned.
- keypad() - enables the keypad of the user's terminal. If enabled (bf is TRUE), the user can press a function key (such as an arrow key) and getch() returns a single value representing the function key, as in KEY_LEFT.
- has_colors(), start_color(), init_pair() - curses color manipulation routines
- attrset() - sets the current attributes of the given window to attrs
- clear() - clears the screen
Poznámka: