Może lepiej jak dam cały kod [jest trochę poplątany i wszystko mam zamiar poprawić jak zainstaluje już mysz]
Tak wszystko jest zrobione, próbowałem też bez swojego kursora to wyskakuje to samo.
Jak usunie install_mouse to gra się normalnie włącza więc nie wiem w czym problem
#include <allegro.h>
class Cpostac
{
public:
int x,y;
short int kierunek, klatka;
};
// Zmienna naszej klasy
Cpostac ludek;
// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);
// Zmienna
int mapa_x = 0, mapa_y = 0;
BITMAP *bufor = NULL;
BITMAP *ludekb = NULL;
BITMAP *teren = NULL;
FONT * font_pcx = NULL;
BITMAP *kursor = NULL;
// DEFINICJA MAPY
short int map[15][20] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
//kursor
int mx = 0, my = 0, mb = 0;
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
};
//WYsiwetalnie mapy
void wys_mape()
{
int licznik_x, licznik_y;
for (licznik_x = 0; licznik_x < 100 ; licznik_x++)
{
for (licznik_y = 0; licznik_y < 100 ; licznik_y++)
{
blit(teren,bufor,
(map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 32,
(map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 32,
licznik_x * 32,licznik_y * 32,32,32);
}
}
};
// Funkcja G³ówna
int main()
{
install_mouse();
show_mouse( bufor );
set_mouse_sprite( kursor );
unscare_mouse();
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,640,480,0,0);
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(80));
// Tworzenie bufora
bufor = create_bitmap(640,480);
// £adowanie grafiki
ludekb = load_bmp("ludek1.bmp",default_palette);
teren = load_bmp("teren.bmp",default_palette);
font_pcx = load_font("arial_16.pcx",default_palette, NULL);
kursor = load_bitmap( "kursor.bmp", default_palette);
// Ustalanie pocz¹tkowej pozycji ludzika
int frame = 0;
ludek.x = 100;
ludek.y = 100;
ludek.klatka = 0;
ludek.kierunek = 0;
while( !key[KEY_ESC])
{
while( speed > 0)
{
ludek.kierunek = 0;
if( key[KEY_LEFT]) { ludek.kierunek = 4; ludek.x-=2; }
if( key[KEY_RIGHT]) { ludek.kierunek = 2; ludek.x+=2; }
if( key[KEY_UP]) { ludek.kierunek = 1; ludek.y-=2; }
if( key[KEY_DOWN]) { ludek.kierunek = 3; ludek.y+=2; }
speed--;
frame++;
if( frame > 40) frame=0;
}
// Czyszczenie bufora
clear_to_color(bufor, makecol(150,150,150));
//Wyswietl mape
wys_mape();
// Sterowanie animacj¹
if( frame<20) { ludek.klatka = 0;}
else if( frame>=20 && frame<40) { ludek.klatka = 1; }
//Wyœwietlanie ludzika
textprintf_ex(bufor,font_pcx, 8,40,makecol(255,0,0),-1,"ludek.x=%4d,ludek.y=%4d ",ludek.x,ludek.y);
masked_blit( ludekb, bufor, ludek.kierunek*32 ,ludek.klatka*32 ,ludek.x, ludek.y, 32,32);
blit( bufor, screen, 0,0,0,0, 640,480);
}
// Usuwanie wszystkiego z pamiêci.
remove_int( increment_speed);
destroy_bitmap(ludekb);
destroy_bitmap(bufor);
destroy_bitmap( kursor );
allegro_exit();
return 0;
}
END_OF_MAIN();