Ciao Pac, tanti auguri anche a te!

A parità di "numero di rimescolamenti" il tuo programma butta fuori sempre la stessa sequenza di numeri (pseudo)random.
Sul Commodore 64 non esiste un vero random fisico, ma si può ottenere una buona sequenza pseudo-casuale inizializzando correttamente il generatore di numeri casuali (RND). Se non lo si fa, il C64 produce sempre la stessa sequenza a ogni avvio.
Principio fondamentale:
RND(1) → restituisce un numero casuale tra 0 e 1
INT(RND(1)*90)+1 → numero intero tra 1 e 90
La chiave è inizializzare il seme usando il timer interno TI. Il timer TI cambia continuamente mentre il computer è acceso, quindi rende la sequenza diversa ogni volta.
Il listato BASIC che genera una sequenza di dieci numeri casuali da 1 a 90, uno alla volta, è il seguente:
10 rem inizializza il generatore random
20 x=rnd(-ti)
30 rem genera 10 numeri casuali tra 1 e 90
40 for i=1 to 10
50 n=int(rnd(1)*90)+1
60 print n
70 next iOgni volta che lo esegui dopo aver acceso il C64, la sequenza sarà diversa.
Versione interattiva (premi un tasto per ogni numero):
10 x=rnd(-ti)
20 print "premi un tasto per un numero (q per uscire)"
30 get a$
40 if a$="" then 30
50 if a$="q" then end
60 n=int(rnd(1)*90)+1
70 print n
80 goto 30Nota importante (errore comune):
n=int(rnd(ti)*90)+1non inizializza correttamente il random e produce sequenze poco casuali.
RND(-TI) va quindi messo una sola volta all’inizio.
Se vuoi qualcosa di ancora più “casuale” puoi far premere un tasto all’utente
prima di inizializzare:
10 print "premi un tasto"
20 get a$:if a$="" then 20
30 rnd(-ti)
[...]Così il tempo di reazione umana rende il seme ancora meno prevedibile.
Spero di essere stato utile!