Lo sto utilizzando come parte di un gioco, ma non è una questione di sviluppo del gioco, quindi lo sto mettendo in questo Stack Exchange più generale.
L'obiettivo è generare uscite "casuali" per un input intero fisso, ma (e questo è il copertoncino) per generare lo stesso output casuale ogni volta che stesso l'inserimento casuale è inserito.
L'idea è che la funzione genererà il mondo allo stesso modo ogni volta, quindi non abbiamo bisogno di memorizzare nulla; la funzione stessa è la memoria. Sfortunatamente la velocità di accesso è un po 'lenta, perché l'unico modo che posso trovare per generare numeri casuali è creare un nuovo oggetto Random () con un seme basato sull'input, che è sorprendentemente lento.
C'è un modo migliore? Non sono preoccupato per la generazione crittogena; in effetti selezionerò un seme casuale in anticipo e lo esporrò pubblicamente.
Il codice corrente ha il seguente aspetto:
private const int seed;
public MapCell GetMapCell(int x, int y)
{
Random ran = new Random(seed + (x ^ y));
return new MapCell(ran.NextInt(0, 4));
}
Dove MapCell
è uno dei quattro tipi (in realtà è più complicato di questo, ma non molto). Il punto è che questo può essere chiamato per qualsiasi parametro, in qualsiasi momento, senza un ordine particolare, ma deve restituire sempre la stessa risposta, se xey sono sempre le stesse. Ecco perché non riesco a correggere un certo oggetto casuale e a usarlo ripetutamente.
Inoltre non voglio memorizzare nulla, perché voglio mantenere l'utilizzo della RAM piuttosto basso, ma consentire al giocatore di vagare liberamente ai bordi di Int.MaxValue