Programmation Msgbox si Caption = X
Je n'arrive pas a faire en sorte que qu'une fenêtre s'ouvre si les 3 premiers boutons sont cochés.
J'ai 3 buttons et 2 CheckBox
Si je coche la première CheckBox cela va me mettre un X sur le ou les boutons que je clic
Et je veux qu'une fois avoir cliquer sur les 3 boutons donc rempli de X j'ai une fenetre qu'il souvre
If bt1.Caption = "X" And bt2.Caption = "X" And bt3.Caption = "X" Then MsgBox "X Gagne"
La sa ne met rien mais la fenetre ne s'ouvre pas
La sa met une erreur
If bt1.valeur = Check1.Text And bt2.valeur = Check1.Text Then MsgBox "ok"
Concretement je veux dire:
If les 3 boutons ont pour caption "X" alors mettre fenetre.
Merci
Configuration: Windows XP Firefox 3.5.1
49 réponses
Questionnement principal : un mini-jeu de morpion nécessite d’ouvrir une fenêtre dès que trois boutons affichent X, avec 3 boutons et 2 CheckBox, et le code actuel ne déclenche pas l’ouverture. Parmi les solutions proposées, l’utilisation d’un contrôle indexé (BtJeu(Index)) permet d’appliquer un seul code gagnant pour tous les boutons et d’identifier le bouton cliqué grâce à son index. Des approches plus pratiques incluent une logique de tour avec une variable CarEnCours pour verrouiller les coups déjà joués et alterner X et O, puis tester les combinaisons gagnantes sans dupliquer le code. En pratique, l’utilisation d’un tableau des combinaisons gagnantes et d’une boucle sur l’état des boutons indexés peut simplifier le contrôle et améliorer la lisibilité du code.
-
Contributeurapres le "gagné" mais avant l exit sub bien sur...
-
Ouais on peut faire un reset sinnon ?
enfin sinnon tu le placerait ou le exit sub escuse chui un peu fatigué :) -
Contributeurben si un joueur gagne .. y a plus rien a faire (mis a part recommencer une partie) donc.. le code qu'il y a apres on le squizz.. d'où le exit sub si gagné tu me suis??
-
Comment sa ?
lol je te laisse faire voir ce que tu essai de me dire la si un joeur gagne c'est bon sa met la box x ou o gagne lol -
Contributeurnon, car il faut mettre un exit sub si un joueur gagne ;)
-
Parceque en fait si on faisait
If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
MsgBox "Match Nul"
et que toutes les cases était coché mais que soit o soit x gagnait en diagonale sa mettai
fenetre x ou o gagne
et apres fenetre match nul
mais la c bon :p -
If Command1(1).Caption <> "" And Command1(5).Caption <> "" And Command1(9).Caption <> "" Then Exit Sub
If Command1(3).Caption <> "" And Command1(5).Caption <> "" And Command1(7).Caption <> "" Then Exit Sub
If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
MsgBox "Match Nul"
J'ai trouvé tout seul !!!
J'ai pa encore lu ta solution ;) -
Contributeursi si... c'est ca :) bon, y aplus court bien sur, mais c'est l idée :)
allez.. comme t as trouver, j te donne la solution :)
PasFini =false
For Each bt In Command1 'pour tous les controls de command1
If bt.Caption = "" Then PasFini = True 'met la veriable pasfini à vrai si il trouve un command vide
Next
If Not PasFini Then 'si ce n'est pas pas fini=> fini
If MsgBox("Match nul." & Chr$(10) & Chr$(13) & "Nouvelle partie ?", vbYesNo) = vbYes Then NouveauJeu_Click
End If -
nan meme pa
-
Ah ok !!!
Donc
If Command1(1).Caption <> "" And Command1(2).Caption <> "" And Command1(3).Caption <> "" And Command1(4).Caption <> "" And Command1(5).Caption <> "" And Command1(6).Caption <> "" And Command1(7).Caption <> "" And Command1(8).Caption <> "" And Command1(9).Caption <> "" Then
MsgBox "Match Nul" -
Contributeurnon, pas exactement.. mais ton resonnement est bon...
Le hic je pense que tu n a pas compris l'indexage...
index dans command(index) correspond au bouton que le joueur à cliquer.. et non tous les boutons -
Okok et j'ai encore un ptit soucis niveau code :p
Le match nul je pensais faire un truc comme sa :
If Command1(Index).Caption <> "" And Command1(Index).Value = True Then MsgBox "Match Nul"
Genre si toutes les cases sont cochées et que leurs caption est forcément différent de "" alors mettre une msgbox je ne sais pas si c'est possible -
Contributeurca veut dire qu il quitte la sub en cours.. comme s'il allait directyement au en sub de la fin du command_click
-
Lol ouais j'ai bien compris ^^ mais exit sub sa veut dire que sa annule la commande c'est sa ?
-
Contributeurben si y a deja un "X" ou "O".. l'utilisateur joue sur une case deja utilisée.. donc ne joue pas.. d où le exit sub
-
Ok merci j'ai compris encore quelques questions :p dsl
If Command1(Index).Caption <> "" Then Exit Sub
La je vois pas trop
si la caption des bouttons est différent de rien donc qu'il y a deja x ou o alors
exit sub ? -
ContributeurDim sert à déclarer une variable
Form_Load avec CarEnCours ="X"
=> Form load est une des premiere instruction appelé au démarage du programme. litéralement au chargement de la feuille
If Command1(Index).Caption <> ""
<> veut dire différent en vb -
Alors attend que je comprenne bien ce que je fais
Dim CarEnCours
Dim sa veut dire quoi concrètement on demande quoi au programme sa cré une variable c'est sa ?
on l initialise dans Form_Load avec CarEnCours ="X"
La sa va faire quoi au juste ?
Form c'est la fenetre ?
If Command1(Index).Caption <> ""
<> c'est quoi ? ni plus grand ni plus petit que " " ?
Dsl c'est juste pour bien tout maitriser sur sa et pouvoir le réutiliser quand j'en aurais besoin sur d'autre trucs par exemple :) -
Contributeurbon.. maintenant on va s'attaquer à ton X ou O...
1) on n'utilise plus ta coche.. si "X" vient de jouer, ca sera forcement le tour de "O" et inversement... jusque là tu me suis..
donc on cré une variable générale CarEnCours :
dans général déclaration (c'est a dire en premire ligne de code, avant toutes les sub :
Dim CarEnCours
on l initialise dans Form_Load avec CarEnCours ="X"
Pour que le bouton prenne la marque voulu on a dans command_click :
If BtJeu(Index).Caption <> "" Then Exit Sub 'ceci si il clique sur un bouton ayant dejà une marque
BtJeu(Index).Caption = CarEnCours 'pour mettre "X" ou "O"
et pour faire l inversion dans ton command1_click(Index as integer) à la fin, juste avant le end sub, ajoute ceci:
If CarEnCours = "X" Then CarEnCours = "O" Else CarEnCours = "X"
end sub
je le met à la fin, car c'est une fois que lon aura verifier si le joueur à gané qu'il faut changer de signe.. -
Ce qui nous donne ^^
Private Sub Command1_Click(Index As Integer)
If Check1.Value = 1 Then Command1(Index).Caption = "X"
If Check2.Value = 1 Then Command1(Index).Caption = "O"
If Command1(1).Caption = "X" And Command1(2).Caption = "X" And Command1(3).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(4).Caption = "X" And Command1(5).Caption = "X" And Command1(6).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(7).Caption = "X" And Command1(8).Caption = "X" And Command1(9).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(1).Caption = "X" And Command1(4).Caption = "X" And Command1(7).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(2).Caption = "X" And Command1(5).Caption = "X" And Command1(8).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(3).Caption = "X" And Command1(6).Caption = "X" And Command1(9).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(1).Caption = "X" And Command1(5).Caption = "X" And Command1(9).Caption = "X" Then
MsgBox "X Gagne"
End If
If Command1(1).Caption = "O" And Command1(2).Caption = "O" And Command1(3).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(4).Caption = "O" And Command1(5).Caption = "O" And Command1(6).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(7).Caption = "O" And Command1(8).Caption = "O" And Command1(9).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(1).Caption = "O" And Command1(4).Caption = "O" And Command1(7).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(2).Caption = "O" And Command1(5).Caption = "O" And Command1(8).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(3).Caption = "O" And Command1(6).Caption = "O" And Command1(9).Caption = "O" Then
MsgBox "O Gagne"
End If
If Command1(1).Caption = "O" And Command1(5).Caption = "O" And Command1(9).Caption = "O" Then
MsgBox "O Gagne"
End If
End Sub
- 1
- 2
- 3