Estou desenvolvendo um jogo de plataformas 2D com alguns amigos da uni. Nós o baseamos no XNA Platformer Starter Kit, que usa arquivos .txt para armazenar o mapa de blocos. Embora isso seja simples, não nos dá controle e flexibilidade suficientes com o design de níveis. Alguns exemplos: para várias camadas de conteúdo, são necessários vários arquivos, cada objeto é fixado na grade, não permite a rotação de objetos, número limitado de caracteres etc. Por isso, estou pesquisando como armazenar os dados de nível e arquivo de mapa.
Isso diz respeito apenas ao armazenamento do sistema de arquivos dos mapas de blocos, não à estrutura de dados a ser usada pelo jogo enquanto estiver em execução. O mapa de blocos é carregado em uma matriz 2D, portanto, esta pergunta é sobre qual fonte a qual preencher a matriz.
Raciocínio para DB: Na minha perspectiva, vejo menos redundância de dados usando um banco de dados para armazenar os dados do bloco. Os ladrilhos na mesma posição x, y com as mesmas características podem ser reutilizados de nível para nível. Parece que seria simples o suficiente escrever um método para recuperar todos os blocos que são usados em um nível específico do banco de dados.
Raciocínio para JSON / XML: arquivos editáveis visualmente, as alterações podem ser rastreadas via SVN muito mais facilmente. Mas há conteúdo repetido.
Você tem alguma desvantagem (tempos de carregamento, tempos de acesso, memória etc.) em comparação com os outros? E o que é comumente usado na indústria?
Atualmente, o arquivo se parece com isso:
....................
....................
....................
....................
....................
....................
....................
.........GGG........
.........###........
....................
....GGG.......GGG...
....###.......###...
....................
.1................X.
####################
1 - Ponto inicial do jogador, Saída do nível X,. - Espaço vazio, # - Plataforma, G - Gem