Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

2. diel - Grafická knižnica Allegro pre C a C ++

Prvá funkciu pre našej hru, ktorú potrebujeme vedieť, je allegro_init (). Tá má nasledujúcu syntax: int allegro_init () Táto funkcia je potrebná, pretože inicializuje Allegro knižnicu. Ak nebudeme volať túto funkciu, bude program pravdepodobne padať (v najhoršom prípade) alebo jednoducho nebude fungovať (v najlepšom prípade). Ďalšia dôležitá premenná je tzv. Allegro_id (string), ale je deklarovaná takto: extern char allegro_id []; Môžete použiť allegro_id na zobrazenie čísla verzie pre knižnice Allegro, ktorú máte práve inštalovanú. To je dobrý spôsob, ako skontrolovať, či Allegro je správne nainštalované, takže by som mal napísať nejaký kód pre zobrazenie allegro_id:

#include <conio.h>  // pro getch()
#include <stdlib.h>
#include “allegro.h”
int main()
{
allegro_init();
printf(“Allegro version = %s\n”, allegro_id);
printf(“\nPress any key...\n”);
getch();
return 0;
}
END_OF_MAIN();

Po skontrolovaní knižnice môžeme začať robiť nastavovať našej hru. Prvé čo urobíme je nastavenie grafickej karty, klávesnice, zvukové karty atď.

#include "allegro.h"
int main(void)
{

 allegro_init();  // inicializace allegra
 install_keyboard(); // inicializace klavesnice
 set_color_depth(32); // nastaveni hloubky (32bit)
 int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); //nastaveni graficke  karty(Typ,vyska,sirka,....)
 if (ret != 0) {  // pokud graficka karta nenalezena zobrazi se chybova hlaska
 allegro_message(allegro_error); // error
 return 1; // pokud chyba vraci 1
 }
 while (!keypressed());
 //exit program
 allegro_exit();
 return 0;
}
END_OF_MAIN()

Teraz máte predstavu o tom, ako inicializovať jeden z režimov grafický karty v Allegru. Ale než sa ponoríme do niektorých z grafických primitív, ktoré sú zabudované do Allegra, chcem vám ukázať jednoduchý program, ktorý načíta rastrový obrázok (podporované formáty sú BMP, PCX, TGA, a LBM) a vykreslí ho na obrazovku pomocou metódy bit-block transfer (čiže zvracať v skratke). S programom budete užitočne zoznámení a s jeho funkciami pre inicializáciu grafického systému a pre nastavenie video režimu, farebnej hĺbky, atď ....

#include "allegro.h"
int main(void)
{
 char *filename = "alex.bmp"; //Jmeno obrazku ( nebo vašeho )
 BITMAP *image;  //Pointer pro obrazek (kam obrazek ulozime do jake casti pameti)

 allegro_init();  // inicializace allegra
 install_keyboard(); // inicializace klavesnice
 set_color_depth(32); // nastaveni hloubky (32bit)
 int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); //nastaveni graficke karty(Typ,vyska,sirka,....)
 if (ret != 0) {  // pokud graficka karta nenalezena zobrazi se chybova hlaska
  allegro_message(allegro_error); // error
  return 1; // pokud chyba vraci 1
 }
  image = load_bitmap(filename, NULL);//nascteme obrazek
 if (!image) {    // pokud obrazek nenalezen zobrazi se chybova hlaska
  allegro_message("Error loading %s", filename); // error a jmeno chyby
  return 1; // pokud chyba vraci 1
 }
 //vykreslime na obrazovku
 blit(image, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
 //odebereme bitmapu z pameti
 destroy_bitmap(image);
 //vykreslime na obrazovku udaje o rozliseni
 textprintf_ex(screen,font,0,0,1,-1,"%dx%d",SCREEN_W,SCREEN_H);
 //ceka dokud se nezmackne libovolna klavesa , jinak by program spadl
 while (!keypressed());
 //exit program
 allegro_exit();
 return 0;
}
END_OF_MAIN()

. <> allegro - Allegro - Programujeme hry v C ++
Ted si ukážeme, ako vykresľovať v našej hre primitívne grafiku. Bude sa nám to hodiť napr pri kolíziách pod.

Najjednoduchšie je samozrejme primitívna grafika pixel-drawing. Ideme na to, kód je tu:

#include <stdlib.h>
#include "allegro.h"

#define POCETPIX 1000

int main(void)
{
     int x,y;

    int red, green, blue, color;

    //initialize Allegro
    allegro_init();

    //inicializujeme klavesnici
    install_keyboard();

    //inicializujeme generátor náhodných čísel
    srand(time(NULL));
    //inicializujeme grafický mod na 640x480
    //Můžeme na kolik chceme na rozlišení
    //Můžeme nastavit i hloubku 32,24,atd....
    // GFX_AUTODETECT_WINDOWED - zobrazí se okno
    // GFX_AUTODETECT_FULLSCREEN - zobrazí se ve fullscreenu
    int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    if (ret != 0) {
        //Kontorla inicializace modu
        allegro_message(allegro_error);
        return 1;
    }

    //Zobrazí na obrazovce rozlišení obrazovky
    //V našem případě je to 640 x 480
    textprintf_ex(screen, font, 0, 0, 15, -1,
        "Kreslíme pixely - %dx%d - Press ESC to quit",
        SCREEN_W, SCREEN_H);
    //čeká na stisk klávesy
    while(!key[KEY_ESC])
    {

        // na stavujeme náhoně místo zobrazení pixelu od 0 do 1000
        x = 10 + rand() % 1000;
        y = 10 + rand() % 1000;

        // Nastavujeme náhodnou barvu od 0 do 255
        red = rand() % 255;
        green = rand() % 255;
        blue = rand() % 255;

        color = makecol(red,green,blue);

        //Kreslíme pixely
        putpixel(screen, x % (SCREEN_W-20), y %(SCREEN_H-20) , color);
    }

    return 0;
}
END_OF_MAIN()

Výsledok je tu:. <> allegro - Allegro - Programujeme hry v C ++

Teraz si ukážeme ako kresliť kružnice:

#include<conio.h>
#include <stdlib.h>
#include "allegro.h"
int main(void)
{
 int x,y,radius;
 int red, green, blue, color;
 //inicializujeme  Allegro
 allegro_init();
 //klávesnice
 install_keyboard();

 //generování náhodních čísel
 srand(time(NULL));

 //nastavení rozlišení a modu 640x480
 int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

  if (ret != 0) {
  allegro_message(allegro_error);
  return 1;
 }
 //vykreslení modu na obrazovku
 //samozdřejmě by jste měli znát taky trochu Céčko aby jste věděli formátování které se zde    používá
 textprintf_ex(screen, font, 0, 0, 15, -1,
  "Kreslíme kruznice - %dx%d - Press ESC to quit",
  SCREEN_W, SCREEN_H);
 //čeká na stisk
 while(!key[KEY_ESC])
 {
  //nastavujeme a umístujeme náhodně kružnice
  x = 30 + rand() % (SCREEN_W-60);
  y = 30 + rand() % (SCREEN_H-60);
  radius = rand() % 30;

  //náhodné nastavení barev 0 do 255
  red = rand() % 255;
  green = rand() % 255;
  blue = rand() % 255;

  color = makecol(red,green,blue);
  //draw the pixel
  circle(screen, x, y,radius, color);
 }
 return 0;
}
//zde musí být tato direktiva
END_OF_MAIN()

. <> allegro - Allegro - Programujeme hry v C ++

Tu si nakreslíme horizontálne linky:

#include<conio.h>
#include <stdlib.h>
#include "allegro.h"
int main(void)
{
int y,x1,x2;
int red,green,blue,color;

allegro_init();

install_keyboard();

srand(time(NULL));

int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
if (ret != 0) {
allegro_message(allegro_error);
return 1;
}

textprintf(screen, font, 0, 0, 15,"Kreslime linky - %dx%d - Press ESC to quit",SCREEN_W, SCREEN_H);

while(!key[KEY_ESC])
{

x1 = 10 + rand() % (SCREEN_W-20);
y = 10 + rand() % (SCREEN_H-20);
x2 = 10 + rand() % (SCREEN_W-20);

red = rand() % 255;
green = rand() % 255;
blue = rand() % 255;

color = makecol(red,green,blue);
//kreslíme  horizontální  linky
hline(screen, x1,y,x2,color);

 }
 return 0;
}
END_OF_MAIN()

. <> allegro - Allegro - Programujeme hry v C ++

Samozrejme, keď budete chcieť vertikálnej čiary stačí dať miesto hlina () dať vline () :)

Možno sa pýtate, čo znamená textprintf (). Táto funkcia vypíše reťazec na nami zvolenej súradnice. Má mnoho parametrov.

  • 1. parameter hovorí, do ktorého miesta sa má písať (znovu je to screen - obrazovka).
  • 2. hovorí, akým fontom (typom písma) sa to má vykresliť. (Premenná font oznacuje štandardný systémový font).
  • 3. parameter je súradnice y
  • 4. parameter súradnice x
  • 5. je farba 0 do 255
  • 6. parameter je text, ktorý sa má vypísať. (Klasické "Môj text") atd ...

Použili sa premenné SCREEN_W a SCREEN_H, v ktorých je šírka (width) a výška (height) obrazovky. END_OF_MAIN () - túto direktívu niektoré operačné systémy (napr. Windows ale v niektorých prípadoch i Linux) potrebujú.

Môžete si samozrejme spomaliť vykresľovanie funkcií rest ().

Ted si vykreslíme obdĺžniky:

//Tato funkce nakreslí plný obdélník
void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);

Tu je úplný kod:

#include<conio.h>
#include <stdlib.h>
#include "allegro.h"
int main(void)
{
int y1,y2,x1,x2;
int red,green,blue,color;

allegro_init();

install_keyboard();

srand(time(NULL));

int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
if (ret != 0) {
allegro_message(allegro_error);
return 1;
}

textprintf(screen, font, 0, 0, 15,
"Rect Program - %dx%d - Press ESC to quit",
SCREEN_W, SCREEN_H);

while(!key[KEY_ESC])
{

x1 = 10 + rand() % (SCREEN_W-20);
y1 = 10 + rand() % (SCREEN_H-20);
x2 = 10 + rand() % (SCREEN_W-20);
y2 = 10 + rand() % (SCREEN_H-20);

red = rand() % 255;
green = rand() % 255;
blue = rand() % 255;
color = makecol(red,green,blue);

rectfill(screen,x1,y1,x2,y2,color);

// zpomalíme vykreslování :)
rest(50);
 }
 return 0;
}
END_OF_MAIN()

Kreslíme obdĺžniky:

. <> allegro - Allegro - Programujeme hry v C ++

Ak máte nejaké otázky alebo ste našli nejakú chybu napíšte. Ďakujem za předčtení článku.


 

Predchádzajúci článok
Grafická knižnica Allegro pre C a C ++
Všetky články v sekcii
Allegro - Programujeme hry v C ++
Preskočiť článok
(neodporúčame)
Grafická knižnica Allegro pre C a C ++
Článok pre vás napísal Maxfx
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
C,C++
Aktivity