Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SDL.h>
- SDL_Surface * ekran = NULL;
- SDL_Surface * obraz = NULL;
- SDL_Rect sprst[ 3 ];
- SDL_Rect dprst[ 3 ];
- SDL_Event zdarzenie;
- bool wyjscie = false;
- void updateworld(int *mapa);
- void findway(int *mapa);
- int main( int argc, char * args[] )
- {
- SDL_Init( SDL_INIT_EVERYTHING );
- ekran = SDL_SetVideoMode( 320, 320, 32, SDL_SWSURFACE );
- obraz = SDL_LoadBMP( "sprite.bmp" );
- SDL_WM_SetCaption( "Graph", NULL );
- int mapa[10*10];
- for (int i =0; i<10*10; i++)
- mapa[i]=2;
- mapa[99]= 0;
- mapa[0] = 1;
- int myszkaY,myszkaX;
- while( !wyjscie )
- {
- while( SDL_PollEvent( & zdarzenie ) )
- {
- if( zdarzenie.type == SDL_QUIT )
- {
- wyjscie = true;
- }
- else if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
- {
- myszkaX = zdarzenie.motion.x;
- myszkaY = zdarzenie.motion.y;
- int x = myszkaX/32;
- int y = myszkaY/32;
- switch(zdarzenie.button.button)
- {
- case(SDL_BUTTON_LEFT):
- mapa[y*10 + x]=3;
- break;
- case(SDL_BUTTON_RIGHT):
- mapa[y*10 + x]=2;
- break;
- default:
- break;
- }
- }
- else if( zdarzenie.type == SDL_KEYDOWN )
- {
- switch( zdarzenie.key.keysym.sym )
- {
- case SDLK_F1:
- // search
- findway(mapa);
- break;
- }
- }
- }
- updateworld(mapa);
- SDL_Delay(1);
- }
- SDL_Quit();
- SDL_FreeSurface( obraz );
- return 0;
- }
- void updateworld(int *mapa)
- {
- SDL_Rect dest,source;
- dest.h=32; dest.w=32;
- source.h=32; source.w=32; source.y=0;
- for (int i =0; i<10*10; i++)
- {
- dest.y=(i/10) *32;
- dest.x=(i%10) * 32;
- source.x=mapa[i]*32;
- SDL_BlitSurface( obraz, & source, ekran, & dest );
- }
- SDL_Flip( ekran );
- }
- // algorytm
- struct point
- {
- bool odwiedzone;
- };
- bool search(int pos, int finish, point *bmapa, int *mapa)
- {
- // drawing part
- mapa[pos]=4;
- updateworld(mapa);
- SDL_Delay(200);
- // alg part
- bmapa[pos].odwiedzone=true;
- if (pos == finish)
- return true;
- else
- for (int x=-1; x<=1; x++)
- for (int y=-1; y<=1; y++)
- if (!bmapa[pos + y*10 +x].odwiedzone && !( x==0 && y==0) &&
- (pos + y*10 +x)>=0 && (pos + y*10 +x) <100)
- return search(pos + y*10 +x,finish,bmapa,mapa);
- }
- void findway(int *mapa)
- {
- point bmapa[100];
- for (int i =0; i<100; i++)
- if (mapa[i]==3)
- bmapa[i].odwiedzone=true;
- else
- bmapa[i].odwiedzone=false;
- search(0,99,bmapa,mapa);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement