@ECHO OFF
REM ************************************************************************
REM
REM	                   TIC TAC TOE WSADOWO
REM                        -------------------
REM
REM                        autor: r.Q
REM                        licencja: GNU GPL
REM                        WWW: http://members.chello.pl/m.rataj
REM
REM	Ten modul kontroluje plansze pod wzgledem ewentualnej wygranej
REM	lub remisu. Przed rozpoczeciem petli sprawdzajacych postawiony
REM	jest straznik, ktory zapobiega narzutowi zwiazanemu z ciaglym
REM	wchodzeniem i wychodzeniem z petli. Wewnatrz petli natomiast
REM	znajduje sie kolejny straznik, ktory zapobiega dalszemu wykonaniu
REM	cykli petli w razie zwyciestwa ktoregos z graczy.
REM
REM	Opis zmiennych:
REM
REM		zgodnePola - zmienna kontroluje ilosc takich samych pol
REM				w kazdym cyklu petli sprawdzajacej wynik
REM				ruchu gracza. Za kazdym razem jest zerowana.
REM
REM		zapelnionePola - zachowuje ilosc zapelnionych pol planszy.
REM				Od tej zmienej zalezy wykrycie remisu.
REM
REM		nastepna i za_nastepna - zmienne przechowuja index (numer
REM					pola) planszy, odpowiadajacy ich nazwie.
REM		stanGry - zmienna przechwuje aktualny stan gry, sprawdzany
REM			przez modul 'ruch.bat'. Niezbedne by zakonczyc gre.
REM
REM ************************************************************************

SET zgodnePola=0
SET zapelnionePola=0
IF NOT %zgodnePola% EQU 2 FOR /L %%i IN (1,3,7) DO CALL :pozioma_linia %%i
IF NOT %zgodnePola% EQU 2 FOR /L %%i IN (1,1,3) DO CALL :pionowa_linia %%i
IF NOT %zgodnePOla% EQU 2 CALL :linia_ukosna
IF NOT %zgodnePola% EQU 2 FOR /L %%i IN (1,1,9) DO CALL :sprawdz_remis %%i
GOTO koniec

REM ************************SPRAWDZAM LINIE POZIOME*************************
:pozioma_linia %1
IF %zgodnePola% EQU 2 GOTO koniec
SET /A nastepny="%1+1"
SET /A za_nastepny="%1+2"
IF !plansza[%1]! EQU !plansza[%nastepny%]! SET /A zgodnePola+=1
IF !plansza[%nastepny%]! EQU !plansza[%za_nastepny%]! SET /A zgodnePola+=1
IF %zgodnePola% EQU 2 (GOTO wygrana) ELSE (SET zgodnePola=0)
GOTO koniec

REM ************************SPRAWDZAM LINIE PIONOWE*************************
:pionowa_linia %1
IF %zgodnePola% EQU 2 GOTO koniec
SET /A nastepny="%1+3"
SET /A za_nastepny="%1+6"
IF !plansza[%1]! EQU !plansza[%nastepny%]! SET /A zgodnePola+=1
IF !plansza[%nastepny%]! EQU !plansza[%za_nastepny%]! SET /A zgodnePola+=1
IF %zgodnePola% EQU 2 (GOTO wygrana) ELSE (SET zgodnePola=0)
GOTO koniec

REM ************************SPRAWDZAM LINIE UKOSNE**************************
:linia_ukosna
IF %zgodnePola% EQU 2 GOTO koniec
IF !plansza[1]! EQU !plansza[5]! SET /A zgodnePola+=1
IF !plansza[1]! EQU !plansza[9]! SET /A zgodnePola+=1
IF %zgodnePola% EQU 2 (GOTO wygrana) ELSE (SET zgodnePOla=0)
IF !plansza[3]! EQU !plansza[5]! SET /A zgodnePola+=1
IF !plansza[3]! EQU !plansza[7]! SET /A zgodnePola+=1
IF %zgodnePola% EQU 2 (GOTO wygrana) ELSE (SET zgodnePola=0)
GOTO koniec

REM ********************************WYGRANA*********************************
:wygrana
SET stanGry=koniec
ECHO.
ECHO.
IF "%aktualnyGracz%" EQU "O" (ECHO ZWYCIESTWO. Gracz stawiajacy kolko zwyciezyl. Gratulacje.) ELSE (ECHO ZWYCIESTWO. Gracz stawiajacy krzyzyk zwyciezyl. Gratulacje.)
ECHO Naciscij dowolny klawisz, aby powrocic do menu glownego . . .
PAUSE > NUL
GOTO koniec

REM ***********************SPRAWDZAM CZY MOZE JEST REMIS********************
:sprawdz_remis %1
IF "!plansza[%1]!" EQU "O" SET /A zapelnionePola+=1
IF "!plansza[%1]!" EQU "X" SET /A zapelnionePola+=1
IF %zapelnionePola% EQU 9 GOTO remis
GOTO koniec

:remis
SET stanGry=koniec
ECHO.
ECHO.
ECHO REMIS. Plansza jest w calosci zapelniona.
ECHO Naciscij dowolny klawisz, aby powrocic do menu glownego . . .
PAUSE > NUL

:koniec