#include <allegro.h>
#include <iostream>
#include<cstdlib>
#include<time.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;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;
short int map[ 11 ][ 11 ] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 < 11; licznik_x++ )
{
for( licznik_y = 0; licznik_y < 11; licznik_y++ )
{
masked_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 );
}
}
};
bool bomb[ 11 ][ 11 ];
int liczba = 0;
void sprawdz_liczbe()
{
if( mouse_b == 1 )
{
liczba = 0;
if(( bomb[( mouse_x / 40 ) + 1 ][( mouse_y / 40 ) ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) - 1 ][( mouse_y / 40 ) ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) + 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) - 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) + 1 ][( mouse_y / 40 ) + 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) - 1 ][( mouse_y / 40 ) + 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) + 1 ][( mouse_y / 40 ) - 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
if(( bomb[( mouse_x / 40 ) - 1 ][( mouse_y / 40 ) - 1 ] == true && bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false ) ) liczba++;
std::cout << liczba;
}
}
void wypisz_liczbe()
{
if( mouse_b == 1 & bomb[( mouse_x / 40 ) ][( mouse_y / 40 ) ] == false && mouse_x / 40 > 0 && mouse_x / 40 < 10 && mouse_y / 40 > 0 && mouse_y / 40 < 10 )
{
switch( liczba )
{
case 1:
{
map[( mouse_y / 40 ) ][( mouse_x / 40 ) ] = 4;
break;
}
case 2:
{
map[( mouse_y / 40 ) ][( mouse_x / 40 ) ] = 2;
break;
}
}
}
}
int main()
{
allegro_init();
install_mouse();
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 440, 440, 0, 0 );
install_timer();
install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) );
BITMAP * bufor1 = NULL;
BITMAP * bombka = NULL;
bufor = create_bitmap( 440, 440 );
bombka = load_bitmap( "grafika/bomba.bmp", default_palette );
int i, j;
for( i = 0; i < 11; i++ )
{
for( j = 0; j < 11; j++ )
{
bomb[ i ][ j ] = false;
}
}
int x, y;
srand(( unsigned ) time( NULL ) );
for( i = 0; i < 10; i++ )
{
x = rand() % 9 + 1;
y = rand() % 9 + 1;
bomb[ x ][ y ] = true;
}
teren = load_bmp( "grafika/teren.bmp", default_palette );
clear_to_color( bufor, makecol( 150, 150, 150 ) );
show_mouse( screen );
unscare_mouse();
int miejsce_x[ 10 ] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
int miejsce_y[ 10 ] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
int q = 0, w = 0;
for( i = 0; i < 10; i++ )
{
for( j = 0; j < 10; j++ )
{
if( bomb[ i ][ j ] == true )
{
miejsce_y[ q ] = i;
q++;
miejsce_x[ w ] = j;
w++;
}
}
}
for( i = 0; i < 10; i++ ) std::cout << miejsce_x[ i ] << "," << miejsce_y[ i ] << " ";
while( !key[ KEY_ESC ] )
{
wys_mape();
for( i = 0; i < 10; i++ )
{
if( mouse_x > miejsce_x[ i ] * 40 && mouse_x <( miejsce_x[ i ] + 1 ) * 40 && mouse_y > miejsce_y[ i ] * 40 && mouse_y <( miejsce_y[ i ] + 1 ) * 40 && mouse_b == 1 )
{
map[( mouse_y / 40 ) ][( mouse_x / 40 ) ] = 3;
}
}
blit( bufor, screen, 0, 0, 0, 0, 440, 440 );
sprawdz_liczbe();
wypisz_liczbe();
}
remove_int( increment_speed );
destroy_bitmap( teren );
destroy_bitmap( bufor );
allegro_exit();
return 0;
}
END_OF_MAIN();