[SDL] Natychmiastowa reakcja na klikniecie
Ostatnio zmodyfikowano 2011-12-20 21:39
mostrom Temat założony przez niniejszego użytkownika |
[SDL] Natychmiastowa reakcja na klikniecie » 2011-12-20 20:30:52 Witam! to moje absolutne początki programowania grafiki. Tworzę coś w stylu gry - kółko i krzyżyk, tylko że dla uatwienia są same krzyżyki :D Program wyświetla bitmape z napisem "WYGRALES", gdy zaznaczone zostaną 2 kafle obok siebie plansza 10x10, daję kod: #include <SDL/SDL.h> #include <SDL/SDL_Image.h> #include <SDL/SDL_ttf.h>
SDL_Surface * ekran = NULL; SDL_Surface * kafel = NULL; SDL_Surface * kafelX = NULL; SDL_Surface * win = NULL;
SDL_Rect winP; SDL_Rect kafelK; SDL_Rect kafelD; SDL_Rect kursorP;
SDL_Rect plansza[ 10 ][ 10 ]; bool zaznaczone[ 10 ][ 10 ];
SDL_Event zdarzenie; Uint8 * keystate = SDL_GetKeyState( NULL ); bool wyjscie = false; int myszX, myszY;
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE | SDL_DOUBLEBUF ); kafel = IMG_Load( "kafelek.bmp" ); kafelX = IMG_Load( "kafelekX.bmp" ); win = IMG_Load( "win.bmp" ); kafelK.w = 32; kafelK.h = 32; kafelD.x = 50; kafelD.y = 50; winP.x = 200; winP.y = 150; for( int i = 0; i < 10; i++ ) { kafelD.x = kafelK.w +( i * 35 ); for( int j = 0; j < 10; j++ ) { kafelD.y = kafelK.h +( j * 35 ); SDL_BlitSurface( kafel, & kafelK, ekran, & kafelD ); plansza[ i ][ j ].x = kafelD.x; plansza[ i ][ j ].y = kafelD.y; } } while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) wyjscie = true; if( zdarzenie.type == SDL_MOUSEMOTION ) kursorP.x = zdarzenie.motion.x; kursorP.y = zdarzenie.motion.y; if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { if( zdarzenie.button.button == SDL_BUTTON_LEFT ) { for( int i = 0; i < 10; i++ ) { for( int j = 0; j < 10; j++ ) { if( kursorP.x >= plansza[ i ][ j ].x && kursorP.x <= plansza[ i ][ j ].x + kafelK.w && kursorP.y >= plansza[ i ][ j ].y && kursorP.y <= plansza[ i ][ j ].y + kafelK.h ) { if( !zaznaczone[ i ][ j ] ) { SDL_BlitSurface( kafelX, NULL, ekran, & plansza[ i ][ j ] ); zaznaczone[ i ][ j ] = true; } else { SDL_BlitSurface( kafel, NULL, ekran, & plansza[ i ][ j ] ); zaznaczone[ i ][ j ] = false; } } } } } } for( int i = 0; i < 10; i++ ) { for( int j = 0; j < 10; j++ ) { if( zaznaczone[ i ][ j ] == true &&( zaznaczone[ i + 1 ][ j + 1 ] == true || zaznaczone[ i + 1 ][ j ] == true || zaznaczone[ i ][ j + 1 ] == true || zaznaczone[ i - 1 ][ j - 1 ] == true || zaznaczone[ i - 1 ][ j ] == true || zaznaczone[ i ][ j - 1 ] == true ) ) { SDL_FillRect( ekran, NULL, 0 ); SDL_BlitSurface( win, NULL, ekran, & winP ); } } } } SDL_Flip( ekran ); } SDL_FreeSurface( kafel ); SDL_FreeSurface( kafelX ); return 0; }
Pomijam to, że program jest zbugowany, np nie uwzględnia tego, że tablica nie może mieć argumentu -1, ale chodzi mi o szybkość działania. Pewnie z powodu dużej ilości pętl, program po dłuższej ilości czasu wyświetla czy wygrałem. Pytanie: jak prawidłowo zamieścić pętlę w programie, żeby działał tak szybko, jak Windowskowski Saper? |
|
pekfos |
» 2011-12-20 21:39:42 Pytanie: jak prawidłowo zamieścić pętlę w programie, |
Poczytaj lepiej kurs.. |
|
« 1 » |