XML è una buona scelta se non sei limitato dalle dimensioni ed è supportato in modo nativo (ad esempio in .NET e Flash) ma se vuoi un formato sottile puoi creare il tuo formato e il tuo parser abbastanza facilmente. Di solito uso 1 carattere ad es. virgola per separare ogni oggetto. Per decodificare la stringa, eseguire una divisione su virgola. Ora ogni oggetto ha bisogno di proprietà diverse, quindi separale con un carattere diverso, ad esempio un punto e virgola, e usa un altro carattere per separare i nomi delle proprietà dai valori delle proprietà, ad es. Colon. Tutto così può essere decodificato facilmente senza regex semplicemente usando string.split. Ecco un esempio:
id:1;x:5;y:45.2;angle:45,id:28;x:56;y:89;angle:12;health:78
puoi risparmiare ancora più spazio mantenendo i nomi delle proprietà fino a 1 carattere, ad es. h per motivi di salute. Per esempio.
i:1;x:5;y:45.2;a:45,i:28;x:56;y:89;a:12;h:78
Confronta con l'alternativa JSON:
{"o":[{"i":1, "x":5, "y":45.2, "a":45}, {"i":28, "x":56, "y":89, "a":12, "h":78}]}
Inoltre, se si desidera ridurre la dimensione dei numeri, è possibile codificarli utilizzando il set completo di caratteri UTF16 stampabili. Questo thread mi ha spinto a porre una domanda su Stack Overflow di quanti dati potresti racchiudere in un personaggio sullo schermo . La risposta sembra essere da qualche parte oltre 40.000 valori per un numero intero, se non ti dispiace avere il coraggio, Kanji e pezzi degli scacchi: ♔♕♖♗♘♙♚♛♜♝♞♟
Per ottenere un'ulteriore riduzione delle dimensioni, è possibile utilizzare l'ordine di lettura / scrittura per determinare quale valore è quale, quindi i primi due caratteri rappresentano l'id, i due successivi sono la posizione x, i successivi due y, quindi l'angolo, quindi salute , ecc. Quindi:
F5DGP@%&002DFTK#OP1F
potrebbe memorizzare tutte le stesse informazioni degli altri esempi.
Le griglie delle tessere possono essere memorizzate come una semplice stringa con ogni carattere che rappresenta un diverso tipo di tessera, ad esempio:
i789pog5h3kl
dove potrei significare lava, 9 significa erba ecc