Jeu du 4 en ligne avec accès VBA

Le jeu en lui-même est gratuit, vous n'avez pas besoin de cette version pour y jouer. Cette version optionnelle avec accès au code VBA est payante et réservée aux amateurs de VBA avertis.

A propos du jeu

Ce jeu est entièrement écrit en VBA et n'utilise aucune cellule Excel pour son fonctionnement, tous les calculs sont réalisés et stockés dans des variables ou des tableaux (arrays).

A propos de l'IA (Intelligence Artificielle)

Au début de son tour, l'IA va commencer par vérifier s'il y a une possibilité de victoire immédiate, et si ce n'est pas le cas, va évaluer la situation par simulation des tours de jeu.

Autrement dit, à chaque tour de jeu l'IA va simuler un coup dans chacune des 7 colonnes, puis va simuler le coup de l'adversaire dans chacune des 7 colonnes pour chaque colonne du coup précédent, puis va simuler le coup suivant dans chacune des 7 colonnes pour chacun des coups précédents, etc... Jusqu'à une profondeur variable (limitée notamment par les possibilités d'Excel).

A chaque niveau de simulation, l'IA va rejeter certaines possibilités non prometteuses pour alléger la simulation et prendra une décision en fonction des résultats de la simulation.

A propos du code VBA

Le code VBA est indenté, contient quelques commentaires et des noms de variables plutôt explicites. En voici 2 extraits pour avoir un exemple concret de l'apparence du code VBA.

Certains sont plutôt simples à comprendre :

'Ajout de l'image du pion joué dans le jeu
Private Sub ajoutImagePion(colonne, ligne)

    lettreCouleur = couleur()

    For i = 0 To 23
        nomControle = "Image_" & lettreCouleur & "_" & i
        If Controls(nomControle).Left > 550 Then Exit For 'Si pion libre
    Next
   
    Controls(nomControle).Left = Controls("Image_" & ligne & "_" & colonne).Left
    Controls(nomControle).Top = Controls("Image_" & ligne & "_" & colonne).Top
   
End Sub

D'autres en revanche risquent de vous retourner le cerveau :

'Simulation des tours de jeu pour IA
Private Sub tourTestIA()
   
    '...
   
    'Changement de tour
    auTourDeTest = IIf(auTourDeTest = 1, 2, 1)
    noTourTest = noTourTest + 1
   
    'Copie du tableau avant suppression du contenu
    copieTabPossibilites = tabPossibilites
    copieTabGrilles = tabGrilles
    Erase tabPossibilites
    Erase tabGrilles
    nbPossibilites = countab(copieTabPossibilites)

    'Test de chaque option
    For i = 0 To nbPossibilites - 1
       
        nbVicDef = 0
       
        '7 possibilités (au maximum)
        For colonne = 0 To 6
           
            numOption = i * 7 + colonne
           
            'Copie des données utiles
            For ii = 0 To 4
                tabPossibilites(numOption, ii) = copieTabPossibilites(i, ii)
            Next
            tabGrilles(numOption) = copieTabGrilles(i) 'Grille de jeu
           
            'Choix disponible (colonne incomplète)
            If IsEmpty(tabGrilles(numOption)(colonne, 6)) Then

                'Jeu de test
                ligne = ajoutPionTabTest(colonne, auTourDeTest, tabGrilles(numOption)) 'Ajout pion

                'MAJ des données
                tabPossibilites(numOption, 0) = 1 'Nb possibilités
               
                'Résultat défaite/victoire
                If checkVictoire(colonne, ligne, tabGrilles(numOption), auTourDeTest) Then  'Si victoire ou défaite (selon le tour simulé)
   
    '...