ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009
-
29 nov. 2008 à 11:21
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009
-
30 nov. 2008 à 22:03
Bonjour,
Est ce que quelqu'un peut m'expliquer car je galère. J'ai 12 commandbuttons sur un userform, le joueur1 a les commandbuttons de 1 à 6. Mon but c'est de dire à l'ordinateur de jouer après le joueur1 et donc de déclencher un des 12 commandbuttons et qu'en suite le joueur1 puisse jouer et ainsi de suite. Et j'y arrive pas ça fait quelque temps...
voici mon code :
Sub Ordinateur()
Randomize
Dim i As Integer
joueur2 = "ordinateur"
If Nombredejoueurs = "1" Then
i = 1
i = Int((12 * Rnd) + 7)
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 30 nov. 2008 à 21:55
Bonjour,
Il faut que tu généralise les gestionnaires d'evenements afin que tous las events mènent sur une seule et même fonction/procédure, cela te permettra de simplifier les modifications (et réduire ton code), simplifiera le débugage.
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009 29 nov. 2008 à 14:27
Voici mon problème. Voilà un exemple du code du commandbutton1 (cbt) pour essayer d'être plus clair . Ce sont les mêmes jusqu'au 12 à part "tour.caption" qui est de 1 à partir du cbt7 :
Private Sub TextBox1_Change()
b = ActiveWorkbook.Path
a = b & "" & TextBox12.Value & ".jpg "
CommandButton12.Picture = LoadPicture(a)
End Sub
Private Sub CommandButton1_Click()
tour.Caption = "2" 'me permet de bloquer les 6 derniers cbt
tourdujoueur 'pour dire que si c'est joueur2 ça bloque les 6 1er cbt
tourdujoueur2 'pour dire que si c'est joueur1 ça bloque les 6 dernier cbt
'Ordinateur le but serait qu'une fois que le joueur a cliqué l'ordinateur joue un des 6 derniers cbt aléatoirement
Dim i As Integer
For i = 1 To 30
traitons i
Next
End Sub
Private Sub traitons(num As Integer)
If TextBox1.Value = num Then
TextBox1.Value = 0
For i = 2 To num + 1
n = i
If i > 12 Then n = i - 12
Me.Controls("TextBox" & n).Value = Me.Controls("TextBox" & n).Value + 1
Next
End If
End Sub
Mon but c'set que dès que le joueur1 à jouer l'ordinateur doit jouer tout seul et redonner la main au joueur1, et ça je sais pas faire. Je sais pas si c'est trés clair.
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 29 nov. 2008 à 15:08
Bonjour,
Escuse, mais je vois un peu mieux, mais je ne comprends pas ta logique. Peux-tu mettre une plus grosse partie de ton code ? (comme tourdujoueur et tourdujoueur2)
Autre question/confirmation :
Joueur1 : cbt 1-6
Joueur2 : cbt 7-12
Ordinateur : cbt 1-6 et 7-12 selon le joueur en cours
tour.Caption = "2" c'est le numéro de joueur actif
tour est un contrôle d'une UserForm
Et ton prog fonctionne à partir d'une UserForm
a quoi sert 'traitons', et pourquoi de 1 à 30 ?
En l'attente de confirmation/correction, j'en reste là.
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009 29 nov. 2008 à 19:09
Le programme fonctionne à partir d'un userform. Voilà le code pour tourdujoueur1 et 2 + les paramètres dues joueurs. Traitons me permet de mettre à 0 mon userform (qui est une image) et d'incrémenter de un les commandbutton suivants du nombre du commandbutton mis à 0.
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 29 nov. 2008 à 23:44
Bonjour,
Avec ces précisions, je vois déjà mieux (pas tout encore, car je n'ai pas le visuel final, mais ce n'est pas encore trop grave).
Pour l'ordinateur :
private sub Ordinateur()
dim lActPlayer as long 'Il aurais mieux valu que tu utilises une valeur numérique pour Tour.Caption, mais ce n'est pas grave
lActPlayer=(cint(tour.Caption)-1)*6+1
lActPlayer=int(rnd*6)+lActPlayer
select case lActPlayer
case 1
CommandButton1_Click()
case 2
CommandButton2_Click()
...
Case 12
CommandButton12_Click()
End Select
End Sub
En direct, je pense que ça ne doit pas être trop mauvais.
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009 30 nov. 2008 à 00:07
merci de ta réponse mais je ne comprends pas trop cette partie.
case 1
CommandButton1_Click()
case 2
CommandButton2_Click()
...
Case 12
CommandButton12_Click()
End Select
En plus il me mets tous les commandbutton en rouge. J'ai inséré le code dans un modèle et ensuite je dois rajouté le paramètre "ordinateur" dans les 6 premièrs commandbutton ou dans userform_initialyse
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009 30 nov. 2008 à 12:04
case 1
CommandButton1_Click() 'il me met : erreur de compilatin, Attendu : =
case 2
CommandButton2_Click() 'il me met : erreur de compilatin, Attendu : =
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 30 nov. 2008 à 12:28
Bonjour,
Je me suis basé sur ton message du "samedi 29 novembre 2008 à 14:27:27" et celui "samedi 29 novembre 2008 à 19:09:19", Ce sont les gestionnaire d'evenement des boutons quand tu clique dessus.
Peux-tu poser ta question plus clairement, car j'ai pas compris pourquoi les CmdBtn passent en rouge.
Nota, je suis sur le chat aujourd'hui, si tu veux une discussion plus rapide.
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 30 nov. 2008 à 18:24
Bonjour,
J'ai eu pas mal de pb.
Déjà,
Private Sub Ordinateur()
Jeu.Joueurs.Caption = "1"
joueur2 = "Ordinateur"
Dim lActPlayer As Long
lActPlayer = (CInt(tour.Caption) - 1) * 6 + 1
lActPlayer = Int(Rnd * 6) + lActPlayer
Select Case lActPlayer
Case 1
CommandButton1_Click
Case 2
CommandButton2_Click
Case 3
CommandButton3_Click
Case 4
CommandButton4_Click
Case 5
CommandButton5_Click
Case 6
CommandButton6_Click
Case 7
CommandButton7_Click
Case 8
CommandButton8_Click
Case 9
CommandButton9_Click
Case 10
CommandButton10_Click
Case 11
CommandButton11_Click
Case 12
CommandButton12_Click
End Select
End Sub
J'ai retiré les () en trop
Ensuite, mets systématiquement "Option Explicit" en première ligne de ton code(dans chaque fichier de code), cela t'oblige à déclarer les variables, et donc évite certaines erreurs.
ouistit64
Messages postés22Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention24 juin 2009 30 nov. 2008 à 20:13
merci j'ai mis l'option explicit, j'ai donc du redéfinir les variables.
Pour l'ordinateur j'arrive pas à le faire fonctionner comment il sait que c'est à lui de jouer ? J'ai beau mettre ordinateur dans le commandbutton1 puisque c'est à lui de jouer après mais ça fonctionne pas. Je pars du principe que l'ordinateur c'est toujours le joueur2. Merci pour tes réponses et de ton temps qui me sont bien utiles.