Gioco delle carte excel



  • Gioco delle carte excel
    di Maurizio (utente non iscritto) data: 02/01/2013 11:08:44

    Buon Giorno a Buon Anno Nuovo a tutti voi : Mi Chiamo Maurizio e il mio problema e Questo : In Excel avvalendomi di un UserForm o Inserito 32 ImageBox .
    Di qui 16 lo o Chiamate ( Numero ) ; e le Altre 16 le o Chiamate ( Dorso ).
    ora lo Scopo di Questo Giochino sarebbe Quello di Fare un Click su' di una Figura Qualsiasi chiamata Dorso , e Nell'aprirsi dovrebbe Evidenziarmi una carta da Gioco , Come ad Esempio : ( L'asso di Picche ).
    Poi Successivamente si Dovrebbe Compiere la Stessa Azione su di un altra Figura , e Se' le due carte Corrispondono ; Dovrebbero Sparire dal Piano di Gioco ; Nel caso contrario Si Dovrebbere Nuovamente Ricoprire Entrambi .
    Ora il mio progetto sino a Questo Punto ; Cosi come lo Ideato Io Funziona benissimo : Il Problema e che pero' Non o ancora capito e Perche' mi apre tutte le carte da gioco ma non esegue il Confronto .
    E Pensare che le o provate tutte ; Voi Riuscireste a darmi una Mano in merito a questo problema !.
    Distinti Saluti in fede A. Maurizio
    (N.B) Nel caso in qui Voi lo Vogliate Inviatemi il Vostro indirizzo E_mail cosi che io vi possa Inviare Direttamente L'intero Lavoro.
     
    Private Declare Function Play Lib "WINMM.DLL" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Dim num(0 To 15), coppia(0 To 15), conta, vinto, primo, secondo As Byte
    
    Dim Dorso As Image
    Dim Numero As Image
    
    Private Sub inizio()
    'Impostazioni Delle Variabili per il Riconoscimento e il Ripescaggio Delle Carte da Gioco
    For a = 0 To 15
    Controls("Dorso" & a).Enabled = True
    Next a
    For m = 0 To 15
    coppia(m) = 0
    Controls("Numero" & m).Visible = False
    Controls("Dorso" & m).Visible = True
    Controls("Dorso" & m).Picture = LoadPicture("C:Carte da Giocodorso_05 1.bmp")
    Next m
    For i = 0 To 15
    Do
    Randomize
    num(i) = Int(16 * Rnd)
    Loop While coppia(num(i)) = 100
    coppia(num(i)) = 100
    Next i
    For i = 0 To 15
    Select Case num(i)
    Case 0, 8
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco1 cuori 1.jpg")
    Case 1, 9
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco1 fiori 1.jpg")
    Case 2, 10
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco1 picche 1.jpg")
    Case 3, 11
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco1 quadri 1.jpg")
    Case 4, 12
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco2 cuori 1.jpg")
    Case 5, 13
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco2 fiori 1.jpg")
    Case 6, 14
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco2 picche 1.jpg")
    Case 7, 15
    Controls("Numero" & i).Picture = LoadPicture("C:Carte da Gioco2 quadri 1.jpg")
    End Select
    Next i
    End Sub
    
    Private Sub new_Click()
    inizio
    End Sub
    
    Sub Timer1()
    'Vontrollo delle Carte da Gioco Estratte e la loro Posizzione
    conta = 0
    If (num(primo) = 0 And num(secondo) = 8) Or (num(primo) = 1 And _
    num(secondo) = 9) Or (num(primo) = 2 And num(secondo) = 10) Or (num(primo) = 3 And _
    num(secondo) = 11) Or (num(primo) = 4 And num(secondo) = 12) Or (num(primo) = 5 And _
    num(secondo) = 13) Or (num(primo) = 6 And num(secondo) = 14) Or (num(primo) = 7 And _
    num(secondo) = 15) Or (num(secondo) = 0 And num(primo) = 8) Or (num(secondo) = 1 And _
    num(primo) = 9) Or (num(secondo) = 2 And num(primo) = 10) Or (num(secondo) = 3 And _
    num(primo) = 11) Or (num(secondo) = 4 And num(primo) = 12) Or (num(secondo) = 5 And _
    num(primo) = 13) Or (num(secondo) = 6 And num(primo) = 14) Or (num(secondo) = 7 And _
    num(primo) = 15) Then
    
    Controls(secondo).Visible = False
    Controls(primo).Visible = False
    Controls(secondo).Visible = False
    Controls(primo).Visible = False
    Else
    Controls(primo).Visible = False
    Controls(secondo).Visible = False
    Controls(primo).Visible = True
    Controls(secondo).Visible = True
    End If
    
    If Numero0.Visible = False And Dorso0.Visible = False And _
    Numero1.Visible = False And Dorso1.Visible = False And _
    Dorso2.Visible = False And Numero2.Visible = False And _
    Dorso3.Visible = False And Numero3.Visible = False And _
    Dorso4.Visible = False And Numero4.Visible = False And _
    Dorso5.Visible = False And Numero5.Visible = False And _
    Dorso6.Visible = False And Numero6.Visible = False And _
    Dorso7.Visible = False And Numero7.Visible = False And _
    Dorso8.Visible = False And Numero9.Visible = False And _
    Dorso9.Visible = False And Dorso10.Visible = False And _
    Numero10.Visible = False And Dorso11.Visible = False And _
    Numero11.Visible = False And Dorso12.Visible = False And _
    Numero12.Visible = False And Dorso13.Visible = False And _
    Numero13.Visible = False And Dorso14.Visible = False And _
    Numero14.Visible = False And Dorso15.Visible = False And _
    Numero15.Visible = False Then
    'Routine Dei Saluti Per un Eventuale Vincita
    Dim Ret As Long
        Dim file As String
        file = "C:Carte da Giocoapplause_2.wav"
        Ret = Play(file, SND_ASYNC)
    MsgBox "Bravo Hai Completato L'intero Gioco - Memori Song...!", vbLf & vbInformation, "Attenzione...!"
    End If
    Temporizzatore ' Chiama la Macro1 come Temporizzatore del Gioco Stesso
    'End If
    End Sub
    
    Private Sub click()
    'Emette il Suono ad ogni Click Fatta Sull'imagine di Base
    Dim Ret As Long
        Dim file As String
        file = "C:Carte da Giococamera1.wav"
        Ret = Play(file, SND_ASYNC)
    End Sub
    
    Private Sub Cmd_Esci_Click()
    End
    End Sub
    
    Private Sub Cmd_New_Click()
    ' Inizio Gioco
    inizio
    End Sub
    
    Private Sub Dorso0_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero0" & Index).Visible = True
    Controls("Dorso0" & Index).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero0" & Index).Visible = True
    Controls("Dorso0" & Index).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso1_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero1" & Index).Visible = True
    Controls("Dorso1" & Index).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero1" & Index).Visible = True
    Controls("Dorso1" & Index).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso10_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero10" & (Index)).Visible = True
    Controls("Dorso10" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero10" & (Index)).Visible = True
    Controls("Dorso10" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso11_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero11" & (Index)).Visible = True
    Controls("Dorso11" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero11" & (Index)).Visible = True
    Controls("Dorso11" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso12_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero12" & (Index)).Visible = True
    Controls("Dorso12" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero12" & (Index)).Visible = True
    Controls("Dorso12" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso13_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero13" & (Index)).Visible = True
    Controls("Dorso13" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero13" & (Index)).Visible = True
    Controls("Dorso13" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso14_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero14" & (Index)).Visible = True
    Controls("Dorso14" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero14" & (Index)).Visible = True
    Controls("Dorso14" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso15_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero15" & (Index)).Visible = True
    Controls("Dorso15" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero15" & (Index)).Visible = True
    Controls("Dorso15" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso2_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero2" & (Index)).Visible = True
    Controls("Dorso2" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero2" & (Index)).Visible = True
    Controls("Dorso2" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso3_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero3" & (Index)).Visible = True
    Controls("Dorso3" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero3" & (Index)).Visible = True
    Controls("Dorso3" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso4_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero4" & (Index)).Visible = True
    Controls("Dorso4" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero4" & (Index)).Visible = True
    Controls("Dorso4" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso5_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero5" & (Index)).Visible = True
    Controls("Dorso5" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero5" & (Index)).Visible = True
    Controls("Dorso5" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso6_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero6" & (Index)).Visible = True
    Controls("Dorso6" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero6" & (Index)).Visible = True
    Controls("Dorso6" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso7_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero7" & (Index)).Visible = True
    Controls("Dorso7" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero7" & (Index)).Visible = True
    Controls("Dorso7" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso8_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero8" & (Index)).Visible = True
    Controls("Dorso8" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero8" & (Index)).Visible = True
    Controls("Dorso8" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub Dorso9_Click()
    click
    conta = conta + 1
    If conta = 1 Then
    Controls("Numero9" & (Index)).Visible = True
    Controls("Dorso9" & (Index)).Visible = False
    primo = Index
    End If
    If conta = 2 Then
    Controls("Numero9" & (Index)).Visible = True
    Controls("Dorso9" & (Index)).Visible = False
    Timer1
    secondo = Index
    End If
    End Sub
    
    Private Sub UserForm_Activate()
    ' Variabile di Controllo e di Impostazione del Gioco Iniziale
    conta = 0
    For a = 0 To 15
    Controls("Dorso" & a).Picture = LoadPicture("C:Carte da Giocodorso_05 1.bmp")
    Controls("Dorso" & a).Enabled = False
    Next a
    inizio
    End Sub
    
    Private Sub UserForm_Click()
    'Idem Come Sopra ma ad Ogni Click del Mouse Fatta su' di Una Parte Vuota del Form
    conta = 0
    For a = 0 To 15
    Controls("Dorso" & a).Picture = LoadPicture("C:Carte da Giocodorso_05 1.bmp")
    Controls("Dorso" & a).Enabled = False
    Next a
    inizio
    End Sub
    
    Sub Temporizzatore()
    Dim PauseTime, Start, Finish, TotalTim
    
       PauseTime = 2                        ' Imposta la durata.
       Start = Timer                        ' Imposta I secondi di Inizio.
       Do While Timer < Start + PauseTime
          DoEvents                          ' Sospende il Lavoro Dell'intero Programma Per Tot Secondi.
       Loop
       Finish = Timer                       ' Fine della Pausa e Ripresa Dell'intero Programma.
       TotalTime = Finish - Start
     Call UserForm1.Timer1
    End Sub



  • di Vecchio Frac data: 02/01/2013 12:02:00

    Un bel gioco del Memory fatto in casa insomma, bravo ^_^
    Ora, per la fretta, non riesco a individuare il punto dove viene fatto il confronto... non lo trovo e non so se è stato impostato. Nemmeno il riferimento a "index" mi è chiaro ora come ora...
    scappo ma ci torno sopra ^_^





  • di Vecchio Frac data: 02/01/2013 13:54:51

    Mi piacerebbe avere il file su cui lavorare.
    Fai un zip e allegalo qui a una nuova risposta (anche senza immagini va bene).
    Ci sono diverse cose che si possono snellire perchè appesantiscono il codice e sono inutili (ad esempio, nella sub Timer1, quell'
    If (num(primo) = 0 And num(secondo) = 8) Or ... Or (num(secondo) = 0 And num(primo) = 8)
    sono del tutto equivalenti, quindi ti basta scriverlo una volta sola e già dimezzi il codice di If).
    E anche qui:
    Controls(secondo).Visible = False
    Controls(primo).Visible = False
    Controls(secondo).Visible = False
    Controls(primo).Visible = False
    le seconde istruzioni sostituiscono le precedenti, quindi basta scriverle una volta sola.
    Comunque non c'è traccia di un confronto sulle carte girate e quindi ancora non può funzionare "benissimo" ^_^
    Stasera quando rientro dal lavoro spero che avrai allegato il tuo file, così lavoriamo sul concreto (non serve che posti le immagini).





  • di HarryBosch data: 02/01/2013 15:58:46

    Si si, sarebbe bello avere un file di esempio.
    Anch'io avevo creato qualcosa di simile tempo fa, seguendo una esercitazione presa da un libro ^_^
    Solo che le immagini erano sul foglio, ma il concetto rimane lo stesso



  • di Vecchio Frac data: 02/01/2013 20:21:22

    Hai messo la cartella completa con immagini e suoni, grazie Maurizio.
    Adesso sarà più facile darti una mano concreta :)





  • di Vecchio Frac data: 02/01/2013 20:40:51

    Il codice è una trasposizione abbastanza inaccurata di un precedente in VB6 (è evidente dal'evento _Timer1 che è inutilizzato e al suo posto si ricorre a una sub Temporizzatore). Anche i diversi riferimenti alle matrici di controlli (le proprietà Index sparse nei diversi eventi sui Dorsi) derivano dall'impostazione VBista :)
    Il codice è da ottimizzare ampiamente, ho letto il post it e proverò a proporre una mia soluzione, magari anche altri se vogliono possono intervenire e contribuire.

    (p.s. non è usuale darsi del "Lei" in forum, infatti cerchiamo di essere meno formali possibile)





  • di Vecchio Frac data: 03/01/2013 00:09:58

    Allego il file Excel. Dalle mie (poche) prove funziona correttamente (compreso il tada se si scelgono due carte uguali).
    Ho modificato pochissimo il codice per lasciarlo aderente all'originale.
    Però ci sarebbe da lavorarci pesantemente, a cominciare dalla logica :)
    E se ho tempo domani provo a buttare giù un'idea di lavoro, se interessa.





  • di Vecchio Frac data: 03/01/2013 11:13:38

    Comincio con l'allegare una versione ampiamente rinnovata, semplificata (a cominciare dal percorso dei file, adesso i file di supporto basta che risiedano nella stessa cartella del file di Excel: dove va il programma principale, deve essere depositata lì anche la cartella delle immagini e dei suoni).
    C'è ancora molto da migliorare, ma consiglio di guardare il codice e studiare le differenze.






  • di Vecchio Frac data: 03/01/2013 13:49:21

    Allego la versione vfrac3, della quale sono abbastanza soddisfatto... ho realizzato una matrice di controlli per ridurre molto il codice e semplificare la gestione del "click" sulle carte.
    Guardate il codice e se volete lo commentiamo insieme :)




  • Ringraziamenti
    di Maury1704 (utente non iscritto) data: 05/01/2013 10:22:48

    Buon Giorno . Sono Maurizio , Non o parole per Ringrazziarvi per L'ennesima volta , sul Fatto che siete cosi riusciti in Breve tempo a darmi delle cosi valide soluzioni al mio progetto del Gioco delle Coppie o Memory che sia.
    Sono Stati per me' tutti e tre i vostri progetti molto chiari e Molto espliciti su' come Richiamare una determinata figura all'interno della mia cartella ; e non di certo come Avevo fatto Io , Ma vi prego di Credermi che non e che non Conoscessi tale funzione ; ma la realta' e che in excel non Conosco l'impostazione di tale funzione .
    Come ad esempio quando Lavoravo con Visual Basic 6.0 o Creato una sorta di Agenda Contatti , il che' Usavo 9 TextBox per Scrivere il " Nomi ; Cognomi ; Indirizzi ; Numeri ti telefono ecc..! " dopo di che' quando Premevo il Tasto salva ; il Tutto veniva salvato in Formato TXT che si trovava All'interno della mia Cartella di Lavoro .
    Il Tutto si Avvaleva anche di Frecce di Scorrimento ecc..!.
    In Excel o Dovuto desistere dal Continuare a voler a tutti i costi Ritrascrivere Tale progetto , in quanto Premendo il tasto Apri , Mi prelevava Sempre e solo il primo Cliente e non tutti gli altri , anche se' premevo i tasti Freccia.
    Non so' se' o reso L'idea ! In Poche parole non e' che non conosca il linguaggio di programmazione in generale , non Conosco la Modalita' di Espressione del VBA , tutto qui !.
    Comunque sia Siete Dei grandi ; Grazie ancora di tutto Distinti saluti In Fede A. Maurizio
    (N:B) Vi e poi Piaciuto il mio Progetto sctitto in Excel sul Calendario Perpetuo ?
    Vi chiedo in quanto a questo punto devo dire che l'avete trovato Orrendo in Quanto sino ad ora nono Ancora trovato nessun Apprezzamento o Critica da parte vostra .
    Ma non importa vi capisco benissimo anche voi come me Avete il Vostro bel Dafare.



  • di HarryBosch data: 05/01/2013 11:28:17

    L'opera qua è tutta di VecchiioFrac.
    Ed è molto interessante l'ultimo esempio, con l'utilizzo delle classi.
    Con questo esempio ho imparato delle cose nuove ^_^

    @ Maury
    "Progetto scritto in Excel sul Calendario Perpetuo. Vi chiedo in quanto a questo punto devo dire che l'avete trovato Orrendo in Quanto sino ad ora nono Ancora trovato nessun Apprezzamento o Critica da parte vostra"
    Io non l'ho trovato orrendo, anche perché non credo di averlo visto :)
    Mi sfugge questo thread, ma nei giorni scorsi sono stato in ferie.. Dove si trova questo calendario?



  • di Vecchio Frac data: 05/01/2013 12:44:33

    Chiarisco io :)
    Maury ha usato il modulo contatti sia per scrivere (un paio di volte) i suoi ringraziamenti che per allegare il file "calendario perpetuo". Tutto è arrivato al patron Mauro che ieri mi ha girato le sue email. Non ho ancora avuto modo di rispondergli.
    Ecco perchè qui non troveremo nessun thread relativo a questo argomento, nè io mi sento autorizzato a pubblicarlo :)
    Comunque approfitto di questo spazio per invitare Maurizio a continuare con Excel, che seppur diverso da VBA ha comunque diversi punti di contatto. Le differenze ci sono ma si risolvono con l'aiuto della Guida e con interventi in forum :)




  • Grazie Ancora di Tutto
    di Maury1704 data: 06/01/2013 17:07:16

    Grazie Francesco ; o Vecchio frac che tu Sia : Sono Maurizio : Ti Ringrazio Per Avermi Aiutato a Realizzare Uno dei miei Tanti Sogni nel cassetto Per cio' che Riguarda la Programmazione , nel Aver Saputo realizzare in Cosi poco Tempo Tre stupendi Modi di Interpretare la stessa funzione del mio Gioco del Memory.
    Vi Scrivo oggi in quanto da Domani per un Po' non potro' piu' interessarmi di Programmazione , in quanto Come ti Avevo spiegato in una delle mie ultime E_mail ; saro' Impegnato per un Po' con il Mio Lavoro.
    Proprio come Voi , Ma cio' Non toglie che Vorrei ancora una Volta Farvi capire quanto Io ami nel vero senso della parola la programmazione in se' :
    Per qui Desidero Offrirvi in segno di Amicizia , e di Stima che ho nei Vostri Confronti ; E' senza secondi Fini , Due dei miei Piu' Riusciti Progetti , Sperando di potervi con Questo farvi Cosa gradita ; anche qui Accetto molto Volentieri Critiche o Apprezzamenti da parte vostra .
    (N:B)
    Premessa che' il File del SuperEnalotto contiene Gia' un File Musicale , Per Qui Bastera' avviare il Solo programma Per ascoltare il Mio Brano Suonato con il mio Gruppo Musicale.
    Mentre il secondo brano Sempre Suonato da Noi , lo Dovrete aprire separatamente.
    E con Questo vi lascio andare al vostro lavoro Distinti Salòuti in fede A. Maurizio



  • di Vecchio Frac data: 06/01/2013 17:21:00

    Sei molto gentile, come sempre :)
    Grazie e auguri per il tuo lavoro.