Witam
Mam problem. Jestem początkującym w Allegro. Coś namieszałem i teraz nie wiem jak się za to zabrać. Chciałem żeby postać "ludek wyświetlała się na "mapie" i poruszała. W czasie ruchu w którąkolwiek stronę mapa się powinna przesuwać w tą ów stronę. W tej chwili jak się wyświetli mapka i postać to już tylko mapa się przesuwa a ten ludzik już nie. Aha i jeszcze jak zrobić żeby ta mapka wyświetlała się na pożądanej rozdzielczości, skoro mam ustawione 640x480. To co jest nie tak?
Proszę o pomoc.

#include <allegro.h>

// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);

// Zmienne potrzebne do mapy
int ludek_x = 100, ludek_y = 100;
int mapa_x = 0, mapa_y = 0;
int frame = 0;
BITMAP *teren = NULL;
BITMAP *bufor = NULL;
BITMAP *ludek = NULL;
BITMAP *ludek1 = NULL;

// DEFINICJA MAPY
short int map[10][20] = 
{ 
      15,15,15,15,15, 7,10,10,10,10,10,10, 6,15,15,15,15,15,15,15,
      15,15,15,15,15, 4, 9,10,10,10, 8, 3, 5,15, 0, 2, 2, 2, 1,15,
       2, 1,15,15,15,15, 7,10,10,10, 6,15,15,15, 7,10,10,10, 6,15,
      10, 6,15,15,15,15, 4, 9,10,10, 6,15,15,15, 4, 3, 3, 3, 5,15,
      10,12, 2, 1,15,15,15, 7,10, 8, 5,15,15,15,15,15,15,15,15,15,
      10,10,10, 6,15,15,15, 4, 3, 5,15,15,15,15,15,15,15, 0, 2, 2,
      10,10,10, 6,15,15,15,15,15,15,15,15,15,15, 0, 2, 2,13,10,10,
       3, 3, 3, 5,15,15,15,15,15,15,15,15,15,15, 7,10,10,10, 8, 3,
      15,15,15,15,15, 0, 1,15,15,15,15,15, 0, 2,13,10,10,10, 6,15,
      15,15,15,15,15, 4, 5,15,15,15,15,15, 7,10,10,10,10,10, 6,15
};

// Funkcja wyświetlająca mapę: 
void  wys_mape()
{
      int licznik_x, licznik_y;
      for (licznik_x = 0; licznik_x < 10 ; licznik_x++)
      {
      for (licznik_y = 0; licznik_y < 5 ; licznik_y++)
      {                    
           blit(teren,bufor,
           (map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 40, 
           (map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 40,
           licznik_x * 40,licznik_y * 40,40,40);  
      }
      }     
};

//Fukcja ludek
void wys_ludek()
{
	masked_blit( ludek, screen, 0, 0, 100, 100, ludek->w, ludek->h );
   
}


// Funkcja Główna
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0);
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(40));

// Tworzenie bufora
bufor = create_bitmap(640,480);
if (!bufor)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("Nie mogę utworzyć bufora !");
allegro_exit();
return 0;
}

// Ładowanie grafiki
teren = load_bmp("teren.bmp",default_palette);
ludek = load_bmp( "ludek.bmp", default_palette );
ludek1 = load_bmp( "ludek1.bmp", default_palette );


void wys_ludek();
 readkey();

 while( !key[ KEY_ESC ] )
{
	while(speed > 0){

    if( key[ KEY_LEFT ] ) ludek_x--;
    
    if( key[ KEY_RIGHT ] ) ludek_x++;
    
    if( key[ KEY_UP ] ) ludek_y--;
    
    if( key[ KEY_DOWN ] ) ludek_y++;
	}
 }
while( !key[KEY_ESC])
{
while( speed > 0)
{
// SCROLLOWANIE MAPY 
           if((key[KEY_RIGHT]) && (mapa_x < 10)){ mapa_x = mapa_x + 1; } else
           if((key[KEY_LEFT]) && (mapa_x > 0)){ mapa_x = mapa_x - 1;} else
           if((key[KEY_DOWN]) && (mapa_y < 5)){ mapa_y = mapa_y + 1; } else
           if((key[KEY_UP]) && (mapa_y > 0)){ mapa_y = mapa_y - 1; }    
speed--;



}

// Czyszczenie bufora

 clear_to_color(bufor, makecol(150,150,150));

// Wyświetlanie mapy
 wys_mape();



blit( bufor, screen, 0,0,0,0, 640,480);
}
// Usuwanie wszystkiego z pamięci.
remove_int( increment_speed);
destroy_bitmap(teren);
destroy_bitmap(bufor);
destroy_bitmap(ludek);
destroy_bitmap(ludek1);
allegro_exit();
return 0;
}

END_OF_MAIN();