Найти тему

Реализуем стратегию / Крестики-нолики. Пошаговый курс

На прошлом уроке мы сыграли сами с собой несколько партий и выработали стратегию игры. Сейчас Будем ее реализовывать, точнее, начнем реализовывать.

Итак, после нажатия на кнопку "Играть крестиком" прячется первый экран, появляется второй и наша программа ждет, пока мы выполним ход. Когда мы выполним ход программа анализирует по нашей стратегии игровую ситуацию и принимает решение о следующем ходе. Если мы нажмем "Играть ноликом", то программа сразу делает ход сама а затем ждет нашего хода.

Выполнение хода - это несколько инструкций, которые можно и нужно сгруппировать в функцию. Назовем ее makeMove:

Функция makeMove пока пустая, пока мы не знаем, что там писать. Вот этим сейчас и займемся.

Согласно нашей стратегии, первое, что мы должны сделать - проверить, можем ли мы выиграть за один ход. Для этого нам нужно найти линию, которая уже бы содержала две наши фигуры и при этом третья ячейка линии была бы свободна.

Но прежде сделаем небольшое отступление для того, чтобы изучить условия. Условия позволяют нам выполнять определенную группу инструкций при наличии некоторого условия. Условия возникают всякий раз, когда в нашем алгоритме мелькает слово "если". В нашей стратегии слово "если" - первое)

Смотрите, как выглядит условие:

-2

Условие состоит из ключевого слова if далее в круглых скобках находится значение логического типа. Логический тип может принимать два значения: истина или ложь, да или нет. Вот такой тип. Он очень полезен для различных проверок. Так вот, если значение в скобках является истиной, тогда будет выполнен набор инструкций из фигурных скобок. Если переменная condition равна истине, то будет выполнена инструкция actions1(), а затем actions2(). если эта переменная ложна, то тогда будет выполнена только инструкция actions2().

Сейчас мы увидим на примерах как все это работает. Мы будем проверять имеет ли нужная ячейка класс x или o в зависимости от той фигуры, которой играет компьютер. Смотрите:

-3

Здесь мы присваиваем переменным логические значения, а затем проверяем общее условие. При помощи функции cells[0].classList.contains("x") мы узнаем, имеет ли данная ячейка класс x. Мы получим результат да либо нет и присвоим его переменной a. То же самое мы проделаем для второй и третьей ячейки.

Но в скобках условия мы видим странные значки, что это? Это логические операторы, которые можно применять к логическим значениям. Оператор "!" нужен для того, чтобы получить противоположное. Если значение было равно истине, то при применении этого оператора мы получим значение ложь. Этот оператор называется оператором логического отрицания или логического НЕ.

Оператор && - оператор логического И. Он применяется к двум и более значениям и после вычисления мы получим истину только тогда, когда истинны все операнды.

Условие можно перевести на человеческий язык так: если в первой ячейке стоит крестик, И во второй ячейке стоит крестик, И в третьей ячейке НЕ стоит крестик, И в третьей ячейке НЕ стоит нолик. Короче - если первые две ячейки заняты крестиками, а третья пуста. Тогда мы выполним инструкции внутри фигурных скобок.

Да, для удобства будем пока считать, что мы играем крестиком.

Так вот, если это условие выполнится, то мы должны поставить крестик в третьей ячейке.

-4

При помощи одного условия мы проверяем первую линию - верхнюю горизонталь - если в двух есть крестики, а в третьей пусто, то ставим крестик в третью. Далее надо проверить первую и вторую ячейки:

-5

Тут мы встретили else if, что это такое? В условной конструкции может быть несколько условий. В зависимости от того, какое условие выполнится, такой набор инструкций и будет выполнен. Первое условие помечается словом if. Второе и последующие условия помечаются словами else if.

В нашем случае - если в первой и второй ячейке крестики, а в третьей пусто, тогда ставим крестик в третью. Если это условие не выполнилось, то если в первой и третьей ячейке крестики, а вторая пуста, то ставим крестик во вторую ячейку. Теперь добавим третье условие:

-6

Итак, мы проверяем первую линию - верхнюю горизонталь. Мы проверяем чтобы в этой линии в двух ячейках были бы крестики, а одна была бы пуста, в пустую ставим крестик. Вот и весь смысл этого текста. Всего у нас восемь линий, эти три условия надо повторить еще семь раз. Так дело не пойдет, придет сокращать. Но этим мы займемся уже на следующем уроке.

Если остались вопросы - обязательно пишите их в комментариях.

Предыдущий урок | Содержание курса | Следующий урок

Подпишитесь на наш канал, чтобы не пропустить следующие уроки.

Новые уроки, новые курсы будут на моем блоге здесь: keklik.me.