Patzick Temat założony przez niniejszego użytkownika |
» 2008-09-02 21:11:38 niestety do tych kolizji trzeba znać rozmiary i położenie każdego elementu mapy, tak więc czy istnieje funkcja podobna do getpixel(), która zamiast pobierać 1 pixel pobiera 1 kafel mojej mapy z określonego terenu na ekranie? Jeżeli nie, to będę kombinował z podłożeniem drugiej mapy typu bool i ustawiał na niej miejsca gdzie można i gdzie nie można wejść, a potem wymyślę na to jakiś algorytm ;) w każdym razie jeżeli nie ma takiej funkcji to i tak wielkie dzięki za poświęcony czas :) |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-09-06 10:42:21 już nie mam pojęcia... zrobiłem mapę o takich samych parametrach jak mapa 1 i dodałem takie coś do kodu chodzenia if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if(( map2[ mapa_x + 9 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_RIGHT ] &&( mapa_x < 22 ) ) { ludek.kierunek = 1; if(( map2[ mapa_x + 12 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); } ; } if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; if(( map2[ mapa_x + 11 ][ mapa_y + 7 ] ) == 0 ) { mapa_y = mapa_y - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_DOWN ] &&( mapa_y < 22 ) ) { ludek.kierunek = 0; if(( map2[ mapa_x + 11 ][ mapa_y + 9 ] ) == 0 ) { mapa_y = mapa_y + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); } ; }
mapa jak w artykule z easykodera na podstawie cyfr wyświetla odpowiednie kafle. Po zrobieniu tego ludzik w ogóle się nie rusza i pojawia się tylko napis, a w koło niego (oprócz lewej strony są 0 czyli może normalnie chodzić. Co więc jest nie tak :( ? |
|
DejaVu |
» 2008-09-06 15:21:37 A gdzie masz kod, który przemieszcza ludka? |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-09-06 21:22:47 ludek się nie przemieszcza, on stoi w miejscu na środku, tylko mapa się przesuwa. Więc da się to tak zrobić? |
|
DejaVu |
» 2008-09-06 21:28:41 Z takiego fragmentu kodu niczego nie wywnioskujemy. |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-09-07 09:52:56 no dobra wkleję cały kod class Cpostac { public: int x, y, w, s; short int kierunek, klatka; };
Cpostac ludek;
#include <allegro.h>
int stan_zycia; int zycie, maxHP; int frame = 0;
volatile int close_button_pressed = FALSE; void close_button_handler( void ) { close_button_pressed = TRUE; } END_OF_FUNCTION( close_button_handler );
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int mapa_x = 0, mapa_y = 0; BITMAP * teren = NULL; BITMAP * bufor = NULL; BITMAP * ludekb = NULL; BITMAP * staty = NULL;
short int map[ 40 ][ 40 ] = { 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, 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, 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, 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, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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, };
void wys_mape() { int licznik_x, licznik_y; for( licznik_x = 0; licznik_x < 22; licznik_x++ ) { for( licznik_y = 0; licznik_y < 16; licznik_y++ ) { blit( teren, bufor, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 30, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 30, licznik_x * 30, licznik_y * 30, 30, 30 ); } } };
void pok_staty() { if(( zycie <= maxHP ) &&( zycie > 0.8 * maxHP ) ) { masked_blit( staty, bufor, 0, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.8 * maxHP ) &&( zycie > 0.6 * maxHP ) ) { masked_blit( staty, bufor, 60, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.6 * maxHP ) &&( zycie > 0.4 * maxHP ) ) { masked_blit( staty, bufor, 120, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.4 * maxHP ) &&( zycie > 0.2 * maxHP ) ) { masked_blit( staty, bufor, 180, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.2 * maxHP ) &&( zycie > 0 ) ) { masked_blit( staty, bufor, 240, 0, 0, 0, 60, 20 ); }; if( zycie == 0 ) { masked_blit( staty, bufor, 300, 0, 0, 0, 60, 20 ); }; textprintf_ex( bufor, font, 6, 6, makecol( 255, 255, 255 ), - 1, "%d/%d", zycie, maxHP ); };
void ruch() { while( speed > 0 ) { if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if(( map[ mapa_x + 9 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_RIGHT ] &&( mapa_x < 22 ) ) { ludek.kierunek = 1; if(( map[ mapa_x + 12 ][ mapa_y + 8 ] ) == 0 ) { mapa_x = mapa_x + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; if(( map[ mapa_x + 11 ][ mapa_y + 7 ] ) == 0 ) { mapa_y = mapa_y - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_DOWN ] &&( mapa_y < 22 ) ) { ludek.kierunek = 0; if(( map[ mapa_x + 11 ][ mapa_y + 9 ] ) == 0 ) { mapa_y = mapa_y + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } speed--; frame++; if( frame > 10 ) frame = 0; }; if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 5 ) { ludek.klatka = 1; } else if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 10 ) { ludek.klatka = 2; } else if( !( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) ) { ludek.klatka = 0; } masked_blit( ludekb, bufor, ludek.kierunek * 15, ludek.klatka * 30, ludek.x, ludek.y, 15, 30 ); blit( bufor, screen, 0, 0, 0, 0, 660, 480 ); };
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 660, 480, 0, 0 ); set_window_title( "Pierwsza Gra! :)" ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) ); teren = load_bmp( "Data/mapa.bmp", default_palette ); bufor = create_bitmap( 660, 480 ); ludekb = load_bmp( "Data/postac.bmp", default_palette ); staty = load_bmp( "Data/staty.bmp", default_palette ); LOCK_FUNCTION( close_button_handler ); set_close_button_callback( close_button_handler ); ludek.x = 308; ludek.y = 225; ludek.klatka = 0; ludek.kierunek = 0; while( !( key[ KEY_ESC ] || close_button_pressed ) ) { zycie = 34; maxHP = 100; wys_mape(); pok_staty(); ruch(); }; if( key[ KEY_ESC ] || close_button_pressed ) { allegro_message( "Dzieki i papa !" ); }; remove_int( increment_speed ); destroy_bitmap( ludekb ); destroy_bitmap( staty ); destroy_bitmap( teren ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN(); mam nadzieję, że to rozwiąże problem. |
|
DejaVu |
» 2008-09-07 12:53:09 Kolizja z wykorzystaniem mapy (rozwiązanie): class Cpostac { public: int x, y, w, s; short int kierunek, klatka; };
Cpostac ludek;
#include <allegro.h>
int stan_zycia; int zycie, maxHP; int frame = 0;
volatile int close_button_pressed = FALSE; void close_button_handler( void ) { close_button_pressed = TRUE; } END_OF_FUNCTION( close_button_handler );
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int mapa_x = 10, mapa_y = 7; BITMAP * teren = NULL; BITMAP * bufor = NULL; BITMAP * ludekb = NULL; BITMAP * staty = NULL;
short int map[ 40 ][ 40 ] = { 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, 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, 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, 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, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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, };
void wys_mape() { int szer = 22; int wys = 16; int przesunX = 10; int przesunY = 7; int licznik_x, licznik_y; for( licznik_x = 0 - przesunX; licznik_x < szer - przesunX; licznik_x++ ) { for( licznik_y = 0 - przesunY; licznik_y < wys - przesunY; licznik_y++ ) { if( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] == 0 ) blit( teren, bufor, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 30, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 30, ( licznik_x + przesunX ) * 30,( licznik_y + przesunY ) * 30, 30, 30 ); } } };
void pok_staty() { if(( zycie <= maxHP ) &&( zycie > 0.8 * maxHP ) ) { masked_blit( staty, bufor, 0, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.8 * maxHP ) &&( zycie > 0.6 * maxHP ) ) { masked_blit( staty, bufor, 60, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.6 * maxHP ) &&( zycie > 0.4 * maxHP ) ) { masked_blit( staty, bufor, 120, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.4 * maxHP ) &&( zycie > 0.2 * maxHP ) ) { masked_blit( staty, bufor, 180, 0, 0, 0, 60, 20 ); }; if(( zycie <= 0.2 * maxHP ) &&( zycie > 0 ) ) { masked_blit( staty, bufor, 240, 0, 0, 0, 60, 20 ); }; if( zycie == 0 ) { masked_blit( staty, bufor, 300, 0, 0, 0, 60, 20 ); }; textprintf_ex( bufor, font, 6, 6, makecol( 255, 255, 255 ), - 1, "%d/%d", zycie, maxHP ); textprintf_ex( bufor, font, 6, 26, makecol( 255, 255, 255 ), - 1, "%d/%d", mapa_x, mapa_y ); };
void ruch() { while( speed > 0 ) { ludek.klatka = 1; if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; if(( map[ mapa_y ][ mapa_x - 1 ] ) == 0 ) { mapa_x = mapa_x - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_RIGHT ] &&( mapa_x < 40 - 1 ) ) { ludek.kierunek = 1; if(( map[ mapa_y ][ mapa_x + 1 ] ) == 0 ) { mapa_x = mapa_x + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; if(( map[ mapa_y - 1 ][ mapa_x ] ) == 0 ) { mapa_y = mapa_y - 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } if( key[ KEY_DOWN ] &&( mapa_y < 40 - 1 ) ) { ludek.kierunek = 0; if(( map[ mapa_y + 1 ][ mapa_x ] ) == 0 ) { mapa_y = mapa_y + 1; } else { textprintf_ex( bufor, font, 156, 236, makecol( 255, 255, 255 ), - 1, "nie idziesz" ); }; } speed--; frame++; if( frame > 10 ) frame = 0; }; if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 5 ) { ludek.klatka = 1; } else if(( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) && frame < 10 ) { ludek.klatka = 2; } else if( !( key[ KEY_LEFT ] || key[ KEY_RIGHT ] || key[ KEY_UP ] || key[ KEY_DOWN ] ) ) { ludek.klatka = 0; } ludek.klatka = 0; ludek.kierunek = 0; masked_blit( ludekb, bufor, ludek.kierunek * 15, ludek.klatka * 30, ludek.x, ludek.y, 30, 30 ); blit( bufor, screen, 0, 0, 0, 0, 660, 480 ); };
int main() { allegro_init(); install_keyboard(); install_timer(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 660, 480, 0, 0 ); set_window_title( "Pierwsza Gra! :)" ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) ); teren = load_bmp( "Data/mapa.bmp", default_palette ); bufor = create_bitmap( 660, 480 ); ludekb = load_bmp( "Data/postac.bmp", default_palette ); staty = load_bmp( "Data/staty.bmp", default_palette ); LOCK_FUNCTION( close_button_handler ); set_close_button_callback( close_button_handler ); ludek.x = 300; ludek.y = 210; ludek.klatka = 0; ludek.kierunek = 0; while( !( key[ KEY_ESC ] || close_button_pressed ) ) { clear( bufor ); zycie = 34; maxHP = 100; wys_mape(); pok_staty(); ruch(); rest( 10 ); }; if( key[ KEY_ESC ] || close_button_pressed ) { allegro_message( "Dzieki i papa !" ); }; remove_int( increment_speed ); destroy_bitmap( ludekb ); destroy_bitmap( staty ); destroy_bitmap( teren ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-09-07 17:29:37 nareszcie :) wszystko idealnie, wielkie dzięki. Jeszcze tylko jedno pytanie do skrócenia kodu. Czy da się uprościć zapis if(( map[ mapa_y ][ mapa_x - 1 ] ) == 0 ||(( map[ mapa_y ][ mapa_x - 1 ] ) == 1 ) ) próbowałem if(( map[ mapa_y ][ mapa_x - 1 ] ) ==( 0 || 1 ) ) if(( map[ mapa_y ][ mapa_x - 1 ] ) ==(( 0 ) ||( 1 ) ) i nic z tego nie działa tak jak powinno. Jeżeli mógłbym dostać odpowiedź byłoby miło, a i tak naprawdę wielkie dzięki za pomoc :) |
|
1 « 2 » 3 |