char SprawdzStan(plansza * X)//nie działa poprawnie, nie dla wszystkich
{
int x, y, j;
znak z;
if(X->iteracja % 2 == 0)
if(X->zn == Kolko)
z = Kolko;
else
z = Krzyzyk;
else
if(X->zn == Kolko)
z = Krzyzyk;
else
z = Kolko;
for(y = 0; y < X->rozm; y++)// poziom --
for(x = 0; x < X->rozm - X->ile + 1; x++)
if(X->tab[x][y] == z)
for(j = 0; (j < X->ile) && (X->tab[x + j][y] == z); j++)
if(j == X->ile - 1)
{
printf("x: %d y: %d j: %d znaki: %c %c %c i znak: %c\n", x, y, j, X->tab[x][x], X->tab[x+1][y], X->tab[x+2][y], z);
return X->tab[x][y];
}
for(x = 0; x < X->rozm; x++)//pion ogólnie
for(y = 0; y < X->rozm - X->ile + 1; y++)
if(X->tab[x][y] == z)
{
for(j = 0; (j < X->ile) && (X->tab[x][y + j] == z); j++)// pion |
if(j == X->ile - 1)
{
printf("x: %d y: %d j: %d znaki: %c %c %c i znak: %c\n", x, y, j, X->tab[x][x], X->tab[x][y+1], X->tab[x][y+2], z);
return X->tab[x][y];
}
if(x < X->rozm - X->ile + 1)// ukos \
for(j = 0; (X->tab[x + j][y + j] == z) && (j < X->ile); j++)
if(j == X->ile - 1)
{
printf("x: %d y: %d j: %d znaki: %c %c %c i znak: %c\n", x, y, j, X->tab[x][x], X->tab[x+1][y+1], X->tab[x+2][y+2], z);
printf("Warunek l: %d p: %d lp: %d\n", (j < X->ile), (X->tab[x + j][y + j] == z), (j < X->ile) && (X->tab[x + j][y + j] == z));
return X->tab[x][y];
}
if(x >= X->ile - 1)// ukos /
for(j = 0; (j < X->ile) && (X->tab[x - j][y + j] == z); j++)
if(j == X->ile - 1)
{
printf("x: %d y: %d j: %d znaki: %c %c %c i znak: %c\n", x, y, j, X->tab[x][x], X->tab[x-1][y+1], X->tab[x-2][y+2], z);
return X->tab[x][y];
}
}
printf("Sprawdzenie w %d iteracji\n", X->iteracja);
return 0;
}
Nawet wstawiłem sobie te różne w printf. Co najdziwniejsze, w printf warunki pokazują odpowiednio: 1, 0, 0, czyli pętla for nie powinna dopuścić do tego, chyba, że operatory mi się coś pomyliły. Jak na razie działam na tablicy 3x3 i nie będę opisywał poszczególnych przypadków, lecz nie działa tak, jak powinno. Stosowałem debugger i stąd się dowiedziałem, że dla sytuacji, gdy podaję dla 1x1, potem ruch komputera, potem 1x2, ruch komputera i funkcja zwraca jakiś znak, co nie powinno się zdarzyć. Jak wypełnię w pionie 3 pola, to też nie kończy. Piszę, bo nie wiem dlaczego tak wariuje, wypisuję sobie te warunki jeszcze w printf, a for to przepuszcza. Wytłumaczy mi to ktoś?
Tablica standardowo jest wypełniona zerami, daję znak, jak jest ruch danego gracza.