Другие языки программирования и технологии

Задача по программированию Крестики-нолики ( Паскаль) . Помогите с решением, пожалуйста.

Игра в крестики-нолики ведётся на квадратном поле 3х3. Играют двое. Начинают "крестики". Каждый из игроков, поочерёдно, ставит свой значок, крестик или нолик, на свободную клетку. Выигрывает тот, кто первым поставит три своих значка вряд по вертикали, горизонтали или диагонали.
Задаётся последовательность ходов. Определить, кто выиграл, "крестики" или "нолики"?

Входные данные : Входной файл содержит информацию об игровом поле - 3 строки по 3 символа в каждой. Символ X означает крестик, символ O - нолик, а символ . пустую клетку.

Выходные данные :
В выходной файл OUTPUT.txt выведите в случае победы первого игрока WIN, в случае его проигрыша - Lose, и Draw в случае ничьей.

Примеры:

INPUT.txt:
.OX
.XO
XXO

OUPUT.txt :
WIN.
Если последовательность входящих символов представить как значения массива 3х3, то проверка выигрыша той или иной стороны сводится к проверке одного из 8 вариантов.


var M : array [1..3, 1..3] of Char;
wX, wO : Boolean;

ReadLn(M[1,1], M[1,2], M[1,3]);
ReadLn(M[2,1], M[2,2], M[2,3]);
ReadLn(M[3,1], M[3,2], M[3,3]);

{ Выиграл ли X }
wX := (M[1,1]='X') and (M[1,2]='X') and (M[1,3]='X') or { 3 горизонтальных строки}
(M[2,1]='X') and (M[2,2]='X') and (M[2,3]='X') or
(M[3,1]='X') and (M[3,2]='X') and (M[3,3]='X') or
(M[1,1]='X') and (M[2,1]='X') and (M[3,1]='X') or { 3 вертикальных столбца }
(M[1,2]='X') and (M[2,2]='X') and (M[3,2]='X') or
(M[1,3]='X') and (M[2,3]='X') and (M[3,3]='X') or
(M[1,1]='X') and (M[2,2]='X') and (M[3,3]='X') or { 2 диагонали }
(M[1,3]='X') and (M[2,2]='X') and (M[3,1]='X');

{ Выиграл ли O }
wX := (M[1,1]='O') and (M[1,2]='O') and (M[1,3]='O') or { 3 горизонтальных строки}
(M[2,1]='O') and (M[2,2]='O') and (M[2,3]='O') or
(M[3,1]='O') and (M[3,2]='O') and (M[3,3]='O') or
(M[1,1]='O') and (M[2,1]='O') and (M[3,1]='O') or { 3 вертикальных столбца }
(M[1,2]='O') and (M[2,2]='O') and (M[3,2]='O') or
(M[1,3]='O') and (M[2,3]='O') and (M[3,3]='O') or
(M[1,1]='O') and (M[2,2]='O') and (M[3,3]='O') or { 2 диагонали }
(M[1,3]='O') and (M[2,2]='O') and (M[3,1]='O');

{ Анализ результата }
case wX of
True : case wO of
True : … { Оба выиграли! Как это? Что то здесь тоже нужно вывести.. . Но что? }
False : WriteLn('WIN'); { X выиграл / О проиграл }
end;
False : case wO of
True : WriteLn('LOSE'); { X проиграл / О выиграл }
False : WriteLn('DRAW'); { Х проиграл / О проиграл }
end;

Вот и всё!
Аслан Ккк
Аслан Ккк
56 913
Лучший ответ