Po wklejeniu kodu trochę zmienił się układ tablicy map[][]. Oto cały kod moich wypocin:
#include <allegro.h>
#include <cmath>
using namespace std;
BITMAP * bufor = NULL;
BITMAP * teren = NULL;
BITMAP * bohaterka = NULL;
BITMAP * drzewa = NULL;
class Cpostac
{
public:
int pos_x, pos_y;
short int kierunek, klatka;
bool mp;
bool ml;
};
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
int map[ 24 ][ 32 ] =
{
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
};
int map_drzewa[ 12 ][ 16 ] =
{
0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 1, 10, 10, 1, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
};
int mapa_x = 0, mapa_y = 0;
int drzew_x = 0, drzew_y = 0;
void wys_mape()
{
int licznik_x, licznik_y;
for( licznik_x = 0; licznik_x < 16; licznik_x++ )
{
for( licznik_y = 0; licznik_y < 12; 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 );
}
}
};
void wys_drzewa()
{
int licznik_x, licznik_y;
for( licznik_x = 0; licznik_x < 16; licznik_x++ )
{
for( licznik_y = 0; licznik_y < 12; licznik_y++ )
{
masked_blit( drzewa, bufor,
( map_drzewa[ licznik_y + drzew_y ][ licznik_x + drzew_x ] % 4 ) * 40,
( map_drzewa[ licznik_y + drzew_y ][ licznik_x + drzew_x ] / 4 ) * 40,
licznik_x * 40, licznik_y * 40, 40, 50 );
}
}
};
int main()
{
PALETTE pal;
if( allegro_init() != 0 )
return 1;
install_keyboard();
install_timer();
set_color_depth( 24 );
install_int_ex( increment_speed, BPS_TO_TIMER( 80 ) );
if( set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 640, 480, SCREEN_W, SCREEN_H ) != 0 ) {
if( set_gfx_mode( GFX_SAFE, 640, 480, 0, 0 ) != 0 ) {
allegro_message( "Nie moge utworzyc grafiki", allegro_error );
return 1;
}
}
bufor = create_bitmap( SCREEN_W, SCREEN_H );
clear_bitmap( bufor );
set_projection_viewport( 0, 0, SCREEN_W, SCREEN_H );
set_palette( pal );
teren = load_bmp( "kafelki.bmp", 0 );
bohaterka = load_bmp( "bohaterka.bmp", NULL );
drzewa = load_bmp( "drzewa.bmp", default_palette );
Cpostac ludek;
int frame = 0;
ludek.pos_x = 320;
ludek.pos_y = 440;
ludek.kierunek = 0;
ludek.klatka = 0;
while( !key[ KEY_ESC ] )
{
clear_to_color( bufor, makecol( 0, 0, 0 ) );
while( speed > 0 )
{
ludek.kierunek = 0;
if( key[ KEY_LEFT ] ) { ludek.kierunek = 1; ludek.pos_x--; }
if( key[ KEY_RIGHT ] ) { ludek.kierunek = 3; ludek.pos_x++; }
if( key[ KEY_UP ] ) { ludek.kierunek = 2; ludek.pos_y--; }
if( key[ KEY_DOWN ] ) { ludek.kierunek = 4; ludek.pos_y++; }
if(( key[ KEY_RIGHT ] ) &&( mapa_x < 16 ) &&( drzew_x < 16 ) ) { mapa_x = mapa_x + 1; drzew_x = drzew_x + 1; } else
if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) &&( drzew_x > 0 ) ) { mapa_x = mapa_x - 1; drzew_x = drzew_x - 1; } else
if(( key[ KEY_DOWN ] ) &&( mapa_y < 12 ) ) { mapa_y = mapa_y + 1; } else
if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 1; }
speed--;
frame++;
if( frame > 40 ) frame = 0;
}
wys_mape();
wys_drzewa();
masked_blit( bohaterka, bufor, ludek.kierunek * 25, ludek.klatka * 25, ludek.pos_x, ludek.pos_y, 25, 40 );
blit( bufor, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H );
}
destroy_bitmap( bufor );
destroy_bitmap( teren );
allegro_exit();
return 0;
}
END_OF_MAIN();