É um projeto ruim ter duas classes que precisam uma da outra?
É um pouco de cheiro de código , mas pode-se sair com ele. Se essa é a maneira mais fácil e rápida de colocar seu jogo em funcionamento, siga em frente. Mas lembre-se disso, porque há uma boa chance de você precisar refatorá-lo em algum momento.
O problema do C ++ é que as dependências circulares não serão compiladas com tanta facilidade ; portanto, é uma idéia melhor se livrar delas, em vez de gastar tempo corrigindo sua compilação.
Vejo esta pergunta no SO para mais algumas opiniões.
Você chamaria [meu design] de design ruim?
Não, ainda é melhor do que colocar tudo em uma classe.
Não é tão bom, mas na verdade é bem próximo da maioria das implementações que já vi. Geralmente, você tem uma classe de gerente para os estados dos jogos ( cuidado! ) E uma classe de renderizador, e é bastante comum que eles sejam singletons. Portanto, a dependência circular é "oculta", mas é potencialmente lá.
Além disso, como você foi informado nos comentários, é um pouco estranho que as classes de estado do jogo executem algum tipo de renderização. Eles devem conter apenas informações de estado e a renderização deve ser manipulada por um renderizador ou por algum componente gráfico dos próprios objetos do jogo.
Agora pode haver o design final . Estou curioso para ver se outras respostas trazem uma boa idéia. Ainda assim, você provavelmente é o único que pode encontrar o melhor design para o seu jogo.