Краткое содержание
Переработал существующую игру Tic Tac Toe, чтобы она соответствовала моему стилю кодирования, используя классы, извлечение и ссылки.
Я сохранил макет доски и текст пользовательского интерфейса, потому что их не нужно менять.
Рабочий процесс
Я все еще использую цикл while, чтобы проверить, закончилась ли игра.
- Игра начинается с того, что игрок 1 ставит маркер на доску.
- Затем доска обновляется, чтобы показать, где игрок поместил маркер.
- Менеджер игры проверяет, сделал ли кто-либо из игроков тройку подряд, прямо или по диагонали.
- Переключатель поворотов
- Повторите шаги 1–4
Игра выглядит так же, но все функции находятся в отдельных классах, а не в одном большом классе. Это становится менее беспорядочным, но это решение не идеально, поскольку у него есть свои недостатки.
Что могло быть лучше?
Первоначальная идея, которую я имел в виду для своей версии Tic Tac Toe, заключалась в том, чтобы каждый класс был независимым друг от друга и использовал указатели для изменения переменных.
Вместо этого я сделал наоборот, и каждый класс стал зависимым друг от друга, двигаясь по кругу. Это то, что называется «круговыми зависимостями».
Игрок зависит от Доски, Доска зависит от того, как Игрок ходит по кругу. Я никогда не запускал игру, используя эту ветку, но я оставил ее как остаток того, что я могу улучшить.
Это были следующие ошибки, которые я получил:
- C2238
- C2143
- C2061
- C4430
- C2065
Одним из решений для предотвращения циклических зависимостей является использование «форвардных объявлений».
Используя предварительное объявление, классы могут ссылаться друг на друга и, возможно, уменьшать зависимости #include.
Но к тому времени, когда я нашел решение, я уже закончил игру, используя другое решение. Решение, которое я придумал, требовало дублирования переменных, наличия основного исходного файла в качестве посредника между всеми классами и использования ссылок для изменения переменных.
Минусы этого решения:
- Сложнее повторно использовать код по мере расширения, поскольку он основан на копировании и повторном использовании переменных во многих классах.
- Сложнее отлаживать, так как многие скрипты имеют одинаковые имена.
- Классы все же не так слабо связаны, как хотелось бы
Одна особенность. Если бы я хотел улучшить игру, я бы добавил функцию воспроизведения, чтобы игроки могли быстро переиграть, вместо того, чтобы закрывать и снова открывать игру.