Allegro - Knihovna pro programování her I. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



C/C++

Allegro - Knihovna pro programování her I.

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.

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 DOS/DJGPP. Pojďme se vrhnout na programování a nejenom chodit kolem horké kaše.

Co vlastně Allegro dokáž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é soubory

A 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.

Ještě trochu nastavení..

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ř.: pokus.c jste napsali tyto dva následující řádky na příkazovou rádku:

gcc -g -c pokus.c -o pokus.o

gcc -o pokus.exe pokus.o -lstdcxx


nebo bez souboru object, tedy rovnou do exe:

gcc pokus.c -o pokus.exe  -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 pokus.c -o pokus.o

gcc -o pokus.exe pokus.o -lstdcxx -lalleg

nebo bez souboru object, tedy rovnou do exe:

gcc pokus.c -o pokus.exe -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.


A nyní už slíbený program, který nenese jiný název než "Ahoj SVĚTE!":

#include <stdio.h>
#include <conio.h>
#include "allegro.h" // hlav. soubor. allegra

int main(void)
{
    int result;

    // inicializuje allegro

    if ( (result = allegro_init() ) != 0 ) 
    {
      printf("Nejde Allegro! - %s\n\nZmackni 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\n\nZmackni 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;
}


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.

#include "allegro.h"

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 main, ve které si na začátku inicializujeme proměnnou result pro 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 allegro_init. 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í extern char allegro_error[], později se k ní vrátím, protože ji budeme potřebovat. Její prototyp vypadá následovně:

int allegro_init();

My jsme tak provedli i s otestováním. Pokus allegro_init vrá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:

int set_gfx_mode(int card, int w, int h, int v_w, int v_h);

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:

void set_palette(PALETTE p);

A jako parametr ji dáme golobální proměnnou desktop_palette, 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ě:

void textout(BITMAP *bmp, FONT *f, unsigned char *s, int x, y, int color);

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éno screen a 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:

int makecol(int r, int g, int b);

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:

void allegro_exit();

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říkaz return 0 a je konec programu.

Příště si řekneme více o módech a o výstupu textu na obrazovku.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: