marianekA Temat założony przez niniejszego użytkownika |
Allegro - zamiana parami dwóch danych w tablicy za pomocą myszki » 2012-01-06 20:29:10 Więc tak... mam diagram z 48 pól i tablicę z numerami tych pól. Klikając myszka parami na dwa wybrane pola próbuję zamieniać ich wartości w tablicy ale mi coś nie wychodzi. Tylko pierwsza zamiana jest OK. w kolejnych zawsze jako pierwsza pojawia mi się wartość z pierwszego wyboru, druga jest prawidłowa. Kombinuję już od rana i się poddaje #include <allegro.h> #include <conio.h>
BITMAP * tlo = NULL; int pp[ 50 ]; int px[ 50 ]; int py[ 50 ]; int a = 90; int mx = 0, my = 0, mb = 0; int mz; void init() { allegro_init(); install_mouse(); show_mouse( screen ); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 0, 88, 88 ) ); }; void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
void texty_pomocnicze() { int k = 715; textprintf_ex( screen, font, 30, 5, makecol( 200, 200, 200 ), k, "px = %d ", px[ mz ] ); textprintf_ex( screen, font, 30, 15, makecol( 200, 200, 200 ), k, "py = %d ", py[ mz ] ); textprintf_ex( screen, font, 130, 10, makecol( 200, 200, 100 ), k, "pole (mz)= %d ", mz ); };
int main() { init(); show_mouse( screen ); int x, y; int n = 0; int p1 = 0; int p2 = 0; int nn = 0; 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; rect( screen, x, y, x + a, y + a, makecol( 0, 0, 0 ) ); } while( !key[ KEY_ESC ] ) { myszka(); texty_pomocnicze(); mz = 0; if( mx > 40 && mx < 760 && my > 30 && my < 570 ) mz =(( mx - 40 ) / a +( my - 30 ) / a * 8 ) + 1; if( mz > 0 && mb == 1 && nn == 0 ) { p1 = mz; nn = pp[ p1 ]; } if( mz > 0 && mz != p1 && mb == 1 && nn > 0 ) { p2 = mz; pp[ p1 ] = pp[ p2 ]; pp[ p2 ] = nn; p1 = 0; p2 = 0; nn = 0; } n = 0; for( int j = 0; j < 6; ++j ) for( int i = 0; i < 8; ++i ) { ++n; textprintf_ex( screen, font, 50 + i * a, 44 + j * a, makecol( 200, 200, 100 ), 715, " %d ", pp[ n ] ); } } readkey(); destroy_bitmap( tlo ); allegro_exit(); return 0; } END_OF_MAIN();
chodzi mi o tę części kodu Pewnie nie jasno wytłumaczyłem ale dla Was to będzie pestka.
if( mz > 0 && mb == 1 && nn == 0 ) { p1 = mz; nn = pp[ p1 ]; } if( mz > 0 && mz != p1 && mb == 1 && nn > 0 ) { p2 = mz; pp[ p1 ] = pp[ p2 ]; pp[ p2 ] = nn; p1 = 0; p2 = 0; nn = 0; }
|