Autore Topic: Listato BASIC tombola di Natale  (Letto 216 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Pac76

  • Newbie
  • *
  • Post: 2
  • Gioco Preferito: International Karate
Listato BASIC tombola di Natale
« il: 24 Dicembre 2025, 18:49:50 »
Per prima cosa, Auguri a Tutti!!!
Per questo Natale ho avuto la necessità di realizzare un programma per gestire l'estrazione dei numeri per la tombola presso il nostro circolo sportivo. Quindi mi sono detto.. Lo faccio con il 64!!!
Dopo vari tentativi, vi propongo il programma che ho realizzato, che presenta le seguenti caratteristiche:
1) La generazione della sequenza casuale dei numeri da 1 a 90, è fatta utilizzando un algoritmi di scambio tra coppie di numeri e fornisce risultati soddisfacenti. Con valori di "rimescolamento" tra 500 e 1000 si ottengono sequenze random, in tempi "umani";
2) si può attivare un suono all'estrazione del numero, in modo da richiamare l'attenzione;
3) i colori sono scelti in modo da ottenere una buona visualizzazione sulle moderne TV a LED.

Attendo vostri consigli e suggerimenti per ulteriori miglioramenti. Allego anche la versione compilata, che risulta più fluida e veloce.

 

Pac76

  • Newbie
  • *
  • Post: 2
  • Gioco Preferito: International Karate
Re:Listato BASIC tombola di Natale
« Risposta #1 il: 24 Dicembre 2025, 22:15:07 »
Nuova versione, con piccoli miglioramenti ed ottimizzazioni del codice.

orion70

  • Utente
  • **
  • Post: 116
  • Gioco Preferito: the hobbit
Re:Listato BASIC tombola di Natale
« Risposta #2 il: 30 Dicembre 2025, 14:44:28 »
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:

Codice: [Seleziona]
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 i

Ogni volta che lo esegui dopo aver acceso il C64, la sequenza sarà diversa.

Versione interattiva (premi un tasto per ogni numero):

Codice: [Seleziona]
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 30

Nota importante (errore comune):

Codice: [Seleziona]
n=int(rnd(ti)*90)+1
non 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:

Codice: [Seleziona]
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!

orion70

  • Utente
  • **
  • Post: 116
  • Gioco Preferito: the hobbit
Re:Listato BASIC tombola di Natale
« Risposta #3 il: 31 Dicembre 2025, 10:37:16 »
*scusa, l'ultimo codice corretto:

Codice: [Seleziona]
10 print "premi un tasto"
20 get a$:if a$="" then 20
30 x=rnd(-ti)
[...]