dominikowy Temat założony przez niniejszego użytkownika |
» 2011-08-22 18:49:37 Wielkie dzięki za chęci:> To spójrzcie chociaż na mój kod: Doróbcie 2 postacie, tlo i jeden dzwiek #include <allegro.h>
bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 ) { if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true ); return( false ); };
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int main() { allegro_init(); install_keyboard(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 240, 133, 99 ) ); install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" ); set_volume( 100, 100 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 250 ) ); BITMAP * bufor = NULL; BITMAP * milena = NULL; BITMAP * paulina = NULL; BITMAP * tlo = NULL; tlo = load_bmp( "Obiekty/tlo.bmp", default_palette ); milena = load_bmp( "Obiekty/milena.bmp", default_palette ); paulina = load_bmp( "Obiekty/paulina.bmp", default_palette ); SAMPLE * owca6 = NULL; owca6 = load_sample( "Muzyka/owca6.wav" ); if( !owca6 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę zaladować dzwieku !" ); allegro_exit(); return 0; } if( !tlo ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka tlo !" ); allegro_exit(); return 0; } bufor = create_bitmap( 800, 600 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora !" ); allegro_exit(); return 0; } if( !milena &&!paulina ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę załadować obrazka !" ); allegro_exit(); return 0; } int paulina_x = 500, paulina_y = 100; int milena_x = 100, milena_y = 200; while( !key[ KEY_ESC ] ) { if( key[ KEY_1 ] ) play_sample( owca6, 255, 127, 1000, 0 ); if( key[ KEY_TAB ] ) { milena_y = 100; milena_x = 300; } if( key[ KEY_CAPSLOCK ] ) { paulina_y = 100; paulina_x = 300; } while( speed > 0 ) { if( key[ KEY_UP ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) milena_y--; else { milena_y += 5; speed = 0; } if( key[ KEY_DOWN ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) milena_y++; else { milena_y -= 5; speed = 0; } if( key[ KEY_LEFT ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) milena_x--; else { milena_x += 5; speed = 0; } if( key[ KEY_RIGHT ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) milena_x++; else { milena_x -= 5; speed = 0; } if( key[ KEY_W ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) paulina_y--; else { paulina_y += 5; speed = 0; } if( key[ KEY_S ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) paulina_y++; else { paulina_y -= 5; speed = 0; } if( key[ KEY_A ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) paulina_x--; else { paulina_x += 5; speed = 0; } if( key[ KEY_D ] ) if( kolizja( milena_x, milena_y, milena->w, milena->h, paulina_x, paulina_y, paulina->w, paulina->h ) == false ) paulina_x++; else { paulina_x -= 5; speed = 0; } speed--; } clear_to_color( bufor, makecol( 255, 0, 255 ) ); masked_blit( tlo, bufor, 0, 0, 0, 0, 800, 600 ); masked_blit( milena, bufor, 0, 0, milena_x, milena_y, milena->w, milena->h ); masked_blit( paulina, bufor, 0, 0, paulina_x, paulina_y, paulina->w, paulina->h ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); rest( 3 ); } destroy_bitmap( milena ); destroy_bitmap( paulina ); destroy_bitmap( bufor ); destroy_bitmap( tlo ); allegro_exit(); return 0; } END_OF_MAIN();
I nie wiem dalej jak zrobić, aby postać jak wejdzie w różowy kolor to nie byłoby kolizji. Z prostokątami działa jak się zderzą, chociaż czasem postać wejdzie jedna w drugą:) |