Estou tentando criar um mecanismo de jogo flexível baseado em blocos para criar todos os tipos de jogos de quebra-cabeça não em tempo real, assim como Bejeweled, Civilization, Sokoban e assim por diante.
A primeira abordagem que tive foi ter uma matriz 2D de objetos Tile e, em seguida, ter classes herdadas do Tile que representavam os objetos do jogo. Infelizmente, dessa maneira, não pude empilhar mais elementos de jogo no mesmo bloco sem ter uma matriz 3D.
Então fiz algo diferente: eu ainda tinha a matriz 2D de objetos Tile, mas cada objeto Tile continha uma lista na qual eu colocava e entidades diferentes. Isso funcionou bem até 20 minutos atrás, quando percebi que era muito caro fazer muitas coisas, veja este exemplo:
Eu tenho uma entidade de parede. Toda atualização que eu tenho que verificar os 8 azulejos adjacentes, depois todas as entidades da lista de azulejos, verificar se alguma dessas entidades é uma parede e finalmente desenhar o sprite correto. (Isso é feito para desenhar paredes próximas umas das outras sem problemas)
A única solução que vejo agora é ter uma matriz 3D, com muitas camadas, que pode se adequar a qualquer situação. Mas, dessa forma, não posso empilhar duas entidades que compartilham a mesma camada no mesmo bloco. Sempre que eu quero fazer isso, tenho que criar uma nova camada.
Existe uma solução melhor? O que você faria?