Tic tac toe - Probleme avec IA

Résolu
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013 - 16 juil. 2011 à 00:23
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 18 juil. 2011 à 22:33
Bonjour,
J'ai commencer a faire un tic tac toe, le mode multi marche super mais j'ai des problemes pour faire l'IA du mode solo.
Est-ce que quelqu'un pourrai m'aider s'il vous plait ?

Vous ci le code quand ont click sur une case :

   Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
        Dim Generator As System.Random = New System.Random()
        Return Generator.Next(Min, Max)
    End Function

    Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonHG.Click, ButtonHM.Click, ButtonHD.Click, ButtonMG.Click, ButtonMM.Click, ButtonMD.Click, ButtonBG.Click, ButtonBM.Click, ButtonBD.Click
        If ArackionStartup.ThemeComboBox.Text = "Par defaut" Then
            If turn = False Then
                DirectCast(sender, Button).BackgroundImage = My.Resources.Cross_DEFAUT
                DirectCast(sender, Button).Text = "X"
                DirectCast(sender, Button).Enabled = False
                turn = True
            ElseIf turn = True Then
                Dim intrand As Integer = GetRandom(0, 8)
                If (intrand = 0) Then
                    If ButtonHG.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonHG.Enabled = True Then
                        ButtonHG.Text = "O"
                        ButtonHG.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonHG.Enabled = False
                    End If
                ElseIf (intrand = 1) Then
                    If ButtonHM.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonHM.Enabled = True Then
                        ButtonHM.Text = "O"
                        ButtonHM.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonHM.Enabled = False
                    End If
                ElseIf (intrand = 2) Then
                    If ButtonHD.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonHD.Enabled = True Then
                        ButtonHD.Text = "O"
                        ButtonHD.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonHD.Enabled = False
                    End If
                ElseIf (intrand = 3) Then
                    If ButtonMG.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonMG.Enabled = True Then
                        ButtonMG.Text = "O"
                        ButtonMG.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonMG.Enabled = False
                    End If
                ElseIf (intrand = 4) Then
                    If ButtonMM.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonMM.Enabled = True Then
                        ButtonMM.Text = "O"
                        ButtonMM.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonMM.Enabled = False
                    End If
                ElseIf (intrand = 5) Then
                    If ButtonMD.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonMD.Enabled = True Then
                        ButtonMD.Text = "O"
                        ButtonMD.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonMD.Enabled = False
                    End If
                ElseIf (intrand = 6) Then
                    If ButtonBG.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonBG.Enabled = True Then
                        ButtonBG.Text = "O"
                        ButtonBG.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonBG.Enabled = False
                    End If
                ElseIf (intrand = 7) Then
                    If ButtonBM.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonBM.Enabled = True Then
                        ButtonBM.Text = "O"
                        ButtonBM.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonBM.Enabled = False
                    End If
                ElseIf (intrand = 8) Then
                    If ButtonBD.Enabled = False Then
                        GetRandom(0, 8)
                    ElseIf ButtonBD.Enabled = True Then
                        ButtonBD.Text = "O"
                        ButtonBD.BackgroundImage = My.Resources.Circle_DEFAUT
                        ButtonBD.Enabled = False
                    End If
                End If
                    turn = False
            End If
        End If
    End Sub

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 juil. 2011 à 21:47
Bonjour,

Comment l'as-tu codé mon exemple ?
Quand tu dis que "ça ne marche pas", précises toujours les détails, ce n'est pas assez précis.
Ensuite, si ça te mets un rond, ça veut dire que Enabled=True, donc que ton problème' n'est pas là où tu l'indique.

Mon site
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 juil. 2011 à 01:14
Bonjour,

Quel est ton pb ?
Ce que ça fait actuellement et ce que tu veux que ça fasse.

Mon site
0
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
16 juil. 2011 à 01:55
Mon probleme est que le "O" se place n'importe où. je sais que c'est censé etre random mais je voudrai qu'il ne se place pas sur les button desactivé.
Voici le code source complet en cas de besoin :
http://dl.dropbox.com/u/24209719/Arackion.zip

Merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 juil. 2011 à 15:26
Bonjour,

As-tu testé en pas à pas pour voir les valeurs des différentes variables ?
If .. then
Elseif .. then
...
End If
Peut se remplacer par un
Select Case ..
Case ...
...
End Select

A quoi servent les
If ButtonBG.Enabled = False Then
GetRandom(0, 8)
ElseIf ButtonBG.Enabled = True Then
?

Autre technique pour la sélection aléatoire de la case :
Dim lLst as list(of Button)=new list(of Button)
If ButtonHG.Enabled Then
    lLst.Add(ButtonHG)
End If
If ButtonBD.Enabled Then
    lLst.Add(ButtonBD)
End If
...

'Récupération du bouton à utiliser
Dim lButtonSelect as Button=lLst(GetRandom(0,lLst.Count-1))


Il s'agit d'une autre manière de voir la chose, et ça te permettra peut être de faire un code plus concis et peut être plus facilement compréhensible.

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
16 juil. 2011 à 19:05
Non j'ai pas essayer avec Select Case, à vrai dire j'ai pas appris comment ceux-ci marchaient. (je suis en quelques sortes débutant même si j'ai déjà quelques logiciels bien avancer à mon actifs)

J'ai essayer de remplacer le code par celui que vous m'avez donner mais ca ne marche toujours pas.
0
Sentynel Messages postés 85 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 13 juillet 2013
18 juil. 2011 à 15:00
Bonjour,

J'ai enfin trouver mon erreur, j'avais au part avant mit dans le mode multijoueur un boolean qui changeait en false ou true suivant le joueur désigné. Il me suffisais de le retirer et d'adapter le code pour que les O s'affichent correctement.

Je vous remercie :)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 juil. 2011 à 22:33
Bonjour,

L'emplacement de l'IA me surprenait aussi :)

Si ton problème est résolu, penses à mettre "Réponse acceptée" sur le ou les messages qui t'ont aidés.

Mon site
0
Rejoignez-nous