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

[Allegro C++] kółko i krzyżyk problem

Ostatnio zmodyfikowano 2011-01-31 16:51
Autor Wiadomość
poldek
Temat założony przez niniejszego użytkownika
[Allegro C++] kółko i krzyżyk problem
» 2011-01-31 16:11:57
Witam ,jestem nowicjuszem w programowaniu ALLEGRO i mam problem z góry przepraszam jeśli już taki temat istnieje (przejdę do senna)
nie wiem jak wykombinować żeby za 1-wszym kliknięciem było koło ... a za 2-gim krzyżyk .... proszę o pomoc
nie musi być to gotowiec (wolę sam to zrobić) , proszę tylko o naprowadzenie na trop .... poniżej zamieszczam kod.
PS.Śmiało krytykować co mnie nie zabije to mnie wzmocni i się nauczę na własnych błędach ...
Z góry dzięki
Tyle mam:


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

int mx = 0, my = 0, mb = 0;
void rat()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};

using namespace std;
int main()
{
   
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
   
    BITMAP * o = NULL;
    BITMAP * x = NULL;
    BITMAP * buffor = NULL;
    BITMAP * mapa = NULL;
    //
    buffor = create_bitmap( 640, 480 );
    if( !buffor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
    mapa = load_bmp( "plansza.bmp", default_palette );
    o = load_bmp( "o.bmp", default_palette );
    x = load_bmp( "x.bmp", default_palette );
   
    int b[ 9 ];
    b[ 0 ] = 0;
    b[ 1 ] = 0;
    b[ 2 ] = 0;
    b[ 3 ] = 0;
    b[ 4 ] = 0;
    b[ 5 ] = 0;
    b[ 6 ] = 0;
    b[ 7 ] = 0;
    b[ 8 ] = 0;
    int m[ 8 ];
    int p = 1;
    while( !key[ KEY_ESC ] )
    {
        rat();
        show_mouse( screen );
        masked_blit( mapa, buffor, 0, 0, 0, 0, mapa->w, mapa->h );
        if( 130 <= mx && 20 <= my && mx <= 130 + 85 && my <= 20 + 90 && mb == 1 )
        {
            b[ 0 ] ++;
        }
        if( 230 <= mx && 20 <= my && mx <= 230 + 110 && my <= 20 + 90 && mb == 1 )
        {
            b[ 1 ] ++;
        }
        if( 355 <= mx && 20 <= my && mx <= 355 + 85 && my <= 20 + 90 && mb == 1 )
        {
            b[ 2 ] ++;
        }
       
        if( 130 <= mx && 125 <= my && mx <= 130 + 85 && my <= 125 + 110 && mb == 1 )
        {
            b[ 3 ] ++;
        }
        if( 220 <= mx && 125 <= my && mx <= 220 + 120 && my <= 125 + 110 && mb == 1 )
        {
            b[ 4 ] ++;
        }
        if( 355 <= mx && 125 <= my && mx <= 355 + 85 && my <= 125 + 110 && mb == 1 )
        {
            b[ 5 ] ++;
        }
       
        if( 130 <= mx && 250 <= my && mx <= 130 + 85 && my <= 250 + 120 && mb == 1 )
        {
            b[ 6 ] ++;
        }
        if( 230 <= mx && 250 <= my && mx <= 230 + 110 && my <= 250 + 120 && mb == 1 )
        {
            b[ 7 ] ++;
        }
        if( 350 <= mx && 250 <= my && mx <= 350 + 90 && my <= 250 + 120 && mb == 1 )
        {
            b[ 8 ] ++;
        }
        if( b[ 0 ] > 0 )
        {
            m[ 0 ] = 1;
            masked_blit( o, buffor, 0, 0, 155, 50, o->w, o->h );
        }
        if( b[ 1 ] > 0 )
        {
            m[ 1 ] = 11;
            masked_blit( x, buffor, 0, 0, 260, 50, o->w, o->h );
        }
        if( b[ 2 ] > 0 )
        {
            m[ 2 ] = 2;
            masked_blit( o, buffor, 0, 0, 380, 50, o->w, o->h );
        }
       
        if( b[ 3 ] > 0 )
        {
            m[ 0 ] = 12;
            masked_blit( x, buffor, 0, 0, 150, 160, o->w, o->h );
        }
        if( b[ 4 ] > 0 )
        {
            m[ 0 ] = 3;
            masked_blit( o, buffor, 0, 0, 260, 160, o->w, o->h );
        }
        if( b[ 5 ] > 0 )
        {
            m[ 0 ] = 13;
            masked_blit( x, buffor, 0, 0, 370, 160, o->w, o->h );
        }
       
        if( b[ 6 ] > 0 )
        {
            m[ 0 ] = 4;
            masked_blit( o, buffor, 0, 0, 150, 280, o->w, o->h );
        }
        if( b[ 7 ] > 0 )
        {
            m[ 0 ] = 14;
            masked_blit( x, buffor, 0, 0, 260, 280, o->w, o->h );
        }
        if( b[ 8 ] > 0 )
        {
            m[ 0 ] = 5;
            masked_blit( o, buffor, 0, 0, 370, 280, o->w, o->h );
        }
       
        textprintf_ex( buffor, font, 20, 455, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb );
        blit( buffor, screen, 0, 0, 0, 0, 640, 480 );
        clear_keybuf();
       
    }
   
   
    destroy_bitmap( mapa );
    destroy_bitmap( buffor );
    destroy_bitmap( x );
    destroy_bitmap( o );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-27582
McAffey
» 2011-01-31 16:18:41
Wrzuć też bitmapy żeby się wygodnie sprawdzało, a kod zamieszczaj w tagach
[cpp]...[/cpp]
.
P-27585
DejaVu
» 2011-01-31 16:20:38
Najpierw musisz rozpoznawać kliknięcie - tematów było na to sporo.
C/C++
bool kliknieto = false;
if( !kliknieto && myszka_button == 1 )
{
    kliknieto = true;
    //obsługa kliknięcia
}

if( myszka_button == 0 )
     kliknieto = false;

Potem możesz dodać sobie licznik kliknięć i zrobić:
C/C++
if( nrKlikniecia % 2 == 0 )
{
    //wstaw kółko
} else
{
    //wstaw kżyżyk
}
Oczywiście to Ci sprawy w praktyce nie załatwi, ale z opisu wynika, że to chcesz napisać.
P-27587
poldek
Temat założony przez niniejszego użytkownika
» 2011-01-31 16:20:48
ok
P-27588
malan
» 2011-01-31 16:22:59
(...)za 1-wszym kliknięciem było koło ... a za 2-gim kółko.
Na pewno tak ma być?
P-27589
poldek
Temat założony przez niniejszego użytkownika
» 2011-01-31 16:26:32
Tak tak ma być , ja zrobiłem że jeśli klikniesz na przycisk 1 to ci kółko wyskoczy , a jak klikniesz na przycisk 2 to ci x wyskoczy ale ja chce zrobić podobnie ale nie zależnie od nr przycisków ....
P-27590
McAffey
» 2011-01-31 16:31:33
Malanowi chodziło o to:
(...)za 1-wszym kliknięciem było koło ... a za 2-gim kółko.
P-27592
poldek
Temat założony przez niniejszego użytkownika
» 2011-01-31 16:51:51
ok ok dałem EDITA.... ;p temat do zamknięcia skombinuje ,,cuś" z wykrywaniem kliknięcia.
P-27593
« 1 »
  Strona 1 z 1