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

[allegro] Program mi się zacina

Ostatnio zmodyfikowano 2013-07-10 19:04
Autor Wiadomość
pavlakk
Temat założony przez niniejszego użytkownika
[allegro] Program mi się zacina
» 2013-07-10 18:25:45
C/C++
#include <allegro.h>
#include <time.h>
#include <fstream>


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

class game
{
    int jabko_x, jabko_y;
    int dlugosc, predkosc, punkty;
    int n, a;
    char wynik[ 15 ];
    BITMAP * bufor;
    BITMAP * jabko;
    BITMAP * wonsz;
    BITMAP * gra;
    BITMAP * najlepsi;
    FONT * czcionka;
    std::string rekord;
public:
    bool p;
    int x[ 60 ], y[ 60 ];
    int przegrana();
    void ustaw();
    void steruj();
    void rysuj();
    void dane();
    void usun();
};

void game::ustaw()
{
    jabko_x = 260;
    jabko_y = 240;
    dlugosc = 3;
    predkosc = 3;
    punkty = 0;
    x[ 0 ] = 120;
    y[ 0 ] = 240;
    n = 1;
    BITMAP * bufor = NULL;
    BITMAP * jabko = NULL;
    BITMAP * wonsz = NULL;
    BITMAP * gra = NULL;
    BITMAP * najlepsi = NULL;
    FONT * czcionka = NULL;
    gra = load_bmp( "gra.bmp", default_palette );
    wonsz = load_bmp( "wonsz.bmp", default_palette );
    jabko = load_bmp( "jabko.bmp", default_palette );
    najlepsi = load_bmp( "najlepsi.bmp", default_palette );
    czcionka = load_font( "CZ.PCX", NULL, NULL );
    bufor = create_bitmap( 600, 600 );
    std::fstream plik;
    plik.open( "rekordy.txt" );
    std::getline( plik, rekord );
   
};

void game::steruj()
{
   
    if( key[ KEY_RIGHT ] )
    {
        n--;
        if( n ==- 1 )
             n = 3;
       
    }
   
    else if( key[ KEY_LEFT ] )
    {
        n++;
        if( n == 4 )
             n = 0;
       
    }
   
    if( n == 0 )
         x[ 0 ] -= 20;
    else if( n == 1 )
         y[ 0 ] += 20;
    else if( n == 2 )
         x[ 0 ] += 20;
    else if( n == 3 )
         y[ 0 ] -= 20;
   
};

void game::rysuj()
{
    masked_blit( gra, bufor, 0, 0, 0, 0, 600, 600 );
    masked_blit( jabko, bufor, 0, 0, jabko_x, jabko_y, 600, 600 );
   
    for( a = 0; a <= dlugosc; a++ )
         masked_blit( wonsz, bufor, 0, 0, x[ a ], y[ a ], 20, 20 );
   
    textout_ex( bufor, czcionka, rekord.c_str(), 200, 83, makecol( 255, 255, 140 ), - 1 );
    textout_ex( bufor, czcionka, itoa( punkty, wynik, 10 ), 200, 22, makecol( 255, 255, 140 ), - 1 );
    blit( bufor, screen, 0, 0, 0, 0, 600, 600 );
};

void game::dane()
{
    p = false;
    for( a = 3; a <= dlugosc; a++ )
    if( x[ 0 ] == x[ a ] && y[ 0 ] == y[ a ] )
         p = true;
   
    else if( x[ 0 ] == jabko_x && y[ 0 ] == jabko_y )
    {
        dlugosc++;
        predkosc++;
        punkty += 50;
        jabko_x = 20 *(( rand() % 24 ) + 1 );
        jabko_y = 20 *(( rand() % 20 ) + 9 );
        install_int_ex( increment_speed, BPS_TO_TIMER( predkosc ) );
    }
    for( a = dlugosc + 1; a > 0; a-- )
    {
        x[ a ] = x[ a - 1 ];
        y[ a ] = y[ a - 1 ];
    }
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
}

int game::przegrana()
{
    bool z = true;
   
    BITMAP * koniec_tak = NULL;
    BITMAP * koniec_nie = NULL;
   
    koniec_tak = load_bmp( "tak.bmp", default_palette );
    koniec_nie = load_bmp( "nie.bmp", default_palette );
    masked_blit( koniec_tak, bufor, 0, 0, 115, 200, 600, 600 );
    blit( bufor, screen, 0, 0, 0, 0, 600, 600 );
    install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) );
   
   
   
    while( z == false || !key[ KEY_ENTER ] )
    {
        while( speed > 0 )
        {
            if( key[ KEY_LEFT ] || key[ KEY_RIGHT ] )
            {
                if( z == true )
                {
                    masked_blit( koniec_nie, bufor, 0, 0, 115, 200, 600, 600 );
                    blit( bufor, screen, 0, 0, 0, 0, 600, 600 );
                    z = false;
                }
                else
                {
                    masked_blit( koniec_tak, bufor, 0, 0, 115, 200, 600, 600 );
                    blit( bufor, screen, 0, 0, 0, 0, 600, 600 );
                    z = true;
                }
            }
            else if( key[ KEY_ENTER ] && z == false )
                 return 0;
           
            speed--;
        }
    }
    speed = 1;
    x[ 0 ] = 120;
    y[ 0 ] = 240;
    dlugosc = 3;
    predkosc = 3;
    n = 1;
    punkty = 0;
    jabko_x = 260, jabko_y = 240;
    install_int_ex( increment_speed, BPS_TO_TIMER( predkosc ) );
};

void game::usun()
{
    destroy_bitmap( jabko );
    destroy_bitmap( gra );
    destroy_bitmap( bufor );
    destroy_bitmap( wonsz );
    destroy_bitmap( najlepsi );
}


int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 600, 600, 0, 0 );
    set_palette( default_palette );
    BITMAP * rysuj = NULL;
    BITMAP * wyjdz = NULL;
    int i = 3;
    rysuj = load_bmp( "rysuj.bmp", default_palette );
    wyjdz = load_bmp( "wyjdz.bmp", default_palette );
    blit( rysuj, screen, 0, 0, 0, 0, 600, 600 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) );
   
   
   
    while( !key[ KEY_ENTER ] || i % 2 == 0 )
    {
        while( speed > 0 )
        {
            if( key[ KEY_DOWN ] || key[ KEY_UP ] )
            {
                i++;
                if( i % 2 == 1 )
                     blit( rysuj, screen, 0, 0, 0, 0, 600, 600 );
                else if( i % 2 == 0 )
                     blit( wyjdz, screen, 0, 0, 0, 0, 600, 600 );
               
            }
            else if( key[ KEY_ENTER ] && i % 2 == 0 )
                 return 0;
            else if( key[ KEY_ESC ] )
                 return 0;
           
            speed--;
        }
    }
   
    remove_int( increment_speed );
    destroy_bitmap( rysuj );
    destroy_bitmap( wyjdz );
   
    int a;
    game g;
   
   
    g.ustaw();
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 3 ) );
   
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
            // g.steruj();
            g.rysuj();
            // g.dane();
            // if(g.x[0]==580 || g.y[0]==160 || g.x[0]==0 || g.y[0]==580 || g.p==true)
            // g.przegrana();
           
           
           
            speed--;
        }
    }
    g.usun();
   
    remove_int( increment_speed );
    allegro_exit();
    return 0;
}

END_OF_MAIN();

Program działał wcześniej prawidłowo, ale cały kod miałem w mainie i jak dodałem klasę i funkcję program zacina się po przejściu z menu do gry. Nie mam kompletnie pomysłu, czemu tak się dzieje.
P-87393
Monika90
» 2013-07-10 18:42:11
W funkcji game::ustaw inicjalizujesz lokalne zmienne (bufor, jabko, gra, itd) zamiast składowych klasy.
P-87395
pavlakk
Temat założony przez niniejszego użytkownika
» 2013-07-10 18:45:45
C/C++
g.jabko_x = 240;
g.jabko_y = 220;


Tak to ma wyglądać? ;)
P-87398
Monika90
» 2013-07-10 18:50:04
Nie.

Usuń
C/C++
BITMAP * bufor = NULL;
BITMAP * jabko = NULL;
BITMAP * wonsz = NULL;
BITMAP * gra = NULL;
BITMAP * najlepsi = NULL;
FONT * czcionka = NULL;
z funkcji game::ustaw()
P-87400
pavlakk
Temat założony przez niniejszego użytkownika
» 2013-07-10 19:02:27
Permission denied
ścieżka:gra/collect2.exe [Error] ld returned 1 exit status
recipe for target 'Projekt1.exe' failed
ścieżka:gra/Makefile.win [Error] [Projekt1.exe] Error 1



Dzięki za pomoc, ale teraz wywala mi taki błąd.
P-87402
pekfos
» 2013-07-10 19:04:40
(Wyłącz program i) skompiluj drugi raz.
P-87403
« 1 »
  Strona 1 z 1