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

[ALLEGRO] 'Odcisniety' klawisz myszki

Ostatnio zmodyfikowano 2010-11-24 23:51
Autor Wiadomość
_szelest_
Temat założony przez niniejszego użytkownika
[ALLEGRO] 'Odcisniety' klawisz myszki
» 2010-11-23 21:42:24
Witam pisze program który ma symulować pracę bankomatu. Utknąłem na podawaniu hasła, tj. zczytuje mi znak nie raz a tyle razy jak wcisniety jest klawisz myszki. Jak to poprawić, np aby zczytywal kiedy klawisz zostanie odcisniety??

C/C++
#include <allegro.h>

int main()
{
    int mx = 0, my = 0, mb = 0;
    bool flaga = true;
   
    BITMAP * karta = NULL;
    BITMAP * karta_wl = NULL;
    BITMAP * kasa = NULL;
    BITMAP * kasa_z = NULL;
    BITMAP * paragon = NULL;
    BITMAP * paragon_z = NULL;
    BITMAP * pulpit = NULL;
   
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 1280, 800, 0, 0 );
    clear_to_color( screen, makecol( 255, 255, 255 ) );
    show_mouse( screen );
    unscare_mouse();
    text_mode( - 1 );
    FONT * font1 = load_font( "nowa.pcx", NULL, NULL );
   
    karta = load_bitmap( "karta.bmp", default_palette );
    if( !karta )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    karta_wl = load_bitmap( "karta_wl.bmp", default_palette );
    if( !karta_wl )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    kasa = load_bitmap( "kasa.bmp", default_palette );
    if( !kasa )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    kasa_z = load_bitmap( "kasa_z.bmp", default_palette );
    if( !kasa_z )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    paragon = load_bitmap( "paragon.bmp", default_palette );
    if( !paragon )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    paragon_z = load_bitmap( "paragon_z.bmp", default_palette );
    if( !paragon_z )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
    pulpit = load_bitmap( "pulpit.bmp", default_palette );
    if( !pulpit )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac pliku z obrazkiem !\n" );
        allegro_exit();
        return 0;
    }
   
   
   
   
    blit( pulpit, screen, 0, 0, 0, 0, pulpit->w, pulpit->h );
    textout( screen, font1, "Witamy w sieci bankomatow", 165, 110, 0 );
    textout( screen, font1, "firmy SZELEST COMPANY", 165, 160, 0 );
    textout( screen, font1, "Prosze podac numer karty", 180, 280, 0 );
    /*
    int x=0;
    int xx=0;
    while(!(mx> 250 && mx<310 && my>642 && my<697 && mb==1 )) //klawisz ok
   
    {
        mx = mouse_x;
        my=mouse_y;
        mb=mouse_b;
      
       if(mx> 45 && mx<105 && my>572 && my<632 &&mb==1 )  //klawisz numer 1
         
          textout(screen,font1,"*",300+x,350,0);
   
      if(mx> 115 && mx<175 && my>572 && my<632 &&mb==1 )  //klawisz numer 2
      textout(screen,font1,"*",301+x,350,0);
     
        }
   
   
       destroy_bitmap(karta);
       destroy_bitmap(karta_wl);
       destroy_bitmap(kasa);
       destroy_bitmap(kasa_z);
       destroy_bitmap(paragon);
       destroy_bitmap(paragon_z);
       destroy_bitmap(pulpit);
   
   
      readkey();
      allegro_exit();
      return 0;
    }
    END_OF_MAIN()
    [/cpp]
    */
P-24411
malan
» 2010-11-23 22:16:55
Najlepiej by było, gdybyś spakował cały projekt (wraz z obrazkami) i wrzucił na jakiś serwer. Łatwiej wtedy będzie zobaczyć, gdzie jest błąd, tzn. na czym on polega.
Kod wstaw w znaczniki [cpp] [/cpp].
P-24415
DejaVu
» 2010-11-23 22:43:04
C/C++
while(...)
{
   
    if( !bylo_wcisniete( 'a' ) && jest_wcisniete( 'a' ) )
    {
        nowe_wcisniete( 'a' );
        napisz( 'a' );
    }
    //...
    byly_wcisniete = nowe_wcisniete;
    nowe_wcisniete.clear();
}
Jak rozszyfrujesz powyższy kod to będziesz wiedział jak rozwiązać problem.
P-24417
_szelest_
Temat założony przez niniejszego użytkownika
» 2010-11-23 23:27:27
ogólnie to całość kojarzę, jednak nie bardzo wiem jak w moim przypadku ma wyglądać
!bylo_wcisniete( 'a' )

tutaj link do calego projektu:

http://www.speedyshare.com/files/25348389/allegro1.rar
P-24420
DejaVu
» 2010-11-24 00:00:21
Funkcja bylo_wcisniete('a') sprawdza czy w tablicy byly_wcisniete jest ustawiona flaga wciśniętego klawisza 'a'. Możliwości implementacyjnych opisanego rozwiązania masz wiele - jest tylko kwestia adaptacji tego co przedstawiłem do posiadanej wiedzy przez danego programistę.
P-24421
malan
» 2010-11-24 23:51:25
Tak jak napisał już DejaVu, jeśli zaimplementujesz ten prosty algorytm sprawdzający wciśnięte klawisze to rozwiążesz problem.
Od siebie dodam tylko jeszcze, że fajnie by było gdybyś zapoznał się ze strukturami, bo nadają się wręcz idealnie do Twojego programu :).
P-24480
« 1 »
  Strona 1 z 1