Как правило, вы должны создавать новый класс только тогда, когда вы хотите представлять поведение, и контролировать параметры этого класса своими данными.
В вашем случае вам, вероятно, понадобится один класс декораций для ваших цветов, кустов, стен и подобных вещей. Затем вы можете настроить объекты этого класса, вызывая функции для установки растрового изображения (изображений), скорости анимации. Тогда действительно не имеет значения, откуда эти данные, они могут быть жестко закодированы, получены с фабрики объектов или прочитаны из XML.
Когда вы приходите к своим интерактивным объектам, вам нужны дополнительные классы, но постарайтесь сделать их более общими, чем специфическими. Поэтому, если вы хотите отображать сообщение, когда ваш пользователь взаимодействует с объектом, у вас есть общий класс взаимодействия, а не класс знака. Затем этот класс можно использовать для знаков, книжных полок, загадочных предметов.
Когда речь идет о специальных мероприятиях, у вас есть несколько вариантов. Самое простое - создать общий класс событий, который может указывать новым актерам появляться на экране или дарить объекты игроку. В качестве альтернативы вы можете передать указатель / делегат функции на объект, который вызывается, когда пользователь нажимает определенные триггеры (то есть, шаг в квадрат, победа монстра). И, наконец, самое сложное из всего, кроме того, что используют Pokemon и подобные игры, вы можете создать / использовать свой собственный язык сценариев.