O XML é uma boa opção se você não estiver limitado pelo tamanho e for suportado nativamente (por exemplo, no .NET e Flash), mas se desejar um formato mais fino, poderá criar seu próprio formato e analisador com bastante facilidade. Eu normalmente uso 1 caractere, por exemplo. vírgula para separar cada objeto. Para decodificar a sequência, faça uma divisão por vírgula. Agora, cada objeto precisa de propriedades diferentes, portanto, separe-as com um caractere diferente, por exemplo, ponto-e-vírgula, e use outro caractere para separar os nomes das propriedades dos valores das propriedades, por exemplo. Cólon. Tudo isso pode ser decodificado facilmente sem regex apenas usando string.split. Aqui está um exemplo:
id:1;x:5;y:45.2;angle:45,id:28;x:56;y:89;angle:12;health:78
você pode economizar ainda mais espaço mantendo os nomes das propriedades com até 1 caractere, por exemplo, h para saúde. Por exemplo.
i:1;x:5;y:45.2;a:45,i:28;x:56;y:89;a:12;h:78
Compare com a alternativa JSON:
{"o":[{"i":1, "x":5, "y":45.2, "a":45}, {"i":28, "x":56, "y":89, "a":12, "h":78}]}
Além disso, se você quiser diminuir o tamanho dos seus números, poderá codificá-los usando o conjunto completo de caracteres UTF16 imprimíveis. Esse tópico me inspirou a perguntar uma pergunta no Stack Overflow sobre a quantidade de dados que você poderia compactar em um caractere na tela . A resposta parece estar acima de 40.000 valores para um número inteiro, se você não se importa de ter brail, Kanji e peças de xadrez: ♔♕♖♗♘♙♚♛♜♝♞♟
Para obter uma redução adicional de tamanho, você pode usar a ordem de leitura / gravação para determinar qual valor é qual; portanto, os dois primeiros caracteres representam o id, os próximos dois são a posição x, os próximos dois são y, o ângulo e a saúde etc. Então:
F5DGP@%&002DFTK#OP1F
poderia armazenar todas as mesmas informações que os outros exemplos.
As grades de mosaico podem ser armazenadas como apenas uma string, com cada caractere representando um tipo diferente de mosaico, por exemplo:
i789pog5h3kl
onde eu poderia significar lava, 9 significa grama etc.