26. listopadu 2001, 00.00 | Bližší seznámení s vynikající knihovnou pro tvorbu her nejen v prostředí MS-DOS. Dnes si ukážeme, jak tuto knihovnu používat v DJGPP.
Co vlastně Allegro dokáže?
Ještě trochu nastavení..
gcc -g -c -o
gcc -o -lstdcxx
Na začátek trocha historie a seznámení, co to vůbec je Allegro?Asi nejlepší knihovna pro tvorbu her pod operační systém MS-DOS (je i pod Windows, ale řeč bude pouze o Allegru pod DOS). I když dnes žijeme ve světě Windows tak si nemyslím, že jednoduché hry by se nemohli ještě vytvořit pod DOS. Každý nemá doma na stole 1.5GHz procesor půl giga ramky atd. A když začínáte programovat hry je lepší začít pomalu od začátku. Přeci když jste se chtěli naučit běhat tak nejdříve jste se naučili lézt, chodit a pak až běhat. No alespoň já jsem tak začínal.Ale vraťme se jen stručně k historii Allegra. Minulost Allegra spadá asi do roku 1994, s postupem času se stávalo známější, lepší, rychlejší a vývoj šel hodně dopředu až do dnes. Allegro bylo napsáno v jazyce C a Assembleru a zúčastnilo se toho mnoho autorů, ale nebudu všechny jmenovat, jejich jména si můžete přečíst v souboru "authors". Originální myšlenka na vytvoření Allegra byla od Shawna Hargreavese. Dnes je na světě verze 3.9.38 (která je pod mnoho platforem), ale já se budu zabývat verzí 3.12, což je pouze pod. Pojďme se vrhnout na programování a nejenom chodit kolem horké kaše.S čím vším Allegro pracuje? A co se dá naprogramovat (ovládat) pomocí knihovny Allegro:-Grafika 2D, 3D-Zvuk, hudba-Myš, klávesnice, joystick-Matematické operace (matice, vektory, atd.)-Časovač-Datavé souboryA sposta dalších věcí. Nejmenuju všechny jednotlivé části jako jsou palety, sprity atd., ale říkám tomu prostě jedním slovem grafika apod.Předpokládám, že máte nainstalovaný DJGPP a v něm Allegro. Poslední věc, která stojí za zmínku je ta, že při překladu souboru např.: jste napsali tyto dva následující řádky na příkazovou rádku:nebo bez souboru object, tedy rovnou do exe:
gcc -o -lstdcxx
Ale když chcete překládat program pro Allegro musíte ještě přilinkovat jeho knihovnu. Tj. druhý řádek obohatit o parametr -lalleg. Po opravě by vypadal včetně prvního následovně:
gcc -g -c -o
gcc -o -lstdcxx -lalleg
nebo bez souboru object, tedy rovnou do exe:
gcc -o -lstdcxx -lalleg
Pokud používáte vývojové prostředí RHIDE je nastavení podobné. V nabídce Options - Libraries zapište na volnou pozici pouze "alleg" jak vidíte v obrázku a už můžete programy pod Allegro překládat ve vývojovém prostředí RHIDE.
#include
#include
#include "allegro.h" // hlav. soubor. allegra
int main(void)
{
int result; // inicializuje allegro
if ( (result = allegro_init() ) != 0 )
{
printf(" Nejde Allegro! - %s
Zmackni cokoliv. ",allegro_error);
getch();
return 0;
}
// nahodi mod 640 * 480 * 8
if ( (result = set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) ) < 0)
{
set_gfx_mode(GFX_TEXT, 80, 25, 0, 0);
printf(" Nejde grafika! - %s
Zmackni cokoliv. ",allegro_error);
getch();
allegro_exit();
return 0;
}
// pro 8b. barevnou hloubku nastaví standardní paletu
set_palette(desktop_palette);
// vypise znamy text na souradnice primo na obrazovku
textout(screen, font, " Ahoj SVETE! ", 250, 150, makecol(255, 0, 0) );
getch();
// ukonci allegro
allegro_exit();
return 0;
}
#include "allegro.h"
int allegro_init();
int set_gfx_mode(int card, int w, int h, int v_w, int v_h);
void set_palette(PALETTE p);
void textout(BITMAP *bmp, FONT *f, unsigned char *s, int x, y, int color);
int makecol(int r, int g, int b);
void allegro_exit();
A nyní už slíbený program, který nenese jiný název nežSice jsou v příkladu komentáře, ale když něco vysvětluji chtělo by to okomentovat. Když je to první program tak to vezmu trochu dopodrobna.Tento příkaz vloží hlavičkoví soubor Allegra a zpřístupní všechny funkce. To si myslím, že Vás všechny napadlo. Neučíme se tu ANCI C, ale ALLEGRO. A nyní se už přesuneme do hlavní funkce, ve které si na začátku inicializujeme proměnnoupro pozdější využití. Před použitím jakého koliv příkazu či funkce z Allegra musíte bez prostředně zavolat funkci. Tato funkce inicialize Allegro pro správný chod. Zabere si kus paměti pro sebe, inicializuje nějaké globální proměnné za zmíňku stojí, později se k ní vrátím, protože ji budeme potřebovat. Její prototyp vypadá následovně:My jsme tak provedli i s otestováním. Pokusvrátí 0 je všechno v pořádku a my pokračujeme dále v běhu programu. Při chybě vrátí nenulové číslo, ale musím říct, že se mi to ještě nestalo.A nyní už konečně se dostáváme k něčemu lepšímu což je zapnutí grafického módu. Použijeme funkci:Která opět vrací 0 když je vše v pořádku a pokud ne tak vrací záporné číslo. K její parametrům: první parametr při zapínání grafiky ponechávejte na GFX_AUTODETECT a nic nezkazíte. Když budete měnit rozlišení textového módu tak používejte jako první parametr GFX_TEXT. Druhý a třetí parametr je rozlišení v pixelech. Pro náš příkaz je zcela dotačující 640 * 480 pixelů. Čtvrtý a pátý parametr nechte pro zatím 0. Otázka je jaká bude barevná hloubka? Odpověď zní 8 bitová. To je standardní nastavení. O tom jak ji změnit např.: na 16,24,32 bude řeč později.Pokud vše proběhlo v pořádku a funkce nám vrátila 0 tak už musíme mít zapnutý mód 640 * 480 * 8. Mimojiné nám tato funkce vytvořila v paměti virtu8lní obrazovku o velikosti 640 * 480 pixelů.Při 24 bitech apod. není potřeba se starat o paletu, ale teď při 8 bitové barevné hloubce je zapotřebí nastavit paletu. My nastavíme standardní paletu.Použijeme pro nastavení palety funkci:A jako parametr ji dáme golobální proměnnou, která nastaví již zmiňovanou standardní paletu.V této době máme nahozený mód, nastavenou paletu tak stačí už jenom kreslit na obrazovku. A jelikož se náš příklad jmenuje Ahoj SVĚTE! tak vypíšeme na obrazovku právě tento text.Pro psaní textu na obrazovku použijeme funkci jejíž prototyp vypadá následovně:První parametr je tzv. ukazatel Bitmapu, na kterou chceme kreslit. Jelikož nemáme žádnou vytvořenou tak budeme kreslit přímo na obrazovku. Protože jak už jsem se zmíňil tak při nastavení graf. módu se nám vytvoří v paměti proměnná o veliskoti 648 * 480 pixelů, která nese jménoa je to pointer na typ BITMAP (o tom bude řeč příště, pro zatím nám stačí co víme). Jako první parametr právě zadáme globální proměnnou screen.Dále máme na výběr písmo jaké chceme použít. Na začátek nám stačí opět standardní písmo a jako druhý parametr použijeme globální proměnnou font, opět je to pointer.Třetí parametr je řetězec znaků, který chceme vytisknout to je všem jasné doufám.X a Y není nic jiného než to kam chceme náš text umístit.Jako poslední je barva, kterou chceme použít. Abychom se vyvarovali různým nepříjemnostem s barvou použijeme funkci:Která nám ze tří složek - červené, zelené a modré vytvoří při osmibitové barevné hloubce nejbližší barvu té barvě, která se vyskytuje v naší paletě. Co to znamená? Že ať použijeme jakoukoliv barevnou hloubku tak nám to vytvoří téměř stejnou barvu. Jednotlivé hodnoty mohou nabývat hodnot 0-255.Dále už čekáme na stisk klávesy a potom už následuje funkce:Která se za nás vrátí zpět do textového režimu a popřípadě odinstaluje ostatní věci (tím se zatím nemusíme zabývat). Nakonec se provede příkaza je konec programu.Příště si řekneme více o módech a o výstupu textu na obrazovku.