Indovina numero



  • Indovina numero
    di pippo02 (utente non iscritto) data: 22/04/2013 11:34:04

    Ciao ragazzi, sto cercando di realizzare in vba un gioco (indovina numero) dove es. l'utente devi indovinare un numero da 0 a 9 avendo solo tre possibilità. Ho scritto questo codice, ma non funzione come vorrei:
    1) avvisare l'utente dei tentativi rimasti per tentativi di indovinare;
    2) finire il gioco dopo tre tentativi con un msgbox;
    3) nel caso l'utente dovesse indovinare il numero estratto mostrarlo nella label.

    Dove sto sbagliando?

    Grazie e saluti da pippo02
     
    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Dim num_casuale As Integer     'variabile che  contiene il numero che  va da 0 a 9
    Dim num_tentativi As Integer   'variabile che  contiene il numero di tentativi (3)
    Dim x As Integer                     'variabile che contiene il numero inserito dall'utente
    
    num_tentativi = 0    'contatore  per il numero dei tentativi (3)
    
    Do While num_tentativi <= 3 'inizio il ciclo
    
     Randomize
     num_casuale = Int((9 - 0 + 1) * Rnd + 0)
     
    If TextBox1.Text = "" Then
        MsgBox "Attenzione! Devi inserire un numero.", vbExclamation, "Excel e VBA"
        TextBox1.SetFocus
        Exit Sub
     Else
        x = TextBox1.Text
     End If
     
    If x > num_casuale Then     'se il numero inserito dall'utente è minore del num_casuale
         MsgBox "Attenzione! Il numero inserito è alto.", vbExclamation, "Excel e VBA"
         TextBox1.SetFocus
         Exit Sub
    
    ElseIf x < num_casuale Then 'se il numero inserito dall'utente è minore del num_casuale
        
        MsgBox "Attenzione! Il numero inserito è basso.", vbExclamation, "Excel e VBA"
        TextBox1.SetFocus
        Exit Sub
        
    ElseIf x = num_casuale Then   'se il numero inserito dall'utente è uguale al num_casuale
        
        MsgBox "Bravo! Il numero inserito è uguale al numero estratto.", vbExclamation, "Excel e VBA"
        TextBox1.SetFocus
        Exit Sub
        
    End If
    
    Loop   'Il ciclo si ripete finché il numero di tentativi non arriva a 3
    
    Label4.Caption = num_casuale  'Mostro il numero nella label estratto se è uguale a quello inserito dall'utente
    
    Application.ScreenUpdating = True
    
    End Sub



  • di totygno71 data: 22/04/2013 13:00:09

    Mi pare di leggere che se se il numero non è giusto si esce dalla sub, quindi non si arriverà mai a 3 come numeri di tentativi ripartendo sepre da 0 ad ogni tentativo



  • di totygno71 data: 22/04/2013 13:13:09

    manca anche il
    Randomize Timer
    e prima del loop incremento del num_tentativi_
    ciao


  • Indovina numero
    di pippo02 (utente non iscritto) data: 22/04/2013 13:22:15

    Per favore potete correggere il codice affinchè possa funzione correttamente. Vi ringrazio tutti.

    Saluti da pippo02



  • di totygno71 data: 22/04/2013 13:29:05

    ok
    cle classe fai pippo?



  • di Vecchio Frac data: 22/04/2013 13:54:55

    ^_^ LOL





  • di totygno71 data: 22/04/2013 14:23:58

    LOL ^_^
    della serie prevenire è meglio che curare_



  • di pippo02 (utente non iscritto) data: 22/04/2013 14:54:47

    non sono più uno studente da diversi anni. Quindi molte cose, se sono necessarie per il codice, l'ho dimenticate.



  • di Vecchio Frac data: 22/04/2013 15:01:37

    Leggi bene i suggerimenti di totygno71.
    - Imposta Randomize timer.
    - Togli gli Exit Sub dentro gli If, che interrompono l'esecuzione della macro appena si verifica la condizione.
    - Lega la variabile "num_tentativi" a una textbox così avrai sia la visualizzazione dei tentativi in corso che il controllo sul numero di tentativi effettuati.
    - Imposta un flag per la vittoria in If x = num_casuale, esempio flag = True, in modo da fare quel che vuoi tu in caso di vittoria (mostrare un msgbox, impostare una label, ecc.)





  • di pippo02 (utente non iscritto) data: 22/04/2013 15:58:02

    Ragazzi grazie per la pazienza e la disponibilità che mi state dando. Pur sapendo che un forum non è una scuola, ho cercato di fare le modifiche che mi avete scritto, ma non mi sembra che siano scritte correttamente da parte mia.

    Vi allego il file per le correzzioni.

    grazie ancora



  • di Vecchio Frac data: 22/04/2013 18:31:31

    Prova a confrontare questo codice col tuo e nota le differenze principali.
     
    Option Explicit
    
    Private num_casuale As Integer
    
    
    Private Sub UserForm_Initialize()
        TextBox2 = 1
        num_casuale = Int(10 * Rnd)
        Label4.Caption = ""
    End Sub
    
    
    
    Private Sub CommandButton1_Click()
    Dim num_tentativi As Integer   'variabile che  contiene il numenro di tentativi (3)
    Dim x As Integer               'variabile che contiene numero inserito dall'utente
    Dim y As Boolean
    
        Randomize Timer
        
        If TextBox2.Value < 3 Then
            
            If TextBox1.Text = "" Then
                MsgBox "Attenzione! Devi inserire un numero.", vbExclamation, "Excel e VBA"
                TextBox1.SetFocus
                Exit Sub
            End If
            
            x = TextBox1
            
            If x > num_casuale Then         'se il numero inserito dall'utente è minore del num_casuale
                 MsgBox "Attenzione! Il numero inserito è alto.", vbExclamation, "Excel e VBA"
                 y = False
            
            ElseIf x < num_casuale Then     'se il numero inserito dall'utente è minore del num_casuale
                MsgBox "Attenzione! Il numero inserito è basso.", vbExclamation, "Excel e VBA"
                y = False
                
            ElseIf x = num_casuale Then     'se il numero inserito dall'utente è uguale al num_casuale
                y = True
            
            End If
            
            TextBox1.SetFocus
            
            TextBox2 = TextBox2 + 1
                
            If y Then
                TextBox1.SetFocus
        
                MsgBox "Indovinato! Il numero inserito è uguale al numero estratto.", vbExclamation, "Excel e VBA"
                
                Label4.Caption = num_casuale  'Mostra il numero nella label estratto se è uguale a quello inserito dall'utente
                
            End If
            
        Else
                MsgBox "Sono finiti i tentativi a disposizione e non hai indovinato :(" & vbCrLf & _
                "Il numero segreto era: " & num_casuale, vbExclamation, "Excel e VBA"
            
        End If
        
    End Sub
    
    Private Sub CommandButton2_Click()
        TextBox1.Text = ""
        TextBox2 = 1
        Label4.Caption = ""
        TextBox1.SetFocus
    End Sub
    
    Private Sub CommandButton3_Click()
        Unload Me
    End Sub
    






  • di pippo02 (utente non iscritto) data: 22/04/2013 18:53:51

    Vecchio Frac grazie della tua disponibilità e pazienza nel riscrivere il codice. Ancora un volta sono rimasto soddisfatto dell'aiuto che mi hai datoe che date nel forum a persone che si trovano in difficoltà. Già ad occhio ho visto tante differenze.

    Ringrazio te e tutti i ragazzi del forum.

    Saluti da pippo02



  • di Vecchio Frac data: 22/04/2013 19:49:25

    L'importante è che tu capisca la logica del codice (num_casuale in testa al modulo, la parte Form_Initialize, il meccanismo di incremento del contatore, ecc.).





  • di totygno71 data: 22/04/2013 21:57:39

    @VF
    nella tesxt per errore ho scritto q anzichè 1...
    Si è impallato tutto...ho dovuto formattare il PC



  • di Vecchio Frac data: 23/04/2013 08:29:54

    LOL ^_^
    Vero, non c'è un controllo tipo "is numeric".

    Prima di
    x = TextBox1
    basteranno queste istruzioni per implementare questo controllo.

     
    If TextBox1 Like "*[!0-9]*" Then 
        MsgBox "Attenzione! Sono accettati solo numeri. Riprova!", vbExclamation, "Excel e VBA"
        TextBox1.SetFocus
        Exit Sub
    End If
    
    x = TextBox1