18 Ağustos 2008 Pazartesi

Allegro'da Sprite oluşturalım !

Önce masaüstünde bir klasör açın ve adını "Allegro Sprite Denemsi" olarak değiştirin.
Sonra DEV C++ editörünü açın, "Yeni Proje" diyerek "Multimedia" bölümünden "Allegro"
yu seçin, masaüstüne açtığınız klasörün içine kaydedin. Son olarak aşığdaki kodları ekleyerek programınızı "Run" komutu ile çalıştırın.

sprite.h dosyası
------------------------------------------------------------------------------------
#ifndef sprite_H_INCLUDED
#define sprite_H_INCLUDED

#include <allegro.h>

enum Yon { _LEFT = 0, _RIGHT = 1, _DOWN = 2, _UP = 3 };

class Sprite
{
      public:
             BITMAP *_image;
             int _x;
             int _y;
             Sprite();
             ~Sprite();
             void Draw(BITMAP*);
             void Move(int,int);
};

#endif

sprite.c dosyası
------------------------------------------------------------------------------------
#include "sprite.h"

Sprite::Sprite()
{
                _image = NULL;
                _x = 0;
                _y = 0;
}

Sprite::~Sprite()
{
                 if(_image != NULL)
                 {
                           destroy_bitmap(_image);
                 }
}

void Sprite::Draw(BITMAP *__buffer)
{
     if(_image != NULL)
     {
         acquire_screen();
         clear_bitmap(__buffer);
         draw_sprite(__buffer, _image, _x, _y);
         release_screen();
     }
}

void Sprite::Move(int yon, int speed)
{
    switch(yon)
    {
        case (int)_LEFT: _x-=speed; break;           
        case (int)_RIGHT: _x+=speed; break;
        case (int)_UP: _y-=speed; break;
        case (int)_DOWN: _y+=speed; break;
    }     
}

main.cpp dosyası
------------------------------------------------------------------------------------
#include <allegro.h>
#include "sprite.h"

BITMAP *buffer;
BITMAP *scr;

void init();
void deinit();

int main() {
 init();

    Sprite *spr;
    spr->_image = scr;
    spr->_x = 100;
    spr->_y = 100;
    
 while (!key[KEY_ESC]) {
  /* put your code here */
  draw_sprite(screen, buffer, 0, 0);
        
  spr->Draw(buffer);
  
  if(key[KEY_LEFT]) spr->Move(0, 2);
  if(key[KEY_RIGHT]) spr->Move(1, 2);
  if(key[KEY_DOWN]) spr->Move(2, 2);
  if(key[KEY_UP]) spr->Move(3, 2);  
 }

 deinit();
 return 0;
}
END_OF_MAIN()

void init() {
 int depth, res;
 allegro_init();
 depth = desktop_color_depth();
 if (depth == 0) depth = 32;
 set_color_depth(depth);
 res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
 if (res != 0) {
  allegro_message(allegro_error);
  exit(-1);
 }

 install_timer();
 install_keyboard();
 install_mouse();
 /* add other initializations here */
 buffer = create_bitmap(640,480);
 scr = load_bitmap("picture.bmp", 0);
}

void deinit() {
 clear_keybuf();
 /* add other deinitializations here */
}

16 Ağustos 2008 Cumartesi

C++ ile yeni bir Allegro denemesi

Allegro ve c++ ikilisi oyun programlama da ne kadar yeterli bilemem fakat bana çok zevkli gelmeye başladı. İşte size yeni bir örnek daha:


14 Ağustos 2008 Perşembe

Allegroyu biraz kolaylaştıralım !

C++ ile Allegro programlarken, programa giriş noktası yani main() fonksiyonunun hemen başında, ilk satırlarında basit ama uğraştıran, birtakım kodlar yazmak zorundayız. Gerçi gerek yok ama sadece kolaylık olması için bu işleri yapan bir sınıf oluşturabilirz. Hem c++ için pratik yapmış oluruz. 

Kodlara gelince:

//İşimizi görecek olan sınıf
settings.h dosyası :

/* Allegro yardımcı sınıf (beta) */
#include <allegro.h>

enum __DEPTH { x8, x15, x16, x24, x32 };
enum __GFX { WINDOWED = 0, FULLSCREEN = 1, ISNULL = 2 };

/* interface */
class Settings
{
    BITMAP *buffer;
    public:
        enum __GFX gfx_mode;  
        enum __DEPTH color_depth;
        bool _install_keyboard;
        bool _install_mouse;
        bool _show_mouse;
        bool buffer_install;
        int buffer_w, buffer_h;
        BITMAP *__mouse;
        const char* window_title;
              
        Settings();
        ~Settings();         
        void install();               
};

Settings::Settings()
{
    gfx_mode = WINDOWED;
    color_depth = x16;
    _install_keyboard = true;
    _install_mouse = true;
    buffer_install = true;
    __mouse = NULL;
    _show_mouse = true;
    buffer_w = 800;
    buffer_h = 600;
    window_title = "Allegro Game";
}

Settings::~Settings()
{
    /* dispose */                    
}

void Settings::install()
{
    allegro_init();  
    
    if(buffer_install == true)
    {
         buffer = create_bitmap(buffer_w, buffer_h);
    }
    
    switch(color_depth)
    {
        case x8: set_color_depth(8); break;
        case x15: set_color_depth(15); break;
        case x16: set_color_depth(16); break;
        case x24: set_color_depth(24); break;
        case x32: set_color_depth(32); break;
    }
    
    switch(gfx_mode)
    {
         case WINDOWED: set_gfx_mode(GFX_AUTODETECT_WINDOWED, buffer_w, buffer_h, 0, 0); break;               
         case FULLSCREEN: set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, buffer_w, buffer_h, 0, 0); break;
         case ISNULL: set_gfx_mode(GFX_AUTODETECT, buffer_w, buffer_h, 0, 0); break;
    }
    
        if(_install_keyboard == true)
        {
            install_keyboard();
        }  
            if(_install_mouse == true)
            {
                install_mouse();
            }
                if(_show_mouse == true)
                {
                    show_mouse(__mouse);
                }
        
        set_window_title(window_title);
}

//Ana program kodlarımız
ve main.cs:

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

Settings gSettings;

void InstallAllegro() {
    gSettings.color_depth = x32;
    gSettings.window_title = "Allegro Denemesi";
    gSettings._show_mouse = false;
    gSettings.buffer_w = 320;
    gSettings.buffer_h = 240;
    gSettings.install();
}

int main()
{
    //Ne kadar kısa demi :)
    InstallAllegro();
    
    while(!key[KEY_ESC]);
    
    allegro_exit();
    return 0;
} END_OF_MAIN();

12 Ağustos 2008 Salı

C++ ve Allegro İle Oyun Programlama

Şimdilik allegro ile pencere oluşturup beyaz renkte bir çizgi çizmeyi göstereceğim.
Ben öğrendikçe de sizlerle paylaşacağım ...

#include <stdlib.h>
#include <allegro.h> //Allegro kütüphanesi

int main(void)
{    
    allegro_init();        //Allegro Hazırlanıyor ...
    install_keyboard();    //Klavye Yükleniyor ...
    install_mouse();       //Fare Yükleniyor ...
    show_mouse(NULL);      //Fare Aktif Hale getiriliyor ...
    
    //Grafik modeu Ayarlanıyor ...
    //FULLSCREEN yazan kısımı WINDOWED olarak değiştiriseniz
    //program pencerede çalışır.
    int ret = set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0); 
    
    //Grafik modu uygulanamıyorsa hata mesajı göster ...
    if(ret != 0)
    {
           allegro_message(allegro_error);
           return 1;
    }
    
    //ESC tuşuna basılmadığı sürece yapılacak işlemler
    while(!key[KEY_ESC])
    {
        //Çizgi çiziliyor x1=0, x2=0, y1=0, y2=0
        //makecol(r, g, b) -> bu kod renk üretir.
        line(screen, 0, 0, 150, 150, makecol(255, 255, 255));
    }
    
    //ESC ye basıldıktan sonra döngü sona erdiğinde allegro dan çık ...
    allegro_exit();
    return 0;
} END_OF_MAIN();