3. Классы.

Цель работы - изучить понятия класса, научиться создавать типы и конструировать объекты этого типа.

Доработайте игру из предыдущей лабораторной работы с использованием классов. Дополните функционал игры возможностью сохранения и последующей загрузки игры. Шаблоны классов и реализацию интерфейса игры можно найти в шаблоне проекта.

Класс Board

Класс служит для определения типа объекта board из предыдущей работы с дополнительными методами.

Конструктор класса должен создавать объект используя аргумент типа string или Cell[] (используя операцию сужения типа). При создании объекта из строки используется статическая функция fromString. Для создании копии объекта будет использоваться функция clone.

Новый метод status возвращает либо строку с результатом игры, либо, если игра не закончена, строку "Идет игра".

Класс State

Объекты класса State хранят данные о состоянии игры: положение на доске и символ, который будет выставлен следующим ходом. При текущем функционале игры в этом классе нет необходимости, но его использование позволяет относительно легко добавить новые возможности в игру, например, возможность пропускать ход.

Класс Game

Класс служит для определения типа объекта game из предыдущей работы с дополнительными методами.

Свойство steps теперь служит для хранения массива состояний игры. Свойство state (представленное с помощью сеттера) возвращает текущее состояние игры.

Конструктор и функция clone нужны для создания объектов, остальные методы класса аналогичны методам объекта game из предыдущей работы.

Класс Site

В этом классе реализуется новая функциональность — возможность сохранения игры. Игры сохраняются в виде пар ключ-игра. Ключ — это строка, некоторым образом идентифицирующая игру, в качестве которой рекомендуется использовать время сохранения игры, котором можно получить с помощью выражения new Date().toLocaleString(). Игра это объект класс Game.

Текущая игра хранится в свойстве game объекта класса Site, а сохраненные игры — в свойстве Games. Нужно заметить, что в программе будет один объекта класса Site.

Метод save добавляет в массив Games текущую игру, сгенерировав для нее ключ. Метод load загружает из массива Games текущую игру. Метод keys используется в интерфейсы игры для определения списка возможных ключей (игр) для перехода к ним.

Файл index.ts

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

Вопросы и комментарии