Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di lobbo
    Registrato dal
    Nov 2001
    Messaggi
    53

    [VB 2010] Gioco Tombola

    ciao come da titolo questo è il codice, il problema è che dopo 80 estrazioni (più o meno) il messaggio "numero già estratto" compare troppe volte. come si può fare che i numeri già estratti vengano tolti dall'intervallo 1, 90 ?

    codice:
    Public Class Form1
        Dim numero(90) As Integer
        Dim casuale As New Random
        Dim x As Integer
        Dim y As Integer
        Dim contatore As Integer = 0
    
        Sub estrazione()
            x = casuale.Next(1, 90)
            TextBox2.Text = ""
            For Each y In numero
                TextBox2.Text = TextBox2.Text + Str(y)
                If x = y Then
                    MsgBox(Str(x) + " numero già estratto")
                    estrazione()
                End If
            Next
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            estrazione()
            contatore = contatore + 1
            TextBox3.Text = contatore
            numero(x) = x
            TextBox1.Text = TextBox1.Text + Str(x)
            If contatore = 90 Then
                Panel1.Visible = True
            End If
        End Sub
    End Class

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Ciao,
    ad occhio e croce ti direi di fare una List di int, con i tuoi numeri magari disposti in maniera non sequenziale, ad ogni estrazione generi il range di numeri casuali in base al numero di elementi nella lista dalla quale andrai a togliere il numero estratto, riducendo il numero di elementi nella lista, così facendo, il numero casuale sarà sempre un numero compreso nell'intervallo che può anche essere ripetuto, ma grazie all'eliminazione il numero corrispondente nella lista non potrà mai essere già estratto, in quanto i numeri già estratti non sono nella lista.

  3. #3
    Utente di HTML.it L'avatar di lobbo
    Registrato dal
    Nov 2001
    Messaggi
    53
    purtroppo non sono un esperto ho capito cosa hai detto ma non riesco a metterlo in pratica perché sto iniziando ad imparare leggendo codici e facendo prove (sicuramente non è il modo corretto).
    saresti così gentile da postare un codice ?

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da lobbo
    purtroppo non sono un esperto ho capito cosa hai detto ma non riesco a metterlo in pratica perché sto iniziando ad imparare leggendo codici e facendo prove (sicuramente non è il modo corretto).
    saresti così gentile da postare un codice ?
    questo vuole essere solo un esempio ...

    codice:
    Imports System.Threading
    
    Module Module1
        Dim lista As List(Of Integer) = New List(Of Integer)
    
        Sub Main()
            ' lista con i numeri
            ' in questo caso creati al volo, quindi per evitare la sequenzialità a tratti nell'estrazione 
            ' (visto che le estrazioni le metto tutte insieme nel ciclo)
            ' ho dovuto ricorrere ad uno sleep sul thread in modo da far si che cambi il seed passato per creare il numero random.
            lista = Enumerable.Range(1, 90).ToList()
            'simulo tutte le estrazioni
            For i = 1 To 90
                Console.WriteLine(String.Format("Estrazione numero {0} : Numero estratto : {1}", i, Estrazione()))
                'fermo il thred 3 millisecondi (in modo che cambi il seed del random)
                Thread.Sleep(3)
            Next
            Console.ReadLine()
        End Sub
    
        Function Estrazione() As Integer
            Dim random As New Random(DateTime.Now.Millisecond)
            'creo il numero casuale con un range uguale al numero di elementi presenti nella lista
            Dim nr = random.Next(lista.Count)
            'leggo il valore corrispondente nella lista
            Dim numeroEstratto = lista(nr)
            'rimuovo il numero corrispondente dalla lista in modo che non sia più richiamato
            lista.RemoveAt(nr)
            'restituisco il numero estratto
            Return numeroEstratto
        End Function
    
    End Module

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.