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

Kolizje w allegro C++

Ostatnio zmodyfikowano 2012-04-09 12:55
Autor Wiadomość
cichy
Temat założony przez niniejszego użytkownika
Kolizje w allegro C++
» 2012-04-04 22:20:29
Mam taką funkcję lecz niestety wyskakuje mi błąd.
C/C++
bool kolizja( int kolo_x, int kolo_y, int kolo_s, int kolo_h, int kwadrat_x, int kwadrat_y, int kwadrat_s, int kwadrat_h )
{
    if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x >( kwadrat_x + kwadrat_s ) or( kolo_y + kolo_h - 1 ) < kwadrat_y or kolo_x >( kwadrat_x + kwadrat_s + 1 ) )
    {
        if( kolo_x > 0 )
        {
            if( key[ KEY_A ] ) kolo_x--;
           
            return false;
        }
    }
   
    if(( kolo_x + 24 ) < 640 )
    {
        if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x + kolo_s < kwadrat_x or kolo_y + kolo_h - 1 < kwadrat_y or kolo_y + kolo_s > kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 )
        {
            if( key[ KEY_D ] ) kolo_x++;
           
            return false;
        }
    }
   
    if(( kolo_x + kolo_s - 1 ) < kwadrat_x or kolo_x >( kwadrat_x + kwadrat_s - 1 ) or kolo_y >( kwadrat_y + kwadrat_h ) or kolo_y + kolo_h - 1 < kwadrat_y )
    {
        if( kolo_y > 0 )
        {
            if( key[ KEY_W ] )
            {
                kolo_y--;
                return false;
            }
           
        }
    }
   
    if(( kolo_y + 25 ) < 480 )
    {
        if( kolo_x + kolo_s - 1 < kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 or kolo_y + kolo_h < kwadrat_y or kolo_y > kwadrat_y + kwadrat_h - 1 )
        {
            if( key[ KEY_S ] ) kolo_y++;
           
            return false;
        }
    }
};

Jeśli ktoś wie co jest tego przyczyna to proszę o pomoc/
P-53844
Chlorek
» 2012-04-04 22:54:37
Może podasz ten błąd - treść. Może i jestem leniwy, ale raczej mało kto teraz będzie próbował to kompilować. A tak podanie błędu == szybka odpowiedź.
P-53856
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-04 22:57:14
w sumie to racja nie pomyślałem :)

a function-definition is not allowed here before '{' token
expected `,' or `;' before '{' token
P-53858
hincu
» 2012-04-05 12:04:08
klamra zamykajaca funkcje posiada srednik w funkcjach nie stosuje sie srednikow
P-53871
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-05 12:55:57
bez średnika reakcja taka sama. a z tym średnikiem to eksperymentowałem i nie usunąłem
P-53875
xevuel
» 2012-04-05 13:56:06
Podaj linijkę, którą IDE ci zaznacza jako błędną.

Nie wiem, przejrzałem ten kod, i nie znalazłem błędu, to z ciekawości skompilowałem go. I TDM-GCC skompilował go bez błędów. Jesteś pewny, że to ta funkcja powoduje błąd?
P-53877
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-05 18:39:51
3 linijka w tym co tutaj pisze a dokładniej to klamra otwierająca funkcję

w sumie to nie mam 100% pewności.jakby się komuś strasznie nudziło :D wstawiam tutaj cały kod
C/C++
#include <allegro.h>
#include <ctime>
#include <iostream>

//Zmienne
int kolo_x = 100;
int kolo_y = 100;
int kolo_s = 24;
int kolo_h = 25;

int kwadrat_x = 200;
int kwadrat_y = 100;
int kwadrat_s = 70;
int kwadrat_h = 70;

volatile long speed = 0;

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; };


//Petla FPSow    
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );

void spawn()
{
    kolo_x = 10;
    kolo_y = 10;
}
END_OF_FUNCTION( spawn );

void init();
void spawn();

//Zmienne speedowe
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

//Funkcja main
int main() {
    init();
   
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
   
    //Tworzenie BITMAP
    BITMAP * kolo = NULL;
    BITMAP * bufor = NULL;
    BITMAP * kwadrat = NULL;
   
   
    //Tworzenie BITMAP dalsze
    kolo = create_bitmap( 24, 25 );
    bufor = create_bitmap( 640, 480 );
    kwadrat = create_bitmap( kwadrat_s, kwadrat_h );
   
   
    //Ladowanie tekstur
    kolo = load_bmp( "kolo.bmp", default_palette );
    kwadrat = load_bmp( "kwadrat.bmp", default_palette );
   
   
    //Glowna petla
    while( !key[ KEY_ESC ] ) {
       
       
       
        if( key[ KEY_R ] ) {
            spawn();
        }
       
        while( speed > 0 )
        {
           
            kolizja( kolo_x, kolo_y, kolo_s, kolo_h, kwadrat_x, kwadrat_y, kwadrat_s, kwadrat_h );
           
            speed--;
        }
       
        blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
        clear_to_color( bufor, makecol( 55, 45, 147 ) );
        masked_blit( kolo, bufor, 0, 0, kolo_x, kolo_y, kolo->w, kolo->h );
        masked_blit( kwadrat, bufor, 0, 0, kwadrat_x, kwadrat_y, kwadrat->w, kwadrat->h );
        masked_blit( kwadrat, bufor, 0, 0, 100, 100, kwadrat->w, kwadrat->h );
    }
   
    //Usuwanie
    remove_int( increment_speed );
    destroy_bitmap( kolo );
    destroy_bitmap( bufor );
    destroy_bitmap( kwadrat );
   
    return 0;
}
END_OF_MAIN()

void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( depth );
    res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    };
   
    bool kolizja( int kolo_x, int kolo_y, int kolo_s, int kolo_h, int kwadrat_x, int kwadrat_y, int kwadrat_s, int kwadrat_h )
    {
        if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x >( kwadrat_x + kwadrat_s ) or( kolo_y + kolo_h - 1 ) < kwadrat_y or kolo_x >( kwadrat_x + kwadrat_s + 1 ) )
        {
            if( kolo_x > 0 )
            {
                if( key[ KEY_A ] ) kolo_x--;
               
                return false;
            }
        }
       
        if(( kolo_x + 24 ) < 640 )
        {
            if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x + kolo_s < kwadrat_x or kolo_y + kolo_h - 1 < kwadrat_y or kolo_y + kolo_s > kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 )
            {
                if( key[ KEY_D ] ) kolo_x++;
               
                return false;
            }
        }
       
        if(( kolo_x + kolo_s - 1 ) < kwadrat_x or kolo_x >( kwadrat_x + kwadrat_s - 1 ) or kolo_y >( kwadrat_y + kwadrat_h ) or kolo_y + kolo_h - 1 < kwadrat_y )
        {
            if( kolo_y > 0 )
            {
                if( key[ KEY_W ] )
                {
                    kolo_y--;
                    return false;
                }
               
            }
        }
       
        if(( kolo_y + 25 ) < 480 )
        {
            if( kolo_x + kolo_s - 1 < kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 or kolo_y + kolo_h < kwadrat_y or kolo_y > kwadrat_y + kwadrat_h - 1 )
            {
                if( key[ KEY_S ] ) kolo_y++;
               
                return false;
            }
        }
    }
   
    install_timer();
    install_keyboard();
    install_mouse();
    /* add other initializations here */
}
P-53904
xevuel
» 2012-04-05 19:41:57
Czyli tak:
Po END_OF_MAIN() nie masz średnika, jest to linijka przed void init().

C/C++
if( res != 0 ) {
    allegro_message( allegro_error );
    exit( - 1 );
};
Po if-ach nie stawiamy średników.

C/C++
void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( depth );
    res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    };
Brak nawiasu kończącego funkcję.

PS. » Kurs STC » Kolorowanie składniKolorowanie składni języka C++ lekcja
P-53907
« 1 » 2 3
  Strona 1 z 3 Następna strona