Machine à sous

Bonjour,

Pour faire suite aux conversations avec Moul, je suis en cours de développement d'une slot machine à 5 rouleaux avec 99 lignes de gains possibles !

Je me suis arrêté à 99 lignes car cela représente le nombre de possibilité de ligne entre les images des chaque rouleau avec un contact minimum en diagonale, ce qui veut dire qu'une combinaison partant de l'image en haut à gauche de la machine ne peut que passer par l'image en haut de la roue à sa droite ou par celle du milieu mais ne peut "sauter" à celle du bas.

Le test des gains avec 18 symboles et les combinaisons 5/5, 4+1 étoile, 4/5 en continue, 3 + 2 étoiles, 2 + 3 étoiles et 3 en continue ne prend que 0,04 seconde sur ma machine !

Je suis plutôt content du résultat, et je dois maintenant réfléchir aux combinaisons particulières, voir les probabilités de sortie pour ajuster les gains au coût de jeu des différentes lignes...

Merci une fois de plus à Moul pour "cette relance"!

@ bientôt

LouReeD

Bonjour LouReed,

Eh bien dit donc à ce que je vois, je vous est vraiment motivé !

Je n'ai malheureusement pas eu le temps de regarder cette nouvelle machine

Mais 99 lignes de gains, ça commence a faire !

Mais n'est on pas certain de gagner a chaque tour ? Il va sûrement falloir des tableaux pour les roues immenses non ?

En tout cas bonne continuation

Bonsoir Moul !

De quel tableaux parlez vous ?

En fait tout se passe en tableau VBA avec des boucles et des variables qui passent à True ou restent à False si la ligne est comptabilisée comme gagnante ou pas.

Donc un tableau des images affichées, un tableau des différentes combinaison avec comme valeur le numéro des images qui composent cette combinaison pour chaque roue : exemple la ligne horizontale de gain se traduit par :

roue 1, image 3 (c'est la troisième image visible de la roue 1), roue 2, image 3, roue 3 image 3 etc...

Ensuite un tableau de 99 lignes "construit" en fonction des deux premiers :

LG(1) = nom des images correspondant à la combinaison 1

LG(1) = tableau des image(roue 1)(image(roue1,combinaison 1) etc...

Un tableau de ligne déjà gagnée ou pas (vrai ou faut)

Après on boucle sur les différents symboles et sur le tableau LG() avec un test de la ligne déjà gagnante

For i = 0 to 18 ' boucle des symboles

For j=0 to 98 ' boucle du tableau des 99 combinaisons construites grâce au tableau de combinaison et d'image

Si ligne gagnante = false et len(replace(lg(j),chr(65+i),"")) = 0 then ' on a une ligne de 5 symboles identiques c'est gagné !

du coup ligne gagnante passe à true, du coup cette ligne pour les autres symbole ne sera plus testée !

Une partie du code :

Sub Vérifications(TabImgAff)
    Application.ScreenUpdating = False
    Dim CombiLigneImg(0 To 98, 0 To 4)
    Dim LG(0 To 98),  Temp, Cpt5, Cpt41, Cpt4, Cpt32, Cpt23, Cpt3
    Dim I, J, K, X, Y, LV(0 To 98)
    ' mise en place des différentes combinaisons grâce à la feuille de combinaison
    X = 2
    Y = 2
    With Feuil2
        For K = 0 To 98
            For J = 0 To 4
                For I = 0 To 2
                    If .Cells(X + I, Y + J).Interior.Color = RGB(255, 0, 0) Or .Cells(X + I, Y + J).Interior.Color = RGB(0, 255, 0) Then
                        CombiLigneImg(K, J) = I + 2
                        Exit For
                    End If
                Next I
            Next J
            Y = Y + 6
            If .Cells(X, Y).Interior.Color = 0 Then
                X = X + 4
                Y = 2
            End If
        Next K
    End With

    ' initialisation des compteurs de code administrateur
    Cpt5 = 0: Cpt41 = 0: Cpt4 = 0: Cpt3 = 0: Cpt32 = 0: Cpt23 = 0

    ' création de la liste des combinaison en fonction du tirage
    For I = 0 To 98
        LG(I) = TabImgAff(0)((CombiLigneImg(I, 0) - 1)) & TabImgAff(1)((CombiLigneImg(I, 1) - 1)) & TabImgAff(2)((CombiLigneImg(I, 2) - 1)) & TabImgAff(3)((CombiLigneImg(I, 3) - 1)) & TabImgAff(4)((CombiLigneImg(I, 4) - 1))
    Next I

    For J = 0 To 8
        For I = 0 To 98
            If LV(I) = False Then
                ' 5
                If Len(Replace(LG(I), Chr(65 + J), "")) = 0 Then
                    Cpt5 = Cpt5 + 1
                    LV(I) = True
                ' 4 + A
                ElseIf Len(Replace(LG(I), "A", "")) = 4 And Len(Replace(LG(I), Chr(65 + J), "")) = 1 Then
                    Cpt41 = Cpt41 + 1
                    LV(I) = True
                ' 4
                ElseIf Len(Replace(Left(LG(I), 4), Chr(65 + J), "")) = 0 Or Len(Replace(Right(LG(I), 4), Chr(65 + J), "")) = 0 Then
                    Cpt4 = Cpt4 + 1
                    LV(I) = True
                ' 3A + 2
                ElseIf Len(Replace(LG(I), "A", "")) = 2 And Len(Replace(LG(I), Chr(65 + J), "")) = 3 Then
                    Cpt23 = Cpt23 + 1
                    LV(I) = True
                '2A +3
                ElseIf Len(Replace(LG(I), "A", "")) = 3 And (Len(Replace(Left(LG(I), 3), Chr(65 + J), "")) = 0 Or _
                       Len(Replace(Mid(LG(I), 2, 3), Chr(65 + J), "")) = 0 Or _
                       Len(Replace(Right(LG(I), 3), Chr(65 + J), "")) = 0) Then
                    Cpt32 = Cpt32 + 1
                    LV(I) = True
                ' 3
               ElseIf Len(Replace(Left(LG(I), 3), Chr(65 + J), "")) = 0 Or Len(Replace(Right(LG(I), 3), Chr(65 + J), "")) = 0 Or Len(Replace(Mid(LG(I), 2, 3), Chr(65 + J), "")) = 0 Then
                    Cpt3 = Cpt3 + 1
                    LV(I) = True
               End If
            End If
        Next I
    Next J

    Erase LV

    MsgBox (" 5 alignées : " & Cpt5 & Chr(10) & _
            " 4 + 1 étoile : " & Cpt41 & Chr(10) & _
            " 4 alignés : " & Cpt4 & Chr(10) & _
            " 3 + 2 étoiles : " & Cpt32 & Chr(10) & _
            " 3 étoiles + 2 : " & Cpt23 & Chr(10) & _
            " 3 alignés : " & Cpt3)
End Sub

Dans le commentaires le '5 veut dire recherche d'une ligne de 5 symboles et le '3A+2 recherche une ligne avec 3 étoiles (bonus) et deux symboles identiques, etc...

@ bientôt

LouReeD

Bonsoir, ou bonjour vu l'heure...

Je suis encore en train de flâner sur mon BlindTest moi !

Un problème avec le site pour la section "Téléchargements" m'empêche de faire quoi que ce soit...

Après un cours échange avec l'administrateur, il m'a dit de patienter le mois prochain.

Il devrait joindre l'ensemble des comptes pour que ceux-ci est accès à toutes les sections (Forum, Téléchargements ...)

Enfin bref, la n'est pas le sujet !

Pour le tableau, je parlais du tableau des roues et des images que celles-ci peuvent avoir.

Pour moi 99 Ligne indiquent beaucoup, beaucoup de possibilité.

Ou je n'ai peut être pas saisi ce que vous faisiez... Shame on Me !

J'ai pas réellement analysé la programmation, il est difficile de se donner une idée de comment cette macro fonctionne sans fichier.

D'ailleurs, en retournant sur la page de téléchargement de votre Machine à Sous, je ne vois que l'ancienne version.

Est-ce normal ou est ce aussi du au soucis de la plateforme "Téléchargement" du site ?

A bientôt.

Bonsoir,

suite à la "re lecture" attentive du "cours" de waard au sujet des Spritesheet : ICI
j'ai ré écrit mon code de machine à sous :

J'ai "dessiné" les 42 positions de la roue afin de donner une impression de rotation de cette dernière avec 20 images de "gravées" dessus :

sans titre

Avec l'idée du rognage, je n'affiche dans un shape qu'une seule colonne de cette image, et lors de la rotation des roues il suffit de demander à déplacer l'image dans le rognage d'une valeur égale à la largeur d'une colonne. Une fois la dernière colonne affichée, on bascule de l'autre coté et la rotation continue.

Les cinq images de la machine sont gérées par tableau VBA, il suffit donc de boucler pour afficher les "rotations".

Le fichier test pour exemple, seul le lancement de la rotation et cette dernière est gérée, pas de gain et rien d'autre, c'est juste une information de développement et merci de m'indiquer si chez vous ça rame ou si c'est fluide, car chez moi ça rame un peu sauf quand il ne reste plus qu'une ou deux roues à tourner :

75-rapide.zip (760.87 Ko)
Sub LouReeD()

    ' création d'un tableau de "5" roues avec en première donnée la colonne à afficher et en deuxième donnée le nombre de tour
    Dim TabRoue(0 To 5, 1 To 2), I, J

    ' initialisation de la fonction aléatoire
    Randomize

    ' on force la taille des cadres de roues (zone visible du rognage)
    ' on force la taille de l'image qui est rognée
    ' on défini la position de départ de chaque roue avec les données enregistrées
    ' et le nombre de rotation, la règle :
    ' la roue droite a un nombre de rotation égale à celle de gauche + un aléatoire de 0 à 24
    ' avec un minimum de 1 rotation de plus (rotation = déplacement d'1/40 de tour de roue)
    For I = 1 To 5
        ActiveSheet.Shapes("_R" & I).Width = 50
        ActiveSheet.Shapes("_R" & I).PictureFormat.Crop.PictureWidth = 2100
        TabRoue(I, 1) = ActiveSheet.Cells(13, I)
        TabRoue(I, 2) = IIf(I = 1, (Int(Rnd * 2)) * 41 + 45, TabRoue(I - 1, 2) + Int(Rnd * 25) + 1)
    Next I

    ' boucle de rotation des roues
    ' on prend le nombre de rotation de la roue 5 comme maximum
    For I = 0 To TabRoue(5, 2)

        ' si les roues doivent encore tournée alors on décale l'image dans le cadre de rognage afin d'afficher la nouvelle colonne
        ' ceci provoque l'animation
        For J = 1 To 5
            If I <= TabRoue(J, 2) Then ActiveSheet.Shapes("_R" & J).PictureFormat.Crop.PictureOffsetX = 1025 - TabRoue(J, 1)
        Next J

        ' temporisation pour voir ce qui se passe
        Tempo = Timer
        Do
            DoEvents
        Loop While Tempo + 0.1 > Timer ' pour une rotation plus rapide descendre jusqu'à 0.04 "max" après il y a des sauts d'image

        ' calcul de la colonne à afficher = ancienne colonne + 50
        ' et si la colonne à afficher est en dehors de l'image on repasse à la colonne 0
        For J = 1 To 5
            If I < TabRoue(J, 2) Then TabRoue(J, 1) = TabRoue(J, 1) + 50
            If TabRoue(J, 1) >= 2100 Then TabRoue(J, 1) = 0
        Next J

    Next I

    ' on enregistre la position finale des roues pour le début de la partie suivante
    For I = 1 To 5
        ActiveSheet.Cells(13, I) = TabRoue(I, 1)
    Next I

End Sub

Les roues avec ce système peuvent s'arrêter sur une "case blanche" comme le font les "machines physiques". Autre avantage de ce système (merci encore waard !) c'est qu'il n'y a plus de téléchargement d'image et le fichier de ce coté est autonome, plus de dossier image... Et ceci ne change rien au thème si ce n'est que les images sont plus "délicates" à créer.

Je pense partir sur ce système pour la version 5 roues, il me reste à gérer les combinaisons qui seront fonction de la position de l'image dans le shape :
combinaison "barre" "diamant" "cloche" "cerise" "barre" "orange" si position "1" c'est à dire colonne de gauche de l'image ci dessus. Il y aura donc un tableau reprenant toutes ces combinaisons, bref du développement...

@ bientôt

LouReeD

828 téléchargements, même score que sa petite sœur !

Merci @ vous !

@ bientôt

LouReeD

Rechercher des sujets similaires à "machine"