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

[Allegro] platformówka.

Ostatnio zmodyfikowano 2009-08-12 16:22
Autor Wiadomość
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-08-11 14:44:03
Oto kod całej gry.


C/C++
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;
   
};

#include <allegro.h>

volatile long speed = 0;

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

LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );



volatile long szybkosc = 0;

void increment_szybkosc()
{
    szybkosc++;
}
END_OF_FUNCTION( increment_szybkosc );

LOCK_VARIABLE( szybkosc );
LOCK_FUNCTION( increment_szybkosc );


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( 255, 255, 255 ) );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 35 ) );
    install_int_ex( increment_szybkosc, BPS_TO_TIMER( 200 ) );
   
   
    BITMAP * rura = NULL;
    BITMAP * ludek = NULL;
    BITMAP * ziemia = NULL;
    BITMAP * bufor = NULL;
   
    bufor = create_bitmap( 800, 600 );
   
    rura = load_bmp( "rura.bmp", default_palette );
    ludek = load_bmp( "ludek.bmp", default_palette );
    ziemia = load_bmp( "ziemia.bmp", default_palette );
   
   
   
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie moge zaladowac bufora" );
        allegro_exit();
        return 0;
    }
    if( !ludek &&!ziemia )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "niemożna załadowac obrazka" );
        allegro_exit();
        return 0;
    }
   
   
    int ludek_x = 100, ludek_y = 100;
    int rura_x = 400, rura_y = 440;
   
    const float poziomgruntu = 435; //zmienna na jakjej wysokości porusz sie ludek
    static float predkosc = 0; //predkosc poruszania
    static float predkoscx = 0;
   
    while( !key[ KEY_ESC ] )
    {
        while( szybkosc > 0 )
        {
            if( key[ KEY_LEFT ] ) ludek_x--;
           
            if( key[ KEY_RIGHT ] ) ludek_x++;
           
            while( speed > 0 )
            {
                //********************************************
                if( key[ KEY_UP ] && key[ KEY_RIGHT ] && ludek_y == poziomgruntu ) //*
                { //   *
                    //      *
                    predkosc =- 10; //
                    predkoscx =- 2; //
                } //
                ludek_y += predkosc;
                ludek_x -= predkoscx; //         * funkcja odpowiadająca za skok
                predkosc += 0.3; //          
                if( ludek_y >= poziomgruntu ) //       
                { //
                    predkosc = 0;
                    predkoscx = 0; //     *
                    ludek_y = poziomgruntu; //  
                }
                if( key[ KEY_UP ] && key[ KEY_LEFT ] && ludek_y == poziomgruntu )
                { //   *
                    //      *
                    predkosc =- 10; //
                    predkoscx =+ 2; //
                } //
                ludek_y += predkosc;
                ludek_x -= predkoscx; //         * funkcja odpowiadająca za skok
                predkosc += 0.3; //          
                if( ludek_y >= poziomgruntu ) //       
                { //
                    predkosc = 0;
                    predkoscx = 0; //     *
                    ludek_y = poziomgruntu; //  
                }
                speed--;
            }
            //*
            //*******************************************
           
            if( kolizja( ludek_x, ludek_y, 100, 100, rura_x, rura_y, 104, 104 ) )
            { }
           
           
            szybkosc--;
        }
       
       
       
        clear_to_color( bufor, makecol( 111, 133, 255 ) );
        masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
       
        blit( ziemia, bufor, 0, 0, 0, 526, ziemia->w, ziemia->h );
        masked_blit( rura, bufor, 0, 0, rura_x, rura_y, rura->w, rura->h );
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
       
    }
   
    destroy_bitmap( ludek );
    destroy_bitmap( ziemia );
    destroy_bitmap( bufor );
    destroy_bitmap( rura );
   
    readkey();
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-9314
DejaVu
» 2009-08-11 14:50:32
Algorytm kolizji z kursu EasyKoder'a nie najlepiej działał jeśli mnie pamięć nie myli. Użyj tej funkcji, którą daję prawie w każdym temacie związanym z kolizją http://archiwum.ddt.pl/?TextId=1660.
P-9315
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-08-11 15:38:09
Sprawdziłem czy tekst się wyświetli gdy dojdzie  do kolizji, tekst sie wyświetlił znaczy, że kolizja działa.
Jednak moje pytanie jest co zrobić by ludek nie mógł przechodzić przez rure jak duch jakiś,

Jaką funkcje napisać, że gdy dojdzie do kolizji ludek nie może
przejść przez rure tylko może ją przeskoczyć bądź na niej stanąć.

ściągijcie grę to zobaczycie o co mi chodzi
(link w pierwszym poście)

 
P-9317
malan
» 2009-08-11 16:32:42
Odpowiedz sobie na pytanie: Jak ludek powinien się zachować kiedy dojdzie do rury? i spójrz na tą linijkę:
C/C++
if( kolizja( ludek_x, ludek_y, 100, 100, rura_x, rura_y, 104, 104 ) )
{
    // podpowiem, że tu powinieneś coś wstawić ;)
}
P-9321
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-08-11 16:37:59
we wszystkich poprzednich postach chodziło mi właśnie oto co tam wstawić.
NIE WIEM dlatego się pytam.
Proszę o odpowiedź

Z góry dziękuje . 
P-9322
malan
» 2009-08-11 16:40:14
Heh... kolego- idziesz sobie ulicą, dochodzisz do przejście, włącza się czerwone światło- co robisz ?
P-9323
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-08-11 16:44:20
Staję!

ok to już napisałem ale co zrobić żeby ludek stał na rurze i mógł na niej chodzić skakać itd,
P-9324
malan
» 2009-08-11 16:52:51
Tworzysz kolejną kolizję. Ja bym sprawdzał najpierw, czy ludek skoczył, jeśli tak to czy po skoku jego pozycja = najwyższy punkt rury, jeśli tak to jego pozycja = najwyższy punkt rury, jeśli nie to pozycja = pozycja 'na ziemi'.
P-9325
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona