Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Allegro - zamiana parami dwóch danych w tablicy za pomocą myszki

Ostatnio zmodyfikowano 2012-01-09 21:06
Autor Wiadomość
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
C/C++
#include <allegro.h>
#include <conio.h>

BITMAP * tlo = NULL;
int pp[ 50 ];
int px[ 50 ]; //wspolrzedne poziome pola
int py[ 50 ]; //wspolrzedne pionowe pola
int a = 90; // stala zmienna - wielkosc pola
int mx = 0, my = 0, mb = 0; //zmienne dla myszki
int mz; //zone wskaznika nyszki
void init()
{
    allegro_init();
    install_mouse();
    show_mouse( screen );
    install_keyboard();
    set_color_depth( 16 ); // paleta kolorów
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); //rozmiar ekranu
    clear_to_color( screen, makecol( 0, 88, 88 ) ); // kolor tla ekranu
   
};
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; //wspolrzedne pol diagramu
    int n = 0; //licznik pol
    int p1 = 0; //
    int p2 = 0;
    int nn = 0;
    // --- wstawienie danych do tablic i rysowanie diagramu ---
    for( int j = 0; j < 6; ++j )
    for( int i = 0; i < 8; ++i )
    {
        ++n;
        x = 40 + i * a; // wspolrzedna poziome pola
        y = 30 + j * a; // wspolrzedne pionowe pola
        px[ n ] = x; //  wstawienie do tablicy
        py[ n ] = y; //  wstawienie do tablicy
        pp[ n ] = n; //  sztawienie do tablicy
        rect( screen, x, y, x + a, y + a, makecol( 0, 0, 0 ) ); //wyrysowanie pol
    }
    //-------------------------------------------------------
    while( !key[ KEY_ESC ] )
    {
        myszka();
        texty_pomocnicze();
        //--- strefy pol na których jest wskaznik myszki  ---
        mz = 0;
        if( mx > 40 && mx < 760 && my > 30 && my < 570 ) mz =(( mx - 40 ) / a +( my - 30 ) / a * 8 ) + 1;
        //---------------------------------------------------
        //=== zamiama dwoch danych w tablicy pp[] ==========
       
        if( mz > 0 && mb == 1 && nn == 0 )
        {
            p1 = mz; // pierwszy indeks z tablicy do zamiany
            nn = pp[ p1 ]; // wartosc tego indeksu
        }
        if( mz > 0 && mz != p1 && mb == 1 && nn > 0 )
        {
            p2 = mz; // drugi indeksz tablicy do zamiany
            pp[ p1 ] = pp[ p2 ]; // wartosc drugiego indeksu do pierwszego
            pp[ p2 ] = nn; // pierwszego indeksu do drugiego
            p1 = 0;
            p2 = 0;
            nn = 0;
        }
        //===================================================
       
        // ----- pokaz tablice pp -----------
        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.
C/C++
//=== zamiama dwoch danych w tablicy pp[] ==========

if( mz > 0 && mb == 1 && nn == 0 )
{
    p1 = mz; // pierwszy indeks z tablicy do zamiany
    nn = pp[ p1 ]; // wartosc tego indeksu
}
if( mz > 0 && mz != p1 && mb == 1 && nn > 0 )
{
    p2 = mz; // drugi indeksz tablicy do zamiany
    pp[ p1 ] = pp[ p2 ]; // wartosc drugiego indeksu do pierwszego
    pp[ p2 ] = nn; // pierwszego indeksu do drugiego
    p1 = 0;
    p2 = 0;
    nn = 0;
} //=================
P-47439
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-06 21:34:17
dodam jeszcze: jak w pierwszym warunku dam mb==1 a w drugim mb==2 to działa ale jest niewygodne chcę by działało w obu na lewy przycisk myszki.
P-47442
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-09 21:06:47
jak zwykle rzeczy proste są najtrudniejsze...
już sobie poradziłem, nikt nie pomógł - pewnie było za trudne
P-47775
« 1 »
  Strona 1 z 1