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

[Allegro] O kolizjach więcej

Ostatnio zmodyfikowano 2008-09-07 17:37
Autor Wiadomość
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-02 21:11:38
niestety do tych kolizji trzeba znać rozmiary i położenie każdego elementu mapy, tak więc czy istnieje funkcja podobna do getpixel(), która zamiast pobierać 1 pixel pobiera 1 kafel mojej mapy z określonego terenu na ekranie? Jeżeli nie, to będę kombinował z podłożeniem drugiej mapy typu bool i ustawiał na niej miejsca gdzie można i gdzie nie można wejść, a potem wymyślę na to jakiś algorytm ;) w każdym razie jeżeli nie ma takiej funkcji to i tak wielkie dzięki za poświęcony czas :)
P-1468
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-06 10:42:21
już nie mam pojęcia...
zrobiłem mapę o takich samych parametrach jak mapa 1 i dodałem takie coś do kodu chodzenia

C/C++
if( key[ KEY_LEFT ] &&( mapa_x > 0 ) )
{
    ludek.kierunek = 2;
    if(( map2[ mapa_x + 9 ][ mapa_y + 8 ] ) == 0 )
    {
        mapa_x = mapa_x - 1;
    } else
    {
        textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" );
    };
}
if( key[ KEY_RIGHT ] &&( mapa_x < 22 ) )
{
    ludek.kierunek = 1;
    if(( map2[ mapa_x + 12 ][ mapa_y + 8 ] ) == 0 )
    {
        mapa_x = mapa_x + 1;
    }
    else
    {
        textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" );
    }
    ;
}
if( key[ KEY_UP ] &&( mapa_y > 0 ) )
{
    ludek.kierunek = 3;
    if(( map2[ mapa_x + 11 ][ mapa_y + 7 ] ) == 0 )
    {
        mapa_y = mapa_y - 1; }
    else
    {
        textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" );
    };
}
if( key[ KEY_DOWN ] &&( mapa_y < 22 ) )
{
    ludek.kierunek = 0;
    if(( map2[ mapa_x + 11 ][ mapa_y + 9 ] ) == 0 )
    {
        mapa_y = mapa_y + 1;
    }
    else
    {
        textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" );
    }
    ;
}

mapa jak w artykule z easykodera na podstawie cyfr wyświetla odpowiednie kafle. Po zrobieniu tego ludzik w ogóle się nie rusza i pojawia się tylko napis, a w koło niego (oprócz lewej strony są 0 czyli może normalnie chodzić. Co więc jest nie tak :( ?
P-1498
DejaVu
» 2008-09-06 15:21:37
A gdzie masz kod, który przemieszcza ludka?
P-1501
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-06 21:22:47
ludek się nie przemieszcza, on stoi w miejscu na środku, tylko mapa się przesuwa. Więc da się to tak zrobić?
P-1506
DejaVu
» 2008-09-06 21:28:41
Z takiego fragmentu kodu niczego nie wywnioskujemy.
P-1507
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-07 09:52:56
no dobra wkleję cały kod

C/C++
class Cpostac
{
public:
    int x, y, w, s;
    short int kierunek, klatka;
};
// Zmienna naszej klasy
Cpostac ludek;

#include <allegro.h>

int stan_zycia;
int zycie, maxHP;
int frame = 0;

//zamykanie przez krzyzyk
volatile int close_button_pressed = FALSE;
void close_button_handler( void )
{
    close_button_pressed = TRUE;
}
END_OF_FUNCTION( close_button_handler );



// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

// Zmienne potrzebne do mapy i ludzika
int mapa_x = 0, mapa_y = 0;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;
BITMAP * ludekb = NULL;
BITMAP * staty = NULL;


// DEFINICJA MAPY
short int map[ 40 ][ 40 ] =
{
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
};


// Funkcja wyświetlająca mapę:
void wys_mape()
{
   
   
   
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 22; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 16; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 30,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 30,
            licznik_x * 30, licznik_y * 30, 30, 30 );
           
        }
    }
};
// Funkcja pokazująca pasek z życiem ;)
void pok_staty()
{
   
    if(( zycie <= maxHP ) &&( zycie > 0.8 * maxHP ) ) { masked_blit( staty, bufor, 0, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.8 * maxHP ) &&( zycie > 0.6 * maxHP ) ) { masked_blit( staty, bufor, 60, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.6 * maxHP ) &&( zycie > 0.4 * maxHP ) ) { masked_blit( staty, bufor, 120, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.4 * maxHP ) &&( zycie > 0.2 * maxHP ) ) { masked_blit( staty, bufor, 180, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.2 * maxHP ) &&( zycie > 0 ) ) { masked_blit( staty, bufor, 240, 0, 0, 0, 60, 20 ); };
    if( zycie == 0 ) { masked_blit( staty, bufor, 300, 0, 0, 0, 60, 20 ); };
    textprintf_ex( bufor, font, 6, 6, makecol( 255, 255, 255 ), - 1, "%d/%d", zycie, maxHP );
   
};

void ruch()
{
    while( speed > 0 )
    {
        //ludek.klatka=1;
        if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if(( map[ mapa_x + 9 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_RIGHT ] &&( mapa_x < 22 ) ) { ludek.kierunek = 1; if(( map[ mapa_x + 12 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; if(( map[ mapa_x + 11 ][ mapa_y + 7 ] ) == 0 ) { mapa_y = mapa_y - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_DOWN ] &&( mapa_y < 22 ) ) { ludek.kierunek = 0; if(( map[ mapa_x + 11 ][ mapa_y + 9 ] ) == 0 ) { mapa_y = mapa_y + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        speed--;
       
       
        // Sterowanie animacją
        frame++;
        if( frame > 10 ) frame = 0;
       
    };
   
    if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 5 ) { ludek.klatka = 1; }
    else if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 10 ) { ludek.klatka = 2; }
    else if( !( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) ) { ludek.klatka = 0; }
   
   
   
    masked_blit( ludekb, bufor, ludek.kierunek * 15, ludek.klatka * 30, ludek.x, ludek.y, 15, 30 );
    blit( bufor, screen, 0, 0, 0, 0, 660, 480 );
   
   
};


int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 660, 480, 0, 0 );
    set_window_title( "Pierwsza Gra! :)" );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) );
   
    teren = load_bmp( "Data/mapa.bmp", default_palette );
    bufor = create_bitmap( 660, 480 );
    ludekb = load_bmp( "Data/postac.bmp", default_palette );
    staty = load_bmp( "Data/staty.bmp", default_palette );
   
    //Do zamykania przez krzyzyk
    LOCK_FUNCTION( close_button_handler );
    set_close_button_callback( close_button_handler );
   
    // Ustalanie początkowej pozycji ludzika i określanie jego wielkości
    ludek.x = 308; ludek.y = 225; //11 klatka x i 8 y
    ludek.klatka = 0;
    ludek.kierunek = 0;
   
   
    while( !( key[ KEY_ESC ] || close_button_pressed ) )
    {
       
        zycie = 34;
        maxHP = 100;
       
       
       
       
        //Wyświetlanie ludzika i mapy i reszty xD
        wys_mape();
        pok_staty();
       
        ruch();
       
       
    };
   
    if( key[ KEY_ESC ] || close_button_pressed ) { allegro_message( "Dzieki i papa !" ); };
   
    // Usuwanie wszystkiego z pamięci.
    remove_int( increment_speed );
    destroy_bitmap( ludekb );
    destroy_bitmap( staty );
    destroy_bitmap( teren );
    destroy_bitmap( bufor );
   
    allegro_exit();
    return 0;
}
END_OF_MAIN();

mam nadzieję, że to rozwiąże problem.
P-1509
DejaVu
» 2008-09-07 12:53:09
Kolizja z wykorzystaniem mapy (rozwiązanie):

C/C++
class Cpostac
{
public:
    int x, y, w, s;
    short int kierunek, klatka;
};
// Zmienna naszej klasy
Cpostac ludek;

#include <allegro.h>

int stan_zycia;
int zycie, maxHP;
int frame = 0;

//zamykanie przez krzyzyk
volatile int close_button_pressed = FALSE;
void close_button_handler( void )
{
    close_button_pressed = TRUE;
}
END_OF_FUNCTION( close_button_handler );



// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

// Zmienne potrzebne do mapy i ludzika
int mapa_x = 10, mapa_y = 7;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;
BITMAP * ludekb = NULL;
BITMAP * staty = NULL;


// DEFINICJA MAPY
short int map[ 40 ][ 40 ] =
{
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
};


// Funkcja wyświetlająca mapę:
void wys_mape()
{
   
   
    int szer = 22;
    int wys = 16;
    int przesunX = 10;
    int przesunY = 7;
    int licznik_x, licznik_y;
    for( licznik_x = 0 - przesunX; licznik_x < szer - przesunX; licznik_x++ )
    {
        for( licznik_y = 0 - przesunY; licznik_y < wys - przesunY; licznik_y++ )
        {
            if( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] == 0 )
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 30,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 30,
                ( licznik_x + przesunX ) * 30,( licznik_y + przesunY ) * 30, 30, 30 );
           
        }
    }
};
// Funkcja pokazująca pasek z życiem ;)
void pok_staty()
{
   
    if(( zycie <= maxHP ) &&( zycie > 0.8 * maxHP ) ) { masked_blit( staty, bufor, 0, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.8 * maxHP ) &&( zycie > 0.6 * maxHP ) ) { masked_blit( staty, bufor, 60, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.6 * maxHP ) &&( zycie > 0.4 * maxHP ) ) { masked_blit( staty, bufor, 120, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.4 * maxHP ) &&( zycie > 0.2 * maxHP ) ) { masked_blit( staty, bufor, 180, 0, 0, 0, 60, 20 ); };
    if(( zycie <= 0.2 * maxHP ) &&( zycie > 0 ) ) { masked_blit( staty, bufor, 240, 0, 0, 0, 60, 20 ); };
    if( zycie == 0 ) { masked_blit( staty, bufor, 300, 0, 0, 0, 60, 20 ); };
    textprintf_ex( bufor, font, 6, 6, makecol( 255, 255, 255 ), - 1, "%d/%d", zycie, maxHP );
    textprintf_ex( bufor, font, 6, 26, makecol( 255, 255, 255 ), - 1, "%d/%d", mapa_x, mapa_y );
   
};

void ruch()
{
    while( speed > 0 )
    {
       
        ludek.klatka = 1;
        if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if(( map[ mapa_y ][ mapa_x - 1 ] ) == 0 ) { mapa_x = mapa_x - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_RIGHT ] &&( mapa_x < 40 - 1 ) ) { ludek.kierunek = 1; if(( map[ mapa_y ][ mapa_x + 1 ] ) == 0 ) { mapa_x = mapa_x + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; if(( map[ mapa_y - 1 ][ mapa_x ] ) == 0 ) { mapa_y = mapa_y - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        if( key[ KEY_DOWN ] &&( mapa_y < 40 - 1 ) ) { ludek.kierunek = 0; if(( map[ mapa_y + 1 ][ mapa_x ] ) == 0 ) { mapa_y = mapa_y + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; }
        speed--;
       
       
        // Sterowanie animacją
        frame++;
        if( frame > 10 ) frame = 0;
       
    };
   
    if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 5 ) { ludek.klatka = 1; }
    else if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 10 ) { ludek.klatka = 2; }
    else if( !( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) ) { ludek.klatka = 0; }
   
   
    ludek.klatka = 0;
    ludek.kierunek = 0;
    masked_blit( ludekb, bufor, ludek.kierunek * 15, ludek.klatka * 30, ludek.x, ludek.y, 30, 30 );
    blit( bufor, screen, 0, 0, 0, 0, 660, 480 );
   
   
};


int main()
{
    allegro_init();
    install_keyboard();
    install_timer();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 660, 480, 0, 0 );
    set_window_title( "Pierwsza Gra! :)" );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) );
   
    teren = load_bmp( "Data/mapa.bmp", default_palette );
    bufor = create_bitmap( 660, 480 );
    ludekb = load_bmp( "Data/postac.bmp", default_palette );
    staty = load_bmp( "Data/staty.bmp", default_palette );
   
    //Do zamykania przez krzyzyk
    LOCK_FUNCTION( close_button_handler );
    set_close_button_callback( close_button_handler );
   
    // Ustalanie początkowej pozycji ludzika i określanie jego wielkości
    ludek.x = 300; ludek.y = 210; //11 klatka x i 8 y
    ludek.klatka = 0;
    ludek.kierunek = 0;
   
   
    while( !( key[ KEY_ESC ] || close_button_pressed ) )
    {
        clear( bufor );
        zycie = 34;
        maxHP = 100;
       
       
       
       
        //Wyświetlanie ludzika i mapy i reszty xD
        wys_mape();
        pok_staty();
       
        ruch();
       
        rest( 10 );
    };
   
    if( key[ KEY_ESC ] || close_button_pressed ) { allegro_message( "Dzieki i papa !" ); };
   
    // Usuwanie wszystkiego z pamięci.
    remove_int( increment_speed );
    destroy_bitmap( ludekb );
    destroy_bitmap( staty );
    destroy_bitmap( teren );
    destroy_bitmap( bufor );
   
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-1511
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-07 17:29:37
nareszcie :)
wszystko idealnie, wielkie dzięki.
Jeszcze tylko jedno pytanie do skrócenia kodu. Czy da się uprościć zapis

if(( map[ mapa_y ][ mapa_x - 1 ] ) == 0 ||(( map[ mapa_y ][ mapa_x - 1 ] ) == 1 ) )

próbowałem
C/C++
if(( map[ mapa_y ][ mapa_x - 1 ] ) ==( 0 || 1 ) )
     if(( map[ mapa_y ][ mapa_x - 1 ] ) ==(( 0 ) ||( 1 ) )

i nic z tego nie działa tak jak powinno. Jeżeli mógłbym dostać odpowiedź byłoby miło, a i tak naprawdę wielkie dzięki za pomoc :)
P-1513
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona