Краткое содержание

Переработал существующую игру Tic Tac Toe, чтобы она соответствовала моему стилю кодирования, используя классы, извлечение и ссылки.

Я сохранил макет доски и текст пользовательского интерфейса, потому что их не нужно менять.

Рабочий процесс

Я все еще использую цикл while, чтобы проверить, закончилась ли игра.

  1. Игра начинается с того, что игрок 1 ставит маркер на доску.
  2. Затем доска обновляется, чтобы показать, где игрок поместил маркер.
  3. Менеджер игры проверяет, сделал ли кто-либо из игроков тройку подряд, прямо или по диагонали.
  4. Переключатель поворотов
  5. Повторите шаги 1–4

Игра выглядит так же, но все функции находятся в отдельных классах, а не в одном большом классе. Это становится менее беспорядочным, но это решение не идеально, поскольку у него есть свои недостатки.

Что могло быть лучше?

Первоначальная идея, которую я имел в виду для своей версии Tic Tac Toe, заключалась в том, чтобы каждый класс был независимым друг от друга и использовал указатели для изменения переменных.

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



Игрок зависит от Доски, Доска зависит от того, как Игрок ходит по кругу. Я никогда не запускал игру, используя эту ветку, но я оставил ее как остаток того, что я могу улучшить.

Это были следующие ошибки, которые я получил:

  • C2238
  • C2143
  • C2061
  • C4430
  • C2065

Одним из решений для предотвращения циклических зависимостей является использование «форвардных объявлений».



Используя предварительное объявление, классы могут ссылаться друг на друга и, возможно, уменьшать зависимости #include.

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

Минусы этого решения:

  • Сложнее повторно использовать код по мере расширения, поскольку он основан на копировании и повторном использовании переменных во многих классах.
  • Сложнее отлаживать, так как многие скрипты имеют одинаковые имена.
  • Классы все же не так слабо связаны, как хотелось бы

Одна особенность. Если бы я хотел улучшить игру, я бы добавил функцию воспроизведения, чтобы игроки могли быстро переиграть, вместо того, чтобы закрывать и снова открывать игру.