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

znowu błąd segmentecji

Ostatnio zmodyfikowano 2010-09-08 14:04
Autor Wiadomość
ison
» 2010-09-01 15:54:37
tzn nie wyswietla bitmap?
ehhh... wklej ten kod (u mnie wyswietla)
C/C++
#include<iostream>
#include<allegro.h>
#include<math.h>

class gra
{ public:
    gra()
    {
        allegro_init();
        install_timer();
        install_keyboard();
        set_color_depth( 32 );
        set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    };
    ~gra()
    {
        allegro_exit();
    }
};


//kolizje,kolizje,kolizje,kolizje,kolizje,kolizje,kolizje,kolizje,
class kolizje
{
public:
    int prawo_x_ob;
    int dol_y_ob;
    int x;
    int y;
    BITMAP * mapa;
    BITMAP * kula;
    kolizje() { mapa = load_bmp( "mapa.bmp", default_palette );
        kula = load_bmp( "kula.bmp", default_palette );
        x = 100;
        y = 100;
        prawo_x_ob = kula->w + x;
        dol_y_ob = kula->h + y; }
    ~kolizje() { destroy_bitmap( mapa );
        destroy_bitmap( kula ); }
   
    int spr_kolizji_gora();
    int spr_kolizji_prawo();
    int spr_kolizji_dol();
    int spr_kolizji_lewo();
};


//kolizje,kolizje,kloizje,kolizje,kolizje,kolizje,kolizje
//góra,góra,góra,góra,góra,góra,góra,góra,góra,góra,         

int kolizje::spr_kolizji_gora()
{
    if( getpixel( mapa, prawo_x_ob, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa,( x + prawo_x_ob ) / 2, y ) != makecol( 255, 0, 255 ) )
    { return( true ); }
    else
    { return( false ); }
};
//prawo,prawo, prawo, prawo, prawo, prawo, prawo, prawo,                 

int kolizje::spr_kolizji_prawo()
{
    if( getpixel( mapa, prawo_x_ob, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, prawo_x_ob, dol_y_ob ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, prawo_x_ob,( dol_y_ob + y ) / 2 ) != makecol( 255, 0, 255 ) )
    { return( true ); }
    else
    { return( false ); }
};

//dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,dół,

int kolizje::spr_kolizji_dol()
{
    if( getpixel( mapa, prawo_x_ob, dol_y_ob ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x, dol_y_ob ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa,( x + prawo_x_ob ) / 2, dol_y_ob ) != makecol( 255, 0, 255 ) )
    { return( true ); }
    else
    { return( false ); }
};
//lewo,lewo,lewo,lewo,lewo,lewo,lewo,lewo,lewo,lewo,lewo,lewo,

int kolizje::spr_kolizji_lewo()
{
    if( getpixel( mapa, x, dol_y_ob ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x,( y + dol_y_ob ) / 2 ) != makecol( 255, 0, 255 ) )
    { return( true ); }
    else
    { return( false ); }
}


//wyświetlanie,wyświetlanie,wyświetlanie,wyświetlanie,wyświetlanie,
class wyswietlanie
{
   
public:
    kolizje * kol_wys;
    BITMAP * kula;
    BITMAP * bufor;
    BITMAP * tlo;
    BITMAP * ziemia;
    BITMAP * trawa;
    wyswietlanie()
    {
        kol_wys = new kolizje;
        ziemia = load_bmp( "ziemia.bmp", default_palette );
        trawa = load_bmp( "trawa.bmp", default_palette );
        kula = load_bmp( "kula.bmp", default_palette );
        tlo = load_bmp( "tlo.bmp", default_palette );
        bufor = create_bitmap( 800, 600 );
    }
    ~wyswietlanie() { destroy_bitmap( kula );
        destroy_bitmap( bufor );
        destroy_bitmap( tlo );
        destroy_bitmap( ziemia );
        destroy_bitmap( trawa );
        delete kol_wys; }
    void wyswietl();
   
};
//wyświetlanie,wyświetlanie,wyświetlanie,wyświetlanie,wyświetlanie,

void wyswietlanie::wyswietl() {
    masked_blit( kula, bufor, 0, 0, kol_wys->x, kol_wys->y, kula->h, kula->w );
    blit( tlo, bufor, 0, 0, 0, 0, tlo->h, tlo->w );
    blit( ziemia, bufor, 0, 0, 600 -( ziemia->h ), 0, ziemia->h, ziemia->w );
    blit( trawa, bufor, 0, 0, 600 -( ziemia->h + trawa->h ), 0, ziemia->h, trawa->w );
    blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
};

//sterowani,sterowani,sterowani,sterowani,sterowani,sterowani,sterowani,
class sterowanie
{
public:
    kolizje * kol_ste;
    bool lewo();
    bool prawo();
    bool skok();
    sterowanie() { kol_ste = new kolizje; };
   
    ~sterowanie() { delete kol_ste; };
};
//sterowanie,sterowanie,sterowanie,sterowanie,sterowanie,sterowanie                   
bool sterowanie::lewo()
{ if( key[ KEY_LEFT ] &&!kol_ste->spr_kolizji_lewo() )
    { kol_ste->x--; return( true ); }
    else
    { return( false ); }
};

bool sterowanie::prawo()
{ if( key[ KEY_RIGHT ] &&!kol_ste->spr_kolizji_prawo() )
    { kol_ste->x++; return( true ); }
    else
    { return( false ); }
};

bool sterowanie::skok()
{ if( key[ KEY_UP ] && kol_ste->spr_kolizji_dol() )
    { return true; }
    else
    { return false; }
};

//grawitacja,grawitacja,grawitacja,grawitacja,grawitacja,grawitacja,grawitacja,
class grawitacja
{
private:
    kolizje * wyk_kol;
    sterowanie * ster;
    float t0;
    float t1;
    float v1;
    float v0;
    float a;
    float b;
    float n;
public:
    grawitacja() { wyk_kol = new kolizje;
        ster = new sterowanie;
        t0 = 0;
        t1 = 0.1;
        v1 = 40;
        v0 = 0;
        a = 10;
        b = 0;
        n = 0; }
    ~grawitacja() { delete ster;
        delete wyk_kol; }
    int graw();
};
//grawitacja,grawitacja,grawitacja,grawitacja,grawitacja,grawitacja,       

int grawitacja::graw()
{
    if( ster->skok() )
    { v0 = v1; }
    else
    { v0 = 0; }
   
    n =( v0 * t0 -( a *( t0 * t0 ) ) / 2 ) - b;
    wyk_kol->y = wyk_kol->y +( static_cast < int >( round( n ) ) );
    b = v0 * t0 -( a *( t0 * t0 ) ) / 2;
    t0 = t0 + t1;
   
    if( wyk_kol->spr_kolizji_dol() && n < 0 )
    {
        while( n < 0 )
        {
            n++; wyk_kol->y--;
            if( !wyk_kol->spr_kolizji_dol() )
            {
                wyk_kol->y++; n = 0;
            }
        }
    }
};
volatile long pre = 0;
void inc_pre()
{
    pre++;
}
END_OF_FUNCTION( inc_pre );

LOCK_VARIABLE( pre );
LOCK_FUNCTION( inc_pre );


int main()
{
    gra game;
    grawitacja ruch;
    kolizje mapa1;
    sterowanie klawisze;
    wyswietlanie obraz;
   
    int t2 = 10;
    install_int_ex( inc_pre, BPS_TO_TIMER( 100 ) );
    while( !key[ KEY_A ] )
    {
        obraz.wyswietl();
        mapa1.spr_kolizji_dol();
        mapa1.spr_kolizji_gora();
        mapa1.spr_kolizji_lewo();
        mapa1.spr_kolizji_prawo();
        klawisze.lewo();
        klawisze.prawo();
        klawisze.skok();
        if( pre % t2 < 6 )
        { ruch.graw(); }
    }
    ruch.~grawitacja();
    mapa1.~kolizje();
    klawisze.~sterowanie();
    obraz.~wyswietlanie();
    game.~gra();
    remove_int( inc_pre );
    exit( 0 );
}
END_OF_MAIN()
jesli wywala ci blad tzn ze nie masz odpowiednich bitmap w folderze z aplikacja
P-21492
pekfos
» 2010-09-01 15:58:24
allegro_exit() nie widze..
P-21493
ison
» 2010-09-01 15:59:09
@up
17 linijka od góry...
P-21495
inny1997
Temat założony przez niniejszego użytkownika
» 2010-09-01 16:00:53
żadnych błędów nie mam tylko jak włączam program to robi się czarne okno i nic nie można zrobić nawet wyjść krzyżykiem . po jakimś czasie wyświetla się komunikat systemowy  projekt1.exe przestał działać i pyta się czy zamkną program  
P-21496
ison
» 2010-09-01 16:02:23
a może dlatego że wszystkie bitmapy masz czarne?...
nie wiem jakim cudem ale u mnie magicznie wyświetla wszystkie bitmapy
P-21499
inny1997
Temat założony przez niniejszego użytkownika
» 2010-09-01 16:10:30
u mnie podczas debugowania wyświetla komunikat "w twoim programie wykryto naruszenie prawa dostępu (błąd segmentacji)"
P-21504
ison
» 2010-09-01 16:27:00
miałem raczej na myśli ręczne debugowanie ;)
bez tego nie poradzisz sobie pisząc dłuższe programy
P-21514
pekfos
» 2010-09-01 18:47:07
ten program był chyba projektowany "w locie". niezły bałagan. jakbyś to przemyślał to nie musiałbyś ręcznie wywoływać destruktorów.. te klasy to powinny być singletony. tworzenie obiektów tymczasowych powinno być zablokowane! przecież w konstruktorze inicjujesz bibliotekę a w destruktorze zamykasz! te operacje mogą być niejawnie wykonywane niejednokrotnie. Moim zdaniem to powoduje rozpad programu przy uruchomieniu..
P-21529
1 « 2 » 3 4 5 6
Poprzednia strona Strona 2 z 6 Następna strona