Programme de simulation

Bonjour,

Je cherche à réaliser un programme un peu spécial et complexe.

J'ai 4 boules avec pour chacune plusieurs couleurs différents (noir, rouge, bleu et vert)

J'aimerai réalisé un programme qui me donne toutes les différentes configurations possibles par exemple :

boule 1 -> noir ; boule 2 -> noir ; boule 3 -> noir ; boule 4 -> noir .

boule 1 -> noir ; boule 2 -> noir ; boule 3 -> noir ; boule 4 -> bleu.

boule 1 -> noir ; boule 2 -> noir ; boule 3 -> bleu ; boule 4 -> bleu .etc...

Je ne sais pas du tout par ou commencer si je dois réaliser sa avec des boucles ou des conditions sur une macro ou si Excel possèdes déjà des fonctions qui pourraient l'aider.

SVP, aidez-moi


Voici le début de programme Excel.

Bonjour,

Il s'agit donc d'opérer des tirages de boules de couleurs pour chaque joueur tour à tour, et valoriser son tirage en points...

On tire 4 boules, chacune pouvant prendre une couleur parmi 4, indépendamment les unes des autres.

Avec une boule on a donc 4 possibilités. Avec 2 boules, chaque boule possible pour la première peut former 4 duos possibles avec la seconde... On a donc 4 * 4 = 16 possibilités. Avec 3 boules, chaque duo possible peut former 4 trios... On a alors 16 * 4 = 64 possibilités. Même chose avec la 4e, on obtient donc 64 * 4 = 256 combinaisons (4 ^ 4).

La question est donc de tirer une combinaison sur 256 possibles, et identifier rapidement à quoi correspond cette combinaison traduite en 4 boules de couleurs...

Ce qui est remarquable dans ce nombre de combinaisons, c'est qu'il correspond aux valeurs que peut prendre un octet ! Soit 0 à 255.

On peut facilement faire un tirage aléatoire renvoyant un nombre de 0 à 255.

Convertissons ce nombre en valeur binaire, on aura une chaîne de 8 caractères composée de 0 et de 1.

Ces 8 caractères se divisent aisément en 4 couples de 2, chaque couple pouvant donc correspondre à une boule.

Chaque couple représente aussi un nombre binaire pouvant être : 00, 01, 10, 11, qui converti en décimal donnera un nombre de 0 à 3.

Soit 4 possibilités que nous pouvons assimiler chacune à une couleur et un nombre de points...

Mettons au point d'abord une procédure de tirage pouvant renvoyer un tableau de 4 nombres, chacun pouvant avoir une valeur de 0 à 3 :

Function TirageBoules()
    Dim x, b(3), i%
    Randomize
    x = Int(256 * Rnd)
    x = WorksheetFunction.Dec2Bin(x, 8)
    For i = 1 To 4
        b(i - 1) = WorksheetFunction.Bin2Dec(Mid(x, i * 2 - 1, 2))
    Next i
    TirageBoules = b
End Function

Comme décrit au-dessus, on initialise le générateur de nombres aléatoires et on tire un nombre de 0 à 255, on convertit ce nombre en valeur binaire (8 caractères), on reconvertit chaque couple de 2 caractères en valeur décimale de 0 à 3, qu'on place dans un tableau. La procédure est établie sous forme de Function qui renverra ce tableau à une procédure appelante.

La procédure appelante devra gérer le jeu. Soit pour chaque joueur tour à tour, opérer le tirage (appel de la fonction), colorer les cellules en fonction du tirage, et le valoriser en points.

Une fois défilé les 4 joueurs (par appuis successifs sur un bouton), il convient que l'on revienne au 1er pour entamer un nouveau tour.

On va pouvoir obtenir ce cycle avec une variable statique (déclarée avec l'instruction Static). Cette variable qui aura donc la valeur 0 au premier appel de la procédure (valeur qui permettra d'affecter le résultat au joueur 1) sera incrémentée en fin de procédure. A l'appel suivant, elle aura donc la valeur 1 (permettant d'affecter le résultat au joueur 2), et ainsi de suite jusqu'à 3 pour accomplir un premier cycle des 4 joueurs. A la fin du cycle la variable incrémentée prendra la valeur 4, mais en retenant comme valeur le modulo 4, on la ramène à 0, ce qui permettra d'entamer un nouveau cycle.

On définit dans cette procédure : un tableau des 4 couleurs (noir, rouge, bleu, vert), un autre tableau des points (0, 5, 10, 99), et on appelle la fonction pour recueillir le tirage dans un tableau.

On a donc 4 tableau d'indice 0 à 3. Le tableau tirage contient 4 valeurs de 0 à 3, qui indiqueront la couleur à prélever dans le tableau couleurs, et le nombre de points à ajouter dans le tableau points.

Le 1er joueur est sur la ligne 6, 1re cellule boule en B6 : une boucle de 0 à 3 permet de défiler les valeurs tirées dans le tableau tirage. Ces valeurs d'indice définissent également le décalage (Offset) par rapport à B6 des 4 cellules boules. La cellule points étant fixe, son décalage par rapport à B6 est constant.

Par ailleurs, la variable statique évoquée nous fournit un décalage en lignes par rapport à B6, qui nous fera passer d'un joueur au suivant.

On a donc ainsi la structure complète apte à opérer :

Sub Jouer()
    Static j%
    Dim clr, pts, tir, i%
    clr = Array(vbBlack, vbRed, vbBlue, vbGreen)
    pts = Array(0, 5, 10, 99)
    tir = TirageBoules
    With ActiveSheet.Range("B6")
        Application.ScreenUpdating = False
        For i = 0 To 3
            .Offset(j, i).Interior.Color = clr(tir(i))
            .Offset(j, 4) = .Offset(j, 4) + pts(tir(i))
        Next i
    End With
    j = (j + 1) Mod 4
End Sub

Si l'on fait plusieurs cycles, les points se cumuleront. Si l'on veut revenir à zéro, il convient d'effacer. On ajoute donc un procédure d'effacement :

Sub Effacer()
    With ActiveSheet.Range("B6:F9")
        Application.ScreenUpdating = False
        .ClearContents
        .Interior.ColorIndex = xlColorIndexNone
    End With
End Sub

Et notre dispositif de jeu est complet !

Cordialement.

Merci beaucoup je vais étudier votre programme qui semble très complet.

Rechercher des sujets similaires à "programme simulation"