#include <allegro.h>
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );
int mapa_x = 0, mapa_y = 0;
float mapa2_x = 0, mapa2_y = 0;
int ludek_x = 240, ludek_y = 160;
int hp_x = 520, hp_y = 70;
int eq_x = 520, eq_y = 110;
int zadanie_x = 60, zadanie_y = 40;
int tablica_x = 20, tablica_y = 20;
int zycie = 100;
BITMAP * zadanie = NULL;
BITMAP * ludek = NULL;
BITMAP * hp = NULL;
BITMAP * pelne_hp = NULL;
BITMAP * eq = NULL;
BITMAP * gui = NULL;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;
BITMAP * tablica = NULL;
short int map[ 18 ][ 30 ] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
void wys_mape()
{
int licznik_x, licznik_y;
for( licznik_x = 0; licznik_x < 20; licznik_x++ )
{
for( licznik_y = 0; licznik_y < 13; 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 );
}
}
};
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 ) );
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;
}
teren = load_bmp( "teren.bmp", default_palette );
ludek = load_bmp( "ludek.bmp", default_palette );
gui = load_bmp( "gui.bmp", default_palette );
hp = load_bmp( "hp.bmp", default_palette );
pelne_hp = load_bmp( "pelne_hp.bmp", default_palette );
eq = load_bmp( "eq.bmp", default_palette );
zadanie = load_bmp( "zadanie.bmp", default_palette );
tablica = load_bmp( "tablica.bmp", default_palette );
while( !key[ KEY_ESC ] )
{
while( speed > 0 )
{
if( zycie > 0 ) {
if(( key[ KEY_RIGHT ] ) &&( mapa2_x < 10 ) ) {
if((( map[ mapa2_y + 4 ][ mapa2_x + 1 + 6 ] ) == 0 ) ||(( map[ mapa2_y + 4 ][ mapa2_x + 1 + 6 ] ) == 2 ) ) {
mapa2_x = mapa2_x + 0.1;
}
else {
mapa2_x = mapa2_x;
}
} else
if(( key[ KEY_LEFT ] ) &&( mapa2_x > 0 ) ) {
if((( map[ mapa2_y + 4 ][ mapa2_x - 1 + 6 ] ) == 0 ) ||(( map[ mapa2_y + 4 ][ mapa2_x - 1 + 6 ] ) == 2 ) ) {
mapa2_x = mapa2_x - 0.1;
}
else {
mapa2_x = mapa2_x;
}
} else
if(( key[ KEY_DOWN ] ) &&( mapa2_y < 5 ) ) {
if((( map[ mapa2_y + 1 + 4 ][ mapa2_x + 6 ] ) == 0 ) ||(( map[ mapa2_y + 1 + 4 ][ mapa2_x + 6 ] ) == 2 ) ) {
mapa2_y = mapa2_y + 0.1;
}
else {
mapa2_y = mapa2_y;
}
} else
if(( key[ KEY_UP ] ) &&( mapa2_y > 0 ) ) {
if((( map[ mapa2_y - 1 + 4 ][ mapa2_x + 6 ] ) == 0 ) ||(( map[ mapa2_y - 1 + 4 ][ mapa2_x + 6 ] ) == 2 ) ) {
mapa2_y = mapa2_y - 0.1;
}
else {
mapa2_y = mapa2_y;
}
}
mapa_x =( int ) mapa2_x;
mapa_y =( int ) mapa2_y;
}
speed--;
}
clear_to_color( bufor, makecol( 150, 150, 150 ) );
wys_mape();
masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
if( map[ mapa_y + 4 ][ mapa_x + 6 ] == 2 ) {
blit( tablica, bufor, 0, 0, tablica_x, tablica_y, tablica->w, tablica->h );
if( key[ KEY_P ] ) {
masked_blit( zadanie, bufor, 0, 0, zadanie_x, zadanie_y, zadanie->w, zadanie->h );
}
}
masked_blit( gui, bufor, 0, 0, 0, 0, gui->w, gui->h );
masked_blit( hp, bufor, 0, 0, hp_x, hp_y, hp->w, hp->h );
masked_blit( eq, bufor, 0, 0, eq_x, eq_y, eq->w, eq->h );
masked_blit( pelne_hp, bufor, 0, 0, hp_x, hp_y, zycie, pelne_hp->h );
textprintf_ex( bufor, font, 510, 50, makecol( 255, 255, 255 ), - 1, "HP: %d / 100", zycie );
if( zycie == 0 )
textprintf_ex( bufor, font, 180, 180, makecol( 255, 255, 255 ), - 1, "Niestety nie zyjesz!" );
blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
}
remove_int( increment_speed );
destroy_bitmap( teren );
destroy_bitmap( ludek );
destroy_bitmap( gui );
destroy_bitmap( hp );
destroy_bitmap( bufor );
destroy_bitmap( zadanie );
allegro_exit();
return 0;
}
END_OF_MAIN();