malan |
» 2010-07-24 18:34:25 Dobra. Troch mi to zajęło, ale udało się :). Problem leżał w tym, że: blit( domek1, bufor, 0, 0, domek1_x, domek1_y, domek1_s, domek1_w ); blit( ludek1, bufor, 0, 0, ludek1_x, ludek1_y, ludek1->h, ludek1->w ); blit( bufor, screen, 0, 0, 0, 0, szerokosc, wysokosc );
if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) )
Przy takim układzie na pozycji ludek1_x ; ludek1_y była przecież postać (czyli żółta plama)! :) Program cały czas pobierał kolor postaci :). Dlatego trzeba zmienić kolejność i już ;p. Tutaj masz sformatowany i działający kod. Chłopie zmień styl, bo ciężko Cie będzie rozczytać (przynajmniej mi było) ;p. #include <allegro.h> #include <winalleg.h> #include <windows.h>
int mx = 0, my = 0, mb = 0;
BITMAP * kursor;
void laduj_kursor() { kursor = load_bitmap( "media/kursor.bmp", NULL ); if( !kursor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie moge zaladowac grafiki ( kursor )" ); allegro_exit(); } };
void myszkaa() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
volatile long speed = 0;
void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
void init(); void deinit();
int szerokosc = 800; int wysokosc = 600;
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, 800, 600, 0, 0 ); if( res != 0 ) { MessageBox( HWND_DESKTOP, "Nie można uruchomić gry, ponieważ rozdzielczość nie jest obsługiwana!", "ERROR", MB_OK + MB_ICONERROR ); exit( - 1 ); } install_keyboard(); install_mouse(); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 150 ) ); install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" ); set_volume( 255, 255 ); laduj_kursor(); show_mouse( screen ); unscare_mouse(); }
void deinit() { clear_keybuf(); }
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { init(); BITMAP * ludek1 = NULL; BITMAP * domek1 = NULL; BITMAP * bufor = NULL; int ludek1_x = 0, ludek1_y = 0; int domek1_x = 0, domek1_y = 0; int pixelColor = 0; SAMPLE * dzwiek = NULL; ludek1 = load_bmp( "media/czlowiek1.bmp", default_palette ); if( !ludek1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); MessageBox( HWND_DESKTOP, "Nie można załadować grafiki!\nGra zostanie zamknięta!", "ERROR", MB_OK + MB_ICONERROR ); allegro_exit(); return 0; } domek1 = load_bmp( "media/domek1.bmp", default_palette ); if( !domek1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); MessageBox( HWND_DESKTOP, "Nie można załadować grafiki!\nGra zostanie zamknięta!", "ERROR", MB_OK + MB_ICONERROR ); allegro_exit(); return 0; } dzwiek = load_sample( "media/muza.wav" ); if( !dzwiek ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); MessageBox( HWND_DESKTOP, "Nie można załadować dźwięku!\nGra zostanie zamknięta!", "ERROR", MB_OK + MB_ICONERROR ); allegro_exit(); return 0; } bufor = create_bitmap( 800, 600 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); MessageBox( HWND_DESKTOP, "Nie można utworzyć bufora!\nGra zostanie zamknięta!", "ERROR", MB_OK + MB_ICONERROR ); allegro_exit(); return 0; } play_sample( dzwiek, 255, 127, 1000, 1 ); ludek1_x = 350; ludek1_y = 150; domek1_x = 150; domek1_y = 100; while( !key[ KEY_ESC ] ) { myszkaa(); clear_to_color( bufor, makecol( 0, 0, 0 ) ); textout_ex( bufor, font, "Pieniadze: ", 50, 30, makecol( 255, 0, 255 ), - 1 ); textout_ex( bufor, font, "Pojazd: ", 50, 50, makecol( 255, 0, 255 ), - 1 ); textout_ex( bufor, font, "Zawod: ", 50, 70, makecol( 255, 0, 255 ), - 1 ); textout_ex( bufor, font, "Przyjaciele: ", 350, 30, makecol( 255, 0, 255 ), - 1 ); textout_ex( bufor, font, "Wiek: ", 350, 50, makecol( 255, 0, 255 ), - 1 ); textprintf_ex( bufor, font, 700, 10, makecol( 0, 0, 255 ), - 1, "X: %d", ludek1_x ); textprintf_ex( bufor, font, 700, 20, makecol( 0, 0, 255 ), - 1, "Y: %d", ludek1_y ); textprintf_ex( bufor, font, 700, 30, makecol( 0, 0, 255 ), - 1, "R: %d", getr( pixelColor ) ); textprintf_ex( bufor, font, 700, 40, makecol( 0, 0, 255 ), - 1, "G: %d", getg( pixelColor ) ); textprintf_ex( bufor, font, 700, 50, makecol( 0, 0, 255 ), - 1, "B: %d", getb( pixelColor ) ); masked_blit( domek1, bufor, 0, 0, domek1_x, domek1_y, domek1->w, domek1->h ); while( speed > 0 ) { if( key[ KEY_W ] ) if( getpixel( bufor, ludek1_x, ludek1_y - 1 ) != makecol( 0, 0, 255 ) ) ludek1_y--; else textprintf_ex( bufor, font, 50, 100, makecol( 255, 255, 0 ), 0, "Sciana!" ); if( key[ KEY_S ] ) if( getpixel( bufor, ludek1_x, ludek1_y + 1 ) != makecol( 0, 0, 255 ) ) ludek1_y++; else textprintf_ex( bufor, font, 50, 100, makecol( 255, 255, 0 ), 0, "Sciana!" ); if( key[ KEY_A ] ) if( getpixel( bufor, ludek1_x - 1, ludek1_y ) != makecol( 0, 0, 255 ) ) ludek1_x--; else textprintf_ex( bufor, font, 50, 100, makecol( 255, 255, 0 ), 0, "Sciana!" ); if( key[ KEY_D ] ) if( getpixel( bufor, ludek1_x + 1, ludek1_y ) != makecol( 0, 0, 255 ) ) ludek1_x++; else textprintf_ex( bufor, font, 50, 100, makecol( 255, 255, 0 ), 0, "Sciana!" ); speed--; } masked_blit( ludek1, bufor, 0, 0, ludek1_x, ludek1_y, ludek1->w, ludek1->h ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h ); rest( 1 ); } stop_sample( dzwiek ); destroy_sample( dzwiek ); remove_int( increment_speed ); destroy_bitmap( bufor ); destroy_bitmap( ludek1 ); destroy_bitmap( domek1 ); deinit(); return( 0 ); } Mam nadzieję, że o to chodziło :). Sformatuj sobie po swojemu jak chcesz ;)./edit Blokadę wyjścia poza ekran sam dorób, bo zapomniałem, ale kod i tak jest parę postów wcześniej :). |