Witam. Piszę funkcję, która będzie wypełniała obszar o zadanym "kolorze" innym "kolorem". Problem jak zwykle ten sam czyli funkcja nie działa ;/. Mianowicie chodzi o to, że po wykonaniu pierwszej iteracji gdzie mamy inkrementację zmiennej "i" i osiągnięciu granicy mapy "MapSize_x" funkcja się zacina. Nie wiem dlaczego.
Opis funkcji:
i- wsp. x pixela
j -wsp. y pixela
MapSize_x i MapSize_y wymiary mapy odopwiednio w kierunku x i y
MainTab[] jednowymiarowa tablica (osobny stos ze względu na rozmiary), w której zapisywana jest cała mapa
3 - w tabeli pola oznaczone tą cyfrą tworzą granicę obszaru, który ma być wypełniony
n - jest to liczba, na którą funkcja ma zmienić wszystkie liczby w ograniczonej przestrzeni jeśli te są różne od trójki.
Pozostałe zmienne przekazywane do funkcji służą mi do wyświetlania na ekranie mapy żebym mógł śledzić działanie programu.
void FloodFill( int i, int j, int MapSize_x, int MapSize_y, int MainTab[], int n, SDL_Surface* screen2, Uint32 pixel)
{
if( i>=0 && j>=0 && i<=MapSize_x && j<=MapSize_y){
if ( MainTab[j*MapSize_x+i] != 3 ) {
MainTab[j*MapSize_x+i]=n;
// poniżej "odseparowny" kod wyświetlający wyniki na ekranie
/* put_pixel32(screen2, i,j, pixel);
apply_surface(0, 0, screen2, screen);
if( SDL_Flip( screen ) == -1 ){}
SDL_Delay(10);
*/
FloodFill( i+1, j, MapSize_x, MapSize_y, MainTab, n, screen2, pixel);
FloodFill( i-1, j, MapSize_x, MapSize_y, MainTab, n, screen2, pixel );
FloodFill( i, j+1, MapSize_x, MapSize_y, MainTab, n, screen2, pixel );
FloodFill( i, j-1, MapSize_x, MapSize_y, MainTab, n, screen2, pixel );
} }else break;
}