Разве плохой дизайн - иметь 2 класса, которые нужны друг другу?
Это немного запах кода , но с этим можно уйти. Если это более простой и быстрый способ запустить вашу игру, сделайте это. Но имейте это в виду, потому что есть хороший шанс, что вам придется реорганизовать его в какой-то момент.
С C ++ дело в том, что циклические зависимости не будут компилироваться так легко , поэтому лучше избавиться от них, чем тратить время на исправление компиляции.
Смотрите этот вопрос на SO для нескольких мнений.
Вы бы назвали [мой дизайн] плохим дизайном?
Нет, это все же лучше, чем поместить все в один класс.
Это не так здорово, но на самом деле это довольно близко к большинству реализаций, которые я видел. Обычно у вас есть класс менеджера для состояний игры ( будьте осторожны! ) И класс рендерера, и довольно часто они являются синглетонами. Таким образом, круговая зависимость «скрыта», но потенциально она есть.
Кроме того, как вам сказали в комментариях, немного странно, что классы состояния игры выполняют какую-то визуализацию. Они должны просто хранить информацию о состоянии, а рендеринг должен обрабатываться средством визуализации или каким-либо графическим компонентом самих игровых объектов.
Теперь может быть окончательный дизайн. Мне любопытно посмотреть, принесут ли другие ответы одну хорошую идею. Тем не менее, вы, вероятно, можете найти лучший дизайн для вашей игры.