• Главная
  • Блог
  • Пользователи
  • Форум
  • Литературное творчество
  • Музыкальное творчество
  • Научно-техническое творчество
  • Художественно-прикладное творчество

Как научить компьютер играть в «Крестики-нолики»

Опубликовано Джаноян Елена Владимировна вкл 07.01.2015 - 12:45
Джаноян Елена Владимировна
Автор: 
Джиджоев Владислав

«Свою первую программу я написал в 13 лет - для игры в крестики-нолики».  Так начинается автобиографическая книга Билла Гейтса «Дорога в будущее». По странному совпадению, свою первую программу на Pascalя тоже написал по алгоритму игры «Крестики-нолики».  Эта простейшая логическая игра, становится стартом для многих программистов, кем и я хочу стать в дальнейшем.

В эту игру нужно играть с человеком, но интереснее, когда твоим противником становится компьютер. Для того чтобы машина «умела» играть, ее надо «научить» - снабдить искусственным интеллектом.

Искусственный интеллект (ИИ, англ. Artificialintelligence, AI) — наука и технология создания интеллектуальных машин, особенно интеллектуальных компьютерных программ. ИИ связан со сходной задачей использования компьютеров для понимания человеческого интеллекта, но не обязательно ограничивается биологически правдоподобными методами.

В этой работе описан мой алгоритм программы игры «Крестики-нолики». Программа создана в FreePascal 2.4.4.

Существует много алгоритмов игры «Крестики-нолики», но этот алгоритм необычен.В простом режиме компьютер сделает ходы на первую попавшуюся пустую клетку.А в сложном режиме создан Искусственный Интеллект для компьютера - смоделировано, как бы думал простой человек, играя в Крестики-Нолики. Перед созданием игры, были проанализированы мысли человека, играющего в Крестики-нолики.

В работе описан интерфейс игры, алгоритм программы. 

Скачать:

ВложениеРазмер
Файл krestiki-noliki.docx121.42 КБ

Предварительный просмотр:

Тема: «Как научить компьютер играть в «Крестики-

              нолики»

Автор работы:

Джиджоев Владислав Муратович

Научный руководитель:

Джаноян Елена Владимировна,

учитель информатики

Владикавказ

Оглавление

Введение ………………………………………………………………….. 3

Описание интерфейса игры……………………………………………… 5

Описание алгоритма игры ………………………………………………. 6

Заключение ………………………………………………………………. 13

Библиография…………………………………………………………….. 14

Приложение ……………………………………………………. 15

Введение

«Свою первую программу я написал в 13 лет - для игры в крестики-нолики».  Так начинается автобиографическая книга Билла Гейтса «Дорога в будущее». По странному совпадению, свою первую программу на Pascalя тоже написал по алгоритму игры «Крестики-нолики».  Эта простейшая логическая игра, становится стартом для многих программистов, кем и я хочу стать в дальнейшем.

Крестики-нолики — логическая игра, в которую играют два противника на квадратном поле 3 на 3 клетки или большего размера (вплоть до «бесконечного поля»). Один из игроков играет «крестиками», второй — «ноликами».

Описание игры: «Игроки по очереди ставят на свободные клетки поля 3х3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 свои фигуры по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики».[1]

Обычно по завершении партии выигравшая сторона зачёркивает чертой свои три знака (нолика или крестика), составляющих сплошной ряд.

Вот некоторые стратегии игры:

В эту игру нужно играть с человеком, но интереснее, когда твоим противником становится компьютер. Для того чтобы машина «умела» играть, ее надо «научить» - снабдить искусственным интеллектом.

Искусственный интеллект (ИИ, англ. Artificialintelligence, AI) — наука и технология создания интеллектуальных машин, особенно интеллектуальных компьютерных программ. ИИ связан со сходной задачей использования компьютеров для понимания человеческого интеллекта, но не обязательно ограничивается биологически правдоподобными методами.[2]

В своей работе я опишу свой алгоритм программы игры «Крестики-нолики». Программу создал в FreePascal 2.4.4.

FreePascalCompiler (FPC) - это свободно распространяемый компилятор языка Паскаль с открытыми исходными кодами. Он совместим с BorlandPascal 7 и ObjectPascal – Delphi, но при этом обладает рядом дополнительных возможностей, например, поддерживает перегрузку операторов. [3]

Описание интерфейса игры

В программе «Крестики-нолики» существует возможность выбора количества игроков (1 или 2).

Если было выбрано 2 игрока, то в игре участвуют два человека.

Если был выбран 1 игрок, то человек играет с компьютером.

Причем, при игре с компьютером есть возможность  выбора сложности игры.

Для хода игрока необходимо указать номер столбика и номер строки. Отсчет производится с верхнего левого угла.

Окончание игры: фиксируется результат и дается возможность выбора продолжения игры.

Описание алгоритма игры

Существует много алгоритмов игры «Крестики-нолики», но мой алгоритм необычен.

В простом режиме компьютер сделает ходы на первую попавшуюся пустую клетку.

if easy then

begin

                // простойрежим

for i := 0 to 2 do

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end

А в сложном режиме я создал Искусственный Интеллект для компьютера. Но я не переписывал на язык Pascal алгоритм,приведённый выше. Я смоделировал, как бы думал простой человек, играя в Крестики-Нолики. Перед созданием игры, я попытался проанализировать мысли человека, играющего в Крестики-Нолики. С одной стороны, каждый человек думает по-разному, но общий ход мыслей выявить, возможно.

Вот ход мыслей человека:

1. Сначала человек проверяет, может ли он победить, сделав прямо сейчас один ход. Если да, то он ходит так, чтобы победить.

Компьютер это делает так:

for i := 0 to 2 do

begin

if ((table[i, 0] = 2) and (table[i, 1] = 2))

or ((table[i, 0] = 2) and (table[i, 2] = 2))

or ((table[i, 1] = 2) and (table[i, 2] = 2)) then

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end;

for i := 0 to 2 do

begin

if ((table[0, i] = 2) and (table[1, i] = 2)) or ((table[0, i] = 2) and (table[2, i] = 2)) or ((table[1, i] = 2) and (table[2, i] = 2)) then

begin

if table[0, i] = 0 then

begin

table[0, i] := 2;

exit;

end;

if table[1, i] = 0 then

begin

table[1, i] := 2;

exit;

end;

if table[2, i] = 0 then

begin

table[2, i] := 2;

exit;

end;

end;

end;

if ((table[0, 0] = 2) and (table[1, 1] = 2)) or         ((table[0, 0] = 2) and (table[2, 2] = 2)) or

((table[1, 1] = 2) and (table[2, 2] = 2)) then

begin

if table[0, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[2, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

if ((table[2, 0] = 2) and (table[1, 1] = 2)) or

((table[2, 0] = 2) and (table[0, 2] = 2)) or

((table[1, 1] = 2) and (table[0, 2] = 2)) then

begin

if table[2, 0] = 0 then

begin

table[2, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[0, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

2. Если нет, то человек проверяет, не может ли соперник одним ходом, прямо сейчас, победить. Если да, то человек защищается.

Компьютер делает это так:

// проверка прямой победы человека

Fori := 0 to 2 do

begin

if ((table[i, 0] = 1) and (table[i, 1] = 1)) or ((table[i, 0] = 1) and (table[i, 2] = 1)) or ((table[i, 1] = 1) and (table[i, 2] = 1)) then

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end;

for i := 0 to 2 do

begin

if ((table[0, i] = 1) and (table[1, i] = 1)) or ((table[0, i] = 1) and (table[2, i] = 1)) or ((table[1, i] = 1) and (table[2, i] = 1)) then

begin

if table[0, i] = 0 then

begin

table[0, i] := 2;

exit;

end;

if table[1, i] = 0 then

begin

table[1, i] := 2;

exit;

end;

if table[2, i] = 0 then

begin

table[2, i] := 2;

exit;

end;

end;

end;

if ((table[0, 0] = 1) and (table[1, 1] = 1)) or

((table [0, 0] = 1) and (table[2, 2] = 1)) or

((table[1, 1] = 1) and (table[2, 2] = 1)) then

begin

if table[0, 0] = 0 then

begin

table[0, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[2, 2] = 0 then

begin

table[2, 2] := 2;

exit;

end;

end;

if ((table[2, 0] = 1) and (table[1, 1] = 1)) or

((table[2, 0] = 1) and (table[0, 1] = 1)) or

((table[1, 1] = 1) and (table[0, 2] = 1)) then

begin

if table[2, 0] = 0 then

begin

table[2, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[0, 2] = 0 then

begin

table[0, 2] := 2;

exit;

end;

end;

3. Если нет, то человек думает, как бы сделать так, чтобы соперник не схитрил, и не обыграл его тактически.

Компьютер это делает так.

// проверка победы человека через ход.

if (table[0, 0] = 1) and (table[0, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[0, 0] = 1) and (table[2, 0] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[0, 2] = 1) and (table[2, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[2, 0] = 1) and (table[2, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[2, 2] = 1) and (table[1, 1] = 1) then

begin

if table[0, 2] = 0 then

begin

table[0, 2] := 2;

exit;

end;

end;

4. Далее человек делает «умные ходы», чтобы самому обыграть противника.

Компьютер это делает умные ходы вот так:

// умныеходы

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

5. Если в 4 действии умные ходы сделать нельзя, человек делает ход в любую клетку.

// генерация случайного хода.

Fori := 0 to 2 do

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

end;

end;

Заключение

В данной  работе я описал, как была создана моя первая игра. С ее помощью я расширил свои знания в языке программирования Pascal. Попробовал создать искусственный интеллект для компьютера. И данная программа стала стартом  моим начинаниям в создании других компьютерных игр. Еще один вывод, который я сделал по окончанию работы, что для того чтобы компьютер что-либо сделал – его надо этому научить, т.е. создать искусственный интеллект. А когда компьютер выигрывает у моих друзей, я им «горжусь», потому что это моя победа.

Библиография

  1. http://ru.wikipedia.org/wiki/Крестики-нолики
  2. http://ru.wikipedia.org/wiki/Искусственный_интеллект
  3. http://freepascal.ru
  4. Гольденберг В.А. Введение в программирование. Библиотека школьника. Учебное пособие. Минск, "Харвест", 1997.
  5. Деревенец О.В. Песни о Паскале. Интернет, 2011.
  6. ФароновВ.В. Turbo Pascal. Наиболее полное руководство в подлиннике. БХВ-Петербург, 2004.

Приложение

programKrestiki_noliki; // Игра крестики нолики.

usesCrt, MainLoop{Главная подпрограмма в этом модуле + ещё куча подпрограмм};

type

matrix = array[0..2, 0..2] of byte; // матрицаиз 3 элементов.

tset = setof 0..2;     // множество чисел в диапазоне от 0 до 3.

var

table: matrix;

c_players: integer; // кол-воигроков

tab: tset;

procedureAbout;  { Функция, сообщающая о создателях }

begin

WriteLn('Крестики-нолики v 2.0.Copyright (с) Джиджоев Владислав. 2011 год.');

end;

begin

repeat

cursoron; // показатькурсорвокне

ClrScr; // очистить экран

easy := false; // уровень = СЛОЖНЫЙ!!!

hasWinner := false; //победителей - НЕТ!!!

About; // показываем, кто здесь главный!!!

repeat

Write('Введите кол-во игроков(1, 2): '); ReadLn(c_players); // запрашиваем кол-во геймеров

until ((c_players = 0) or (c_players = 1) or (c_players = 2));

casec_players of

                        0: exit;

1: begin

Write('Выхотитеигратьвусложнённомрежиме(Y/N)? ');

ReadLn(answer);

answer := upCase(answer);

case answer of

                                        'Y': easy := false;

else easy := true;

end

end

end;

if { началоигры }  MainLoop.MainLoop(table, c_players, easy, tab) { конецигры } <> 0 then break;

until false; // Вечныйцикл.

WriteLn('Нажмителюбуюклавишудлявыхода. . .');

cursoroff; // вырубаемкурсор

ReadKey;

end.

unitMainLoop;

interface

type

matrix = array[0..2, 0..2] of byte;

tset = set of 0..3;

var

x, y, i, i2, Winner: integer;

easy, hasWinner: boolean;

answer: char;

functionMainLoop(table: matrix; c_players: integer; easy: boolean; tab: tset): byte;

implementation

usesCrt, computer;

procedureRefreshTab(var tab: tset; table: matrix);

begin

        tab := [table[0, 0], table[1, 0], table[2, 0], table[0, 1], table[1, 1], table[2, 1], table[0, 2], table[1, 2], table[2, 2]];

end;

procedure Logic(table: matrix; varhasWinner: boolean; var Winner: integer; tab: tset);

var

        i: integer;

begin

        // Проверка первого игрока.

for i := 0 to 2 do

begin

if (table[i, 0] = 1) and (table[i, 1] = 1) and (table[i, 2] = 1) then

begin

hasWinner := true;

Winner := 1;

exit

end

end;

for i := 0 to 2 do

begin

if (table[0, i] = 1) and (table[1, i] = 1) and (table[2, i] = 1) then

begin

hasWinner := true;

Winner := 1;

exit

end

end;

if (table[0, 0] = 1) and (table[1, 1] = 1) and (table[2, 2] = 1) then

begin

hasWinner := true;

Winner := 1;

exit

end;

if (table[0, 2] = 1) and (table[1, 1] = 1) and (table[2, 0] = 1) then

begin

hasWinner := true;

Winner := 1;

exit

end;

// Проверка второго игрока.

fori := 0 to 2 do

begin

if (table[i, 0] = 2) and (table[i, 1] = 2) and (table[i, 2] = 2) then

begin

hasWinner := true;

Winner := 2;

exit

end

end;

for i := 0 to 2 do

begin

if (table[0, i] = 2) and (table[1, i] = 2) and (table[2, i] = 2) then

begin

hasWinner := true;

Winner := 2;

exit

end

end;

if (table[0, 0] = 2) and (table[1, 1] = 2) and (table[2, 2] = 2) then

begin

hasWinner := true;

Winner := 2;

exit

end;

if (table[0, 2] = 2) and (table[1, 1] = 2) and (table[2, 0] = 2) then

begin

hasWinner := true;

Winner := 2;

exit

end;

        // проверканичьи

RefreshTab(tab, table);

if not (0 in tab) then

begin

hasWinner := true;

Winner := 0;

exit;

end;

end;

procedureDrawNet(table: matrix);

begin

WriteLn('+---+---+---+');

Write('| ');

case table[0, 0] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[1, 0] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[2, 0] of

                0: WriteLn('  |');

                1: WriteLn('x |');

                2: WriteLn('o |');

end;

WriteLn('+---+---+---+');

Write('| ');

case table[0, 1] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[1, 1] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[2, 1] of

                0: WriteLn('  |');

                1: WriteLn('x |');

                2: WriteLn('o |');

end;

WriteLn('+---+---+---+');

Write('| ');

case table[0, 2] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[1, 2] of

                0: Write('  | ');

                1: Write('x | ');

                2: Write('o | ');

end;

case table[2, 2] of

                0: WriteLn('  |');

                1: WriteLn('x |');

                2: WriteLn('o |');

end;

WriteLn('+---+---+---+');

end;

procedureDrawPlayers(c_players: integer; easy: boolean);

begin

Write('Первый игрок: Человек. Второйигрок: ');

if (c_players = 1) then

begin

Write('Компьютер.');

if (not easy) then

Write(' Включёнсложныйрежим.');

WriteLn;

end

else

WriteLn('Человек.');

end;

procedure About;

begin

WriteLn('Крестики-нолики v 2.0. Джиджоев Владислав(с). 2011 год.');

end;

procedureRefreshGameDisplay(table: matrix; c_players: integer; easy: boolean);

begin

ClrScr;

        About;

WriteLn;

DrawPlayers(c_players, easy);

WriteLn;

DrawNet(table);

end;

functionMainLoop(table: matrix; c_players: integer; easy: boolean; tab: tset): byte;

begin

MainLoop := 0;

repeat

RefreshGameDisplay(table, c_players, easy);

Logic(table, hasWinner, Winner, tab);

ifhasWinner then

begin

Write('Выиграл ');

if (Winner = 1) and (c_players = 1) then

WriteLn('Человек.');

if (Winner = 1) and (c_players = 2) then

WriteLn('Игрок 1.');

if (Winner = 2) and (c_players = 1) then

WriteLn('компьютер.');

if (Winner = 2) and (c_players = 2) then

WriteLn('Игрок 2.');

if Winner = 0 then

begin

DelLine;

WriteLn('Ничья!');

end;

Write('Выйтиизигры(Y/N)? ');

ReadLn(answer);

upCase(answer);

if answer = 'Y' then

exit(1)

else

exit;

end;

Write('ХодИгрока');

ifc_players = 1 then

WriteLn('.')

else

WriteLn(' 1.');

WriteLn;

repeat

repeat

Write('Номерстолбика: ');

ReadLn(x);

until (x < 4) and (x > 0);

repeat

Write('Номерстроки: ');

ReadLn(y);

until (y < 4) and (y > 0);

if table[x - 1, y - 1] <> 0 then

begin

WriteLn('Ячейказанята.');

continue

end

else

break;

until false;

table[x - 1, y - 1] := 1;

RefreshGameDisplay(table, c_players, easy);

Logic(table, hasWinner, Winner, tab);

ifhasWinner then

begin

Write('Выиграл ');

if (Winner = 1) and (c_players = 1) then

WriteLn('Человек.');

if (Winner = 1) and (c_players = 2) then

WriteLn('Игрок 1.');

if (Winner = 2) and (c_players = 1) then

WriteLn('компьютер.');

if (Winner = 2) and (c_players = 2) then

WriteLn('Игрок 2.');

if Winner = 0 then

begin

DelLine;

WriteLn('Ничья!');

end;

Write('Выйтиизигры(Y/N)? ');

ReadLn(answer);

upCase(answer);

if answer = 'Y' then

exit(1)

else

exit;

end;

Write('Ход ');

ifc_players = 1 then

WriteLn('Компьютера.')

else

WriteLn('Игрока 2.');

WriteLn;

ifc_players = 2 then

begin

repeat

repeat

Write('Номерстолбика: ');

ReadLn(x);

until (x < 4) and (x > 0);

repeat

Write('Номерстроки: ');

ReadLn(y);

until (y < 4) and (y > 0);

if table[x - 1, y - 1] <> 0 then

begin

WriteLn('Ячейказанята.');

continue

end

else

break;

until false;

table[x - 1, y - 1] := 2;

end;

ifc_players = 1 then

begin

WriteLn('Компьютердумает...');

computer.computer(table, easy);

end;

until false; // Вечныйцикл.

end;

end.

unit computer;

interface

type

matrix = array[0..2, 0..2] of byte;

procedure computer(var table: matrix; easy: boolean);

implementation

procedure computer(var table: matrix; easy: boolean);

var

i: integer;

begin

if easy then

begin

                // простойрежим

for i := 0 to 2 do

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end

else

begin

// сложный режим

                // проверка прямой победы компьютера

for i := 0 to 2 do

begin

if ((table[i, 0] = 2) and (table[i, 1] = 2)) or ((table[i, 0] = 2) and (table[i, 2] = 2)) or ((table[i, 1] = 2) and (table[i, 2] = 2)) then

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end;

for i := 0 to 2 do

begin

if ((table[0, i] = 2) and (table[1, i] = 2)) or ((table[0, i] = 2) and (table[2, i] = 2)) or ((table[1, i] = 2) and (table[2, i] = 2)) then

begin

if table[0, i] = 0 then

begin

table[0, i] := 2;

exit;

end;

if table[1, i] = 0 then

begin

table[1, i] := 2;

exit;

end;

if table[2, i] = 0 then

begin

table[2, i] := 2;

exit;

end;

end;

end;

if ((table[0, 0] = 2) and (table[1, 1] = 2)) or ((table[0, 0] = 2) and (table[2, 2] = 2)) or ((table[1, 1] = 2) and (table[2, 2] = 2)) then

begin

if table[0, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[2, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

if ((table[2, 0] = 2) and (table[1, 1] = 2)) or ((table[2, 0] = 2) and (table[0, 2] = 2)) or ((table[1, 1] = 2) and (table[0, 2] = 2)) then

begin

if table[2, 0] = 0 then

begin

table[2, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[0, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

                // проверка прямой победы человека

fori := 0 to 2 do

begin

if ((table[i, 0] = 1) and (table[i, 1] = 1)) or ((table[i, 0] = 1) and (table[i, 2] = 1)) or ((table[i, 1] = 1) and (table[i, 2] = 1)) then

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

exit;

end;

end;

end;

for i := 0 to 2 do

begin

if ((table[0, i] = 1) and (table[1, i] = 1)) or ((table[0, i] = 1) and (table[2, i] = 1)) or ((table[1, i] = 1) and (table[2, i] = 1)) then

begin

if table[0, i] = 0 then

begin

table[0, i] := 2;

exit;

end;

if table[1, i] = 0 then

begin

table[1, i] := 2;

exit;

end;

if table[2, i] = 0 then

begin

table[2, i] := 2;

exit;

end;

end;

end;

if ((table[0, 0] = 1) and (table[1, 1] = 1)) or ((table [0, 0] = 1) and (table[2, 2] = 1)) or ((table[1, 1] = 1) and (table[2, 2] = 1)) then

begin

if table[0, 0] = 0 then

begin

table[0, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[2, 2] = 0 then

begin

table[2, 2] := 2;

exit;

end;

end;

if ((table[2, 0] = 1) and (table[1, 1] = 1)) or ((table[2, 0] = 1) and (table[0, 1] = 1)) or ((table[1, 1] = 1) and (table[0, 2] = 1)) then

begin

if table[2, 0] = 0 then

begin

table[2, 0] := 2;

exit;

end;

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

if table[0, 2] = 0 then

begin

table[0, 2] := 2;

exit;

end;

end;

// проверка победы человека через ход.

if (table[0, 0] = 1) and (table[0, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[0, 0] = 1) and (table[2, 0] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[0, 2] = 1) and (table[2, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[2, 0] = 1) and (table[2, 2] = 1) then

begin

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

end;

if (table[2, 2] = 1) and (table[1, 1] = 1) then

begin

if table[0, 2] = 0 then

begin

table[0, 2] := 2;

exit;

end;

end;

                // умныеходы

if table[1, 1] = 0 then

begin

table[1, 1] := 2;

exit;

end;

                // генерация случайного хода.

for i := 0 to 2 do

begin

if table[i, 0] = 0 then

begin

table[i, 0] := 2;

exit;

end;

if table[i, 1] = 0 then

begin

table[i, 1] := 2;

exit;

end;

if table[i, 2] = 0 then

begin

table[i, 2] := 2;

end;

end;

end;

end;

end.


Поделиться:

Щелкунчик

Голубая лягушка

Будьте как солнце!

Ласточка. Корейская народная сказка

Кто должен измениться?