Использование ООП при создании текстового приключения

Назовите меня тупым или как-нибудь другое имя, которое вы предпочитаете. Мой университет никогда не учил меня должным образом ООП, и из-за этого я очень предпочитаю писать код на C. ОДНАКО, в интересах развития и обучения новым навыкам, я решил попробовать научить себя чему-то еще. ориентированные навыки, а также заниматься одним из моих других увлечений / увлечений, текстовыми приключениями. Я попытаюсь сделать это в C ++, так как это язык, который я использовал для большинства моих студентов, так что я знаю его лучше всех. Я зациклен на том, что я написал общий файл .h для базовых атрибутов и методов, которые должен иметь «местоположение». Это все хорошо, если все, что я хочу сделать, — это создать группу комнат и иметь возможность перейти N / S / E / W в другую комнату общего назначения и распечатать описание комнаты. То, что я не знаю, как сделать, это сделать более конкретную реализацию этого заголовочного файла. Боюсь, я не очень хорошо объяснил свою проблему, поэтому приведу пример:

У меня есть комната, давайте назовем ее «Гостиная». На севере находится «Кухня». На юге находится «Ден». Между «Гостиной» и «Логовом» есть дверь. Пользователь может сказать «N», и goNorth () будет вызван, и все будет замечательно. Тем не менее, если пользователь говорит «S», я хочу, чтобы он дал им что-то вроде «вы не можете идти по этому пути», пока они не откроют дверь. Это потребовало бы от меня либо: 1) полностью отказаться от своей идеи ООП и просто написать каждую комнату, как свой собственный набор функций и переменных (как я это делал в прошлом), или 2) сделать конкретную реализацию файла заголовка, который я содержал все эти функции и переменные для каждой комнаты (как я бы теоретически хотел это сделать), однако я просто не знаю, технически ли это возможно и как это сделать. Если бы кто-то мог указать мне правильное направление, сводя имя к минимуму, я был бы очень признателен.

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

0

Решение

Скорее всего, это будет слишком широко, так как есть много способов ее решения. Вот примерно то, что я сделал в подобной ситуации:

Room есть метод GetConnection(direction) и возвращает указатель на Connection объект (или нулевой указатель, если нет способа пойти по этому пути).

Connection объект имеет виртуальный Traverse() метод. Основа Connection имеет члена, который указывает на пункт назначения, и Traverse() Метод просто обновляет местоположение игрока до места назначения.

Для Connection с дополнительными ограничениями, производный класс, скажем ConnectionThroughDoor имеет переопределенный Traverse() метод, который проверяет, открыта ли дверь (или какие-либо ограничения) перед вызовом базового класса Traverse() на самом деле переместить игрока.

Обобщая, подумайте об интерфейсах программирования и подумайте, нужны ли вам дополнительные классы для представления других понятий (например, Connection между Rooms).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]