eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[Allegro] Kolizja myszki z obiektem › [Allegro] Kolizja myszki z obiektem
  • Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
    From: krzysztof posłuszny <w...@w...pl>
    Newsgroups: pl.comp.programming
    Subject: [Allegro] Kolizja myszki z obiektem
    Date: Wed, 8 Jul 2009 11:02:53 +0200
    Organization: http://onet.pl
    Lines: 149
    Message-ID: <h31nbt$klg$1@news.onet.pl>
    NNTP-Posting-Host: 80.54.93.2
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Trace: news.onet.pl 1247043773 21168 80.54.93.2 (8 Jul 2009 09:02:53 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Wed, 8 Jul 2009 09:02:53 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5512
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
    X-Antivirus: avast! (VPS 090707-0, 2009-07-07), Outbound message
    X-Antivirus-Status: Clean
    Xref: news-archive.icm.edu.pl pl.comp.programming:182630
    [ ukryj nagłówki ]

    W programie mam wczytany obrazek który porusza się losowo po ekranie i jako
    kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
    najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
    wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym rady.
    Siedzę już nad tym parę dni. Pomoże mi ktoś rozwiązać ten problem? W
    załaczeniu przesyłam kod programu.

    #include <allegro.h>
    #include <cstdlib>
    volatile long speed = 0;

    void increment_speed()
    {
    speed++;
    }
    END_OF_FUNCTION(increment_speed);

    LOCK_VARIABLE(speed);
    LOCK_FUNCTION(increment_speed);
    class Cpostac
    {
    public:
    short int x,y;
    short int s,w;
    };
    Cpostac cel1,kursor1;
    bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
    {
    if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
    if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
    else return false;
    };

    BITMAP *kursor;

    void laduj_kursor()
    {
    kursor = load_bitmap("celownik.bmp",NULL);
    if (!kursor)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("Nie moge zaladowac grafiki ( kursor )");
    allegro_exit();
    }
    };

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

    }
    };
    int main()
    {
    allegro_init();
    install_keyboard();
    set_color_depth(16);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
    clear_to_color(screen, makecol(128,128,128));
    install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,"");
    install_timer();
    install_int_ex(increment_speed, BPS_TO_TIMER(100));
    set_volume(255,255);
    //Tytuł okienka
    set_window_title("GRA DANIELA");
    laduj_kursor();
    install_mouse();
    show_mouse(screen);
    set_mouse_sprite(kursor);
    unscare_mouse();

    SAMPLE *dzwiek = NULL;
    BITMAP *daniel = NULL;
    BITMAP *celownik=NULL;
    BITMAP *bufor = NULL;
    BITMAP *cel=NULL;
    bufor = create_bitmap(800,600);
    // Ładowanie postaci
    cel1.x=rand()%500; cel1.y=rand()%500; cel1.s=64; cel1.w=67;
    kursor1.x=0; kursor1.y=0; kursor1.s=40; kursor1.w=40;

    daniel = load_bmp("daniel.bmp",default_palette);
    if (!daniel)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("nie mogę załadować obrazka Daniel !");
    allegro_exit();
    return 0;
    }
    blit( daniel, screen, 0,0, 0,0, daniel->w, daniel->h);
    readkey();
    dzwiek = load_sample("muzyka.wav");
    if (!dzwiek)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("nie mogę załadować dzwieku !");
    allegro_exit();
    return 0;
    }
    play_sample(dzwiek, 255,127,1000,1);
    cel = load_bmp("cel.bmp",default_palette);
    blit( cel, screen, 0,0, 0,0, cel->w, cel->h);
    while (!key[KEY_ESC])
    {
    //Zdobyte punkty
    int licznik=0;

    myszka();
    while( speed > 0)
    {
    cel1.x=rand()%500;
    cel1.y=rand()%500;
    speed--;
    }
    clear_to_color(bufor, makecol(0,0,0));
    masked_blit(cel, bufor, 0,0,cel1.x, cel1.y,cel1.s,cel1.w);
    //masked_blit( kursor, bufor, 0,0, kursor1.x, kursor1.y, kursor1.s,
    kursor1.w);
    // Wyswietlanie napisu jeśli kolizja
    if(kolizja( cel1.x,cel1.y,cel1.s, cel1.w, kursor1.x, kursor1.y, kursor1.s,
    kursor1.w)==true)
    { textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(255,200,255),-1); }
    //Odmierzanie czasu w sekundach
    int czas=clock()/1000;
    textprintf_ex(bufor,font,20,40,makecol(200,200,200),
    -1,"CZAS GRY =
    %d",czas,0,0);
    textprintf_ex(bufor,font,20,20,makecol(200,200,200),
    -1,"ZDOBYTE PUNKTY =
    %d",licznik,0,0);
    blit( bufor,screen, 0,0,0,0, 800,600);
    rest(600);
    }
    destroy_bitmap(daniel);
    destroy_bitmap(bufor);
    destroy_bitmap(kursor);
    destroy_bitmap(cel);
    stop_sample(dzwiek);

    allegro_exit();
    return 0;
    }
    END_OF_MAIN();

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: