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

[Allegro]Gra wyłącza się

Ostatnio zmodyfikowano 2010-01-02 18:47
Autor Wiadomość
kuba1817
Temat założony przez niniejszego użytkownika
[Allegro]Gra wyłącza się
» 2010-01-02 17:33:33
Cześć ponownie... A więc tak: wszystko działało dobrze, a tu nagle, po uruchomieniu gry wyłącza się ona... Włącza i wyłącza... Czasami chwile działa, ale potem nagle zgon...;/

Oto kod:
C/C++
#include <allegro.h>
#include <conio.h>
#include <iostream>


enum CHODZENIE { lewo, prawo, gora, dol, stoi, eq }; //Typ okreslajacy kierunek ruchu postaci
bool pokaz_ekwipunek = false; //Zmienna pomocnicza w wyswietalniu eq
int pomocnicza_eq = 0; //Nalicza czas
int wspol_x, wspol_y; //Zmienne, do ktorych beda przypisane wsp Edwarda
short int level = 1; //Zmienna okreslajaca level
short int czy_eq_tak = 0;

class CGlownyBohater
{
   
   
private:
    bool kolizja( char kierunek );
    int edward_x;
    int edward_y;
    int frame;
   
   
public:
   
    void idz_w_lewo();
    void idz_w_prawo();
    void stoi();
    void idz_w_dol();
    void idz_w_gore();
    void pokaz_eq();
    CGlownyBohater();
   
   
};





void lvl1();
void lvl2();
void lvl3();

void NowaGra(); //Funkcja odpowiedzialna za rozpoczecie nowej gry





int mapa[ 16 ][ 32 ] = { //Tworzymy i wypelniamy tablice-mape;]
    3, 3, 3, 3, 3, 3, 3, 3, 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, 3, 2, 0, 0, 3, 3, 3, 3, 0, 0, 0, 3, 2, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3,
    3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 3, 3, 3, 1, 2, 3, 3, 3, 3, 2, 1, 3, 3, 2, 2, 2, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 1, 3, 3, 2, 3, 3, 2, 3, 3, 2, 1, 2, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 3,
    3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3,
    3, 2, 3, 3, 1, 3, 2, 3, 3, 3, 2, 3, 1, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    1, 3, 3, 1, 1, 1, 3, 3, 2, 3, 3, 3, 2, 1, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 1, 3, 3, 2, 3,
    3, 3, 3, 1, 3, 3, 2, 3, 3, 2, 3, 3, 3, 1, 3, 3, 3, 2, 3, 1, 3, 1, 3, 3, 3, 2, 3, 3, 2, 3, 2, 1,
    3, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 2, 3, 2, 2, 3, 3, 3, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, 2, 3,
};

int mapa_x = 0, mapa_y = 0;

volatile long speed = 0;

BITMAP * bufor = NULL;
BITMAP * teren = NULL; //Tworzymy wskaźniki bitmap
BITMAP * edward = NULL;
BITMAP * edward_krok_1 = NULL;
BITMAP * edward_krok_2 = NULL;
BITMAP * edward_prawo = NULL;
BITMAP * edward_prawo_krok_1 = NULL;
BITMAP * edward_prawo_krok_2 = NULL;
BITMAP * edward_krok_12 = NULL;
BITMAP * edward_krok_prawo_12 = NULL;
BITMAP * ekwipunek = NULL;

void wys_mape(); //Funkcja wyswietlajaca mape



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

LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );



CHODZENIE chodzenie; //Tworzymy zmienna ukazujaca kierunek ruchu i bohatera
CGlownyBohater CEdward;


int main() //Początek



{
   
    allegro_init(); //Instalujemy
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 1024, 768, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 90 ) );
    install_mouse();
    show_mouse( screen );
    unscare_mouse();
   
   
   
   
    bufor = create_bitmap( 1024, 768 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora!" );
        allegro_exit();
        return 0;
    }
   
    teren = load_bmp( "teren.bmp", default_palette ); //Ładujemy bitmapy:)
    if( !teren )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward = load_bmp( "edward.bmp", default_palette );
    if( !edward )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward_krok_1 = load_bmp( "edward_krok_1.bmp", default_palette );
    if( !edward_krok_1 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward_krok_2 = load_bmp( "edward_krok_2.bmp", default_palette );
    if( !edward_krok_2 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward_prawo = load_bmp( "edward_prawo.bmp", default_palette );
    if( !edward_prawo )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward_prawo_krok_1 = load_bmp( "edward_prawo_krok_1.bmp", default_palette );
    if( !edward_prawo_krok_1 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    edward_prawo_krok_2 = load_bmp( "edward_prawo_krok_2.bmp", default_palette );
    if( !edward_prawo_krok_2 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
   
    edward_krok_12 = load_bmp( "edward_krok_12.bmp", default_palette );
    if( !edward_krok_12 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
   
   
    edward_krok_prawo_12 = load_bmp( "edward_krok_prawo12.bmp", default_palette );
    if( !edward_krok_prawo_12 )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    ekwipunek = load_bmp( "ekwipunek.bmp", default_palette );
    if( !ekwipunek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Wystapil problem podczas ladowania obrazka!" );
        allegro_exit();
        return 0;
    }
   
    /////////////////////////////////GRA////////////////////////////////////////////
   
   
   
   
   
    //while( !key[KEY_ESC])                   //Poczatek gry-glowna petla
    //{
   
   
    NowaGra();
   
   
    //}
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    ////////////////////////////////////////////////////////////////////////////////
   
   
    remove_int( increment_speed );
    destroy_bitmap( teren ); //Niszczymy
    destroy_bitmap( bufor );
    destroy_bitmap( edward );
    destroy_bitmap( edward_krok_1 );
    destroy_bitmap( edward_krok_2 );
    destroy_bitmap( edward_prawo );
    destroy_bitmap( edward_prawo_krok_1 );
    destroy_bitmap( edward_prawo_krok_2 );
    destroy_bitmap( edward_krok_12 );
    destroy_bitmap( edward_krok_prawo_12 );
    destroy_bitmap( ekwipunek );
   
    allegro_exit();
    return 0;
}


END_OF_MAIN();





void CGlownyBohater::idz_w_lewo() //Funkcje klasy
{
   
    if( CEdward.kolizja( 'l' ) == false )
    {
       
        if( edward_x > 0 )
             edward_x--;
       
        frame++;
       
        if( frame > 90 ) frame = 0;
       
        if( frame < 30 ) { masked_blit( edward_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
       
       
        if( edward_x == 1 & mapa_x != 0 )
        {
            mapa_x -= 8;
            edward_x = 880;
        }
    }
    else CEdward.stoi();
   
};



void CGlownyBohater::idz_w_prawo()
{
   
    if( CEdward.kolizja( 'p' ) == false )
    {
       
        if( edward_x < 900 )
             edward_x++;
       
        frame++;
       
        if( frame > 90 ) frame = 0;
       
        if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
       
       
        if( edward_x == 899 & mapa_x != 24 )
        {
            mapa_x += 8;
            edward_x = 10;
        }
    }
    else CEdward.stoi();
   
};




void CGlownyBohater::stoi()
{
    draw_sprite( bufor, edward, edward_x, edward_y );
};




void CGlownyBohater::idz_w_dol()
{
   
    if( CEdward.kolizja( 'd' ) == false )
    {
       
        if( edward_y < 650 )
             edward_y++;
       
        frame++;
       
       
        if( frame > 90 ) frame = 0;
       
        if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
       
        if( edward_y == 649 & mapa_y != 12 )
        {
            mapa_y += 4;
            edward_y = 1;
        }
       
       
       
    }
    else CEdward.stoi();
   
};



void CGlownyBohater::idz_w_gore()
{
   
   
    if( CEdward.kolizja( 'g' ) == false )
    {
       
        if( edward_y > 0 )
             edward_y--;
       
        frame++;
       
       
       
        if( frame > 90 ) frame = 0;
       
        if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
        else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); }
       
        if( edward_y == 1 & mapa_y != 0 )
        {
            mapa_y -= 4;
            edward_y = 649;
        }
       
       
       
    }
    else CEdward.stoi();
   
};




CGlownyBohater::CGlownyBohater()
{
   
    edward_x = 0;
    edward_y = 0;
    frame = 0;
};






/////////////////////////////////////////////////////////////////////////////////////////////////////


void wys_mape() //Funkcja wyswietlajaca mape
{
   
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 32; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 16; licznik_y++ )
        {
            masked_blit( teren, bufor,
            ( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 2 ) * 128,
            ( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 2 ) * 192,
            licznik_x * 128, licznik_y * 192, 128, 192 );
        }
    }
   
   
};




void lvl1() //Levele
{
   
   
    while( speed > 0 )
    {
       
        chodzenie = stoi;
       
        if( key[ KEY_ESC ] ) speed =- 1;
       
        if( key[ KEY_RIGHT ] ) chodzenie = prawo; //Sprawdzanie wcisnietego klawisza
       
        if( key[ KEY_LEFT ] ) chodzenie = lewo;
       
        if( key[ KEY_DOWN ] ) chodzenie = dol;
       
        if( key[ KEY_UP ] ) chodzenie = gora;
       
        if( key[ KEY_E ] ) pokaz_ekwipunek =!pokaz_ekwipunek;
       
       
       
       
       
        speed--;
       
       
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
       
        wys_mape(); //Wyswietlamy mape
       
       
       
        if( chodzenie == stoi ) //Warunki chodzenia postaci i jej ruch
             CEdward.stoi();
       
        if( chodzenie == lewo )
             CEdward.idz_w_lewo();
       
        if( chodzenie == prawo )
             CEdward.idz_w_prawo();
       
        if( chodzenie == dol )
             CEdward.idz_w_dol();
       
        if( chodzenie == gora )
             CEdward.idz_w_gore();
       
        if( pokaz_ekwipunek == true )
             CEdward.pokaz_eq();
       
        blit( bufor, screen, 0, 0, 0, 0, 1024, 768 );
    };
   
   
   
   
   
};




void lvl2()
{
   
   
   
   
   
   
   
   
};


void lvl3()
{
   
   
   
   
   
   
   
   
};


void NowaGra()
{
   
    switch( level )
    {
    case 1: lvl1(); //Level 1
        break;
       
    case 2: lvl2(); //Level 2
        break;
       
    case 3: lvl3(); //Level 3
        break;
    };
   
};


bool CGlownyBohater::kolizja( char kierunek )
{
    switch( kierunek )
    {
    case 'g':
       
        for( int i = 0; i < 32; i++ )
        {
            if( getpixel( bufor, edward_x + 23 + i, edward_y + 18 ) == makecol( 114, 47, 11 ) || getpixel( bufor, edward_x + 23 + i, edward_y + 18 ) == makecol( 39, 141, 8 ) )
                 return true;
           
        }
        return false;
       
    case 'd':
       
        for( int i = 0; i < 32; i++ )
        {
            if( getpixel( bufor, edward_x + 23 + i, edward_y + 107 ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 23 + i, edward_y + 107 ) == makecol( 66, 150, 89 ) )
                 return true;
           
        }
        return false;
       
       
    case 'l':
       
        for( int i = 0; i < 72; i++ )
        {
            if( getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 66, 150, 89 ) || getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 114, 47, 11 ) )
                 return true;
           
        }
        return false;
       
    case 'p':
       
        for( int i = 0; i < 72; i++ )
        {
            if( getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 66, 150, 89 ) || getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 114, 47, 11 ) )
                 return true;
           
        }
        return false;
       
       
       
    }
   
   
   
    return false;
   
};



void CGlownyBohater::pokaz_eq() //Pokazujemy eq
{
   
    masked_blit( ekwipunek, bufor, 0, 0, 774, 369, ekwipunek->w, ekwipunek->h );
   
};

Dzięki z góry...:)
P-12660
malan
» 2010-01-02 18:26:44
Hmm... może wstaw w funkcji lvl1 pętlę while(!key[KEY_ESC]) i w niej umieść całą resztę.
P-12661
kuba1817
Temat założony przez niniejszego użytkownika
» 2010-01-02 18:37:50
Niestety... Nic:(
P-12662
malan
» 2010-01-02 18:45:11
No to po kolei - za komentuj najpierw funkcje wys_mape ( w lvl1). Jeśli gra się nie wyłączy to znaczy, że gdzieś tam masz błąd.
P-12663
kuba1817
Temat założony przez niniejszego użytkownika
» 2010-01-02 18:47:28
Komentowalem juz wszystko... Ale udalo sie! Wywalilem petla while(speed>0) i dalem ta z esc...:) Dzieki bardzo, jak skoncze na pewno umieszcze gre na forum;pp
P-12664
« 1 »
  Strona 1 z 1