Цель работы - изучить понятия класса, научиться создавать типы и конструировать объекты этого типа.
Доработайте игру из предыдущей лабораторной работы с использованием классов. Дополните функционал игры возможностью сохранения и последующей загрузки игры. Шаблоны классов и реализацию интерфейса игры можно найти в шаблоне проекта.
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
В этом файле реализован интерфейс игры. Для лучшего понимания назначения описанных выше классов рекомендуется изучить исходный код в этом файле.