Kółko i krzyżyk na planszy (n x n) - sprawdzenie wygranej

0

Witam, mam planszę n x n, i teraz chcę (tak jak w grze kółko i krzyżyk, tylko na planszy dowolnego rozmiaru a nie 3x3) sprawdzić czy jest kolumna albo wiersz, albo po dwóch ukosach taka sama wartość we wszystkich polach (jeśli dla kogoś to niezrozumiałe co napisałem, to przesyłam załącznik, chcę sprawdzić rzeczy na czerwono zaznaczone).

Czy jest na to szybsza możliwość niż dwa podwójne for-y (jeden po wierszach, drugi po kolumnach) a potem sprawdzenie osobno dwóch przypadków po ukosie? Bo nie mam za bardzo innego pomysłu.

Ten for zrobiłbym tak (po wierszach):

{
bool isLine;
for(int i=0; i<n; ++i)
{
	isLine = true;
	int value = tab[i][0];

	for(int j=1; j<n; ++j)
	{
		if(value != tab[i][j])
		{
			isLine = false;
			break;
		}
	}

	if(isLine == true)
		return true;
}
//warunki dla ukośnych
//warunki po kolumnach

return false;

}
1

Jest szybsza metoda.
Wiesz gdzie ostatnio zrobiono ruch. Ergo zamiast przeszukiwać całą planszę, sprawdzasz tylko to co się przecina z ostatnim ruchem i pasuje do znaku gracza, który wykonał ruch.

Patrzać na kod:
int value = tab[i][0]; skąd pewność, że to nie jest puste pole?
Od kiedy w gomoku (kółko i krzyżyk n*n) trzeba zabezpieczyć całą kolumnę? Przecież wystarczy 5 w rzędzie.

0

Polecenie mam nieprecyzyjne, być może chodzi o gomoku. Jeśli tak, to próbuję obmyślić jak to zaimplementować, powiedzmy w tab[3][4] wstawiam krzyżyk i w lewym górnym rogu tej komórki, czyli tab[2][3] też go mam. Wtedy przechodzę do krawędzi planszy tą linią, czyli w tym przypadku tab[0][1] i robię pętlę sprawdzającą przez dwa w/w indeksy oraz mam licznik, który jest na początku zero, a ma dojechać do 5. Gdy dana komórka po drodze nie będzie krzyżykiem to zeruję licznik, gdy jest, to zwiększam licznik o 1, wychodzę z pętli jak dojedzie kolumna lub wiersz do n-1 indeksu lub z licznikiem równym 5. Tak mam to interpretować?
(tak naprawdę nie działam na int-ach, tylko enumie gdzie jest {EMPTY, CROSS, CIRCLE} a na początku tablicę wypełniam EMPTY, także pola nie są puste (znaczy są puste, ale w swoim rodzaju i trochę nie dopracowałem tego kodu co tu podałem wcześniej :P))

1 użytkowników online, w tym zalogowanych: 0, gości: 1