#include <allegro.h>
#include <jpgalleg.h>
#include <time.h>
#include <string>
#include <iostream>
BITMAP * obrazek = NULL;
BITMAP * bufor = NULL;
BITMAP * kopia = NULL;
FONT * font_pcx = NULL;
BITMAP * fr = NULL;
SAMPLE * muzyka = load_sample( "muz/snd1.wav" );
SAMPLE * muzyka1 = load_sample( "muz/mx.wav" );
int pp[ 109 ];
int px[ 109 ];
int py[ 109 ];
const int a = 90;
int spr;
int mx = 0, my = 0, mb = 0;
int mz;
void init()
{
allegro_init();
jpgalleg_init();
install_mouse();
show_mouse( screen );
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
install_timer();
set_volume( 255, 255 );
srand( time( NULL ) );
bufor = create_bitmap( 800, 600 );
kopia = create_bitmap( 800, 600 );
clear_to_color( bufor, makecol( 0, 99, 99 ) );
fr = create_bitmap( a, a );
};
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
if( mx > 40 && mx < 760 && my > 30 && my < 570 ) mz =(( mx - 40 ) / a +( my - 30 ) / a * 8 ) + 1;
};
int szykowanie_tablic()
{
int n = 0;
int x, y;
for( int j = 0; j < 6; ++j )
for( int i = 0; i < 8; ++i )
{
++n;
x = 40 + i * a;
y = 30 + j * a;
px[ n ] = x;
py[ n ] = y;
pp[ n ] = n;
}
};
void losowe_wczytanie_obrazka()
{
std::string plik = "grafika/g";
int g = rand() % 18 + 1;
std::string tmp;
itoa( g,( char * ) tmp.c_str(), 10 );
std::string str = tmp.c_str();
plik = plik + str;
plik = plik + ".jpg";
obrazek = load_jpg( plik.c_str(), default_palette );
clear_to_color( bufor, makecol( 0, 99, 99 ) );
stretch_blit( obrazek, bufor, 0, 0, 800, 600, 40, 30, 720, 540 );
};
int mieszanie()
{
int p1, p2, nn;
for( int i = 0; i < 48; ++i )
{
p1 = rand() % 48 + 1;
nn = pp[ p1 ];
blit( bufor, fr, px[ p1 ], py[ p1 ], 0, 0, a, a );
p2 = rand() % 48 + 1;
pp[ p1 ] = pp[ p2 ];
pp[ p2 ] = nn;
blit( bufor, bufor, px[ p2 ], py[ p2 ], px[ p1 ], py[ p1 ], a, a );
blit( fr, bufor, 0, 0, px[ p2 ], py[ p2 ], a, a );
p1 = 0;
}
blit( bufor, kopia, 0, 0, 0, 0, 800, 600 );
};
int sprawdzenie()
{
font_pcx = load_font( "grafika/MSS16.pcx", default_palette, NULL );
spr = 0;
for( int i = 0; i < 48; ++i )
if( pp[ i ] == i ) ++spr;
textprintf_ex( bufor, font_pcx, 40, - 2, makecol( 200, 200, 100 ), 812, "Jeszcze %d ", 48 - spr );
};
int podglond()
{
if( mb == 2 )
{
stretch_sprite( bufor, obrazek, 140, 130, 520, 340 );
rect( bufor, 140, 130, 140 + 520, 130 + 340, makecol( 0, 155, 0 ) );
rect( bufor, 141, 131, 140 + 519, 130 + 339, makecol( 0, 255, 0 ) );
}
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
};
int plansza_OK()
{
if( spr == 48 )
{
play_sample( muzyka1, 255, 127, 1000, 0 );
for( int i = 0; i < 300; ++i )
{
blit( obrazek, screen, 0, 300 - i, 0, 300 - i, 800, i * 2 );
rest( 5 );
}
++spr;
}
};
int main()
{
init();
int p1 = 0;
int p2 = 0;
int nn = 0;
szykowanie_tablic();
while( !key[ KEY_ESC ] )
{
losowe_wczytanie_obrazka();
mieszanie();
show_mouse( screen );
while( !key[ KEY_ESC ] )
{
if( spr < 48 )
{
blit( kopia, bufor, 0, 0, 0, 0, 800, 600 );
if( mz > 0 && mb == 1 && nn == 0 )
{
p1 = mz;
nn = pp[ p1 ];
mz = 0;
blit( bufor, fr, px[ p1 ], py[ p1 ], 0, 0, a, a );
}
if( mz > 0 && mb == 0 && nn > 0 )
{
p2 = mz;
pp[ p1 ] = pp[ p2 ];
pp[ p2 ] = nn;
blit( bufor, bufor, px[ p2 ], py[ p2 ], px[ p1 ], py[ p1 ], a, a );
blit( fr, bufor, 0, 0, px[ p2 ], py[ p2 ], a, a );
if( pp[ p2 ] == mz ) play_sample( muzyka, 255, 127, 1000, 0 );
nn = 0;
blit( bufor, kopia, 0, 0, 0, 0, 800, 600 );
}
sprawdzenie();
podglond();
}
plansza_OK();
myszka();
if( spr > 48 && mb == 1 )
{
spr = 0;
break;
}
}
}
readkey();
destroy_bitmap( obrazek );
destroy_bitmap( bufor );
destroy_bitmap( kopia );
destroy_bitmap( fr );
destroy_font( font_pcx );
destroy_sample( muzyka );
destroy_sample( muzyka1 );
allegro_exit();
return 0;
}
END_OF_MAIN()