Una galassia ha tante stelle.
Tantissime.
Una delle cose che non ho mai sopportato degli space-sim nati dopo frontier è la loro scarsa credibilità nelle dimensioni.
Galassie con 400 stelle, distanze tra oggetti in un sistema solare misurate in km, ma dico son 100 km da qui a Bologna, un aereo copre quella distanza in 6 minuti, un banalissimo space shuttle ci mette 18 secondi, mi vien la claustrofobia!!
Il buon Braben invece ha voluto far le cose fatte per bene, ricordiamolo: nei primi anni novanta e in 600kb, e sia il numero di stelle che le distanze nel suo gioco sono verosimili. Si ragiona in anni luce, e le stelle sono MILIONI.
Ora, partiamo da questo secondo aspetto.. Un milione di stelle (per ipotesi), un nome per ciascuna di esse diciamo di 10 caratteri, occorre quindi memorizzare un milione di nomi. E se 10 megabytes oggi possono essere una cifra tutto sommato modesta, non ho di certo nessuna intenzione di scrivere 10 miloni di caratteri.
E' molto piu' furbo farli generare automaticamente. L'idea è quella di costruire un array di 30 stringhe, ciascun elemento contiene una sillaba. "se", "lo", "kar", ecc... Per ogni stella vado a pescare 1,2 oppure 3 sillabe, prese a caso da questo elenco, e le concateno.
Si ottengono nomi tutto sommato plausibili "sekar" "karlose" ecc..
Rimane il problema di memorizzare un milione di nomi... ma non ce n'e' bisogno. Infatti il generatore di numeri casuali ha una proprieta', chiamata seme, per la quale, a parita' di seme, genera sempre la stessa sequenza di numeri casuali... cosi' se imposto il seme 44, posso avere una sequenza del tipo 1,42,9,58,7,22,... se imposto il seme = 2, potrei ottenere 95, 24, 4, 0, 11,...
ma se lo reimposto di nuovo a 44, otterro' nuovamente 1,42,9,58,7,22,...
Percio', una volta divisa la galassia in una griglia, e chiamato ciascun elemento della griglia "settore", ho che ogni settore ha una coordinata x,y che lo identifica univocamente. Se dalla coppia x,y ricavo un numero, ad esempio s = x+100*y, sono sicuro che:
- il numero s è unico per ogni settore della galassia
- il numero s può essere utilizzato per impostare il seme per la generazione dei numeri casuali
Come potete vedere la cosa funziona, ed è un sistema che mi permette di gestire decine di milardi di miliardi di stelle in pochi kappa. L'unico problema (per ora) è la generazione a volte di nomi duplicati. Ma di questo parleremo un'altra volta: si' ho in mente una soluzione