Accueil > Forum > > > > Problème sur un Mastermind
Problème sur un Mastermind
samedi 20 mai 2006 à 12:33:30 |
Problème sur un Mastermind

louloute26
|
Salut ! Je suis débutante en VB, j'apprends ça en cours, et j'ai fait un Mastermind comme projet noté. Seule ombre au tableau : ça ne marche pas ! Ca fait bien 2 semaines que je passe des heures à m'arracher les cheveux dessus, mais je ne trouve pas la faille. J'ai demandé des conseils à ma prof et elle n'a trouvé aucune erreur de code, normalement ça devrait fonctionner. Elle m'a alors conseillé de faire appel à des forums de spécialistes, d'où ma requête. Voilà mon code : Dim rejouer AsIntegerDim quitter AsInteger Dim deviné AsBoolean Dim nbbon, nbplace AsInteger Dim i, j, c, k AsInteger Dim mystere(4) AsInteger Dim prop(39, 4) AsInteger Dim stockprop(4) AsInteger Dim stockmyst(4) AsInteger rejouer = 6 quitter = 6 MsgBox("Règles du jeu Mastermind : le but est de déchiffrer la combinaison mystère à 5 chiffres compris entre 0 et 4. Pour cela vous ferez des propositions qui seront analysées : pour chaque proposition vous aurez le nombre de chiffres bien placés et le nombre de chiffres mal placés. A partir de là, à vous de déchiffrer la combinaison en un nombre d'essais minimum. Bonne chance !", , "Règles du jeu") DoWhile rejouer = 6 ' --- Initialisation des variables --- deviné = False nbbon = 0 nbplace = 0 i = 0 j = 0 c = 0 k = 0 For i = 0 To 4 mystere(i) = 8 Next For i = 0 To 4 For j = 0 To 4 prop(i, j) = 8 Next Next For i = 0 To 4 stockmyst(i) = 8 Next For i = 0 To 4 stockprop(i) = 8 Next ' --- Combinaison mystère --- For i = 0 To 4 Randomize() mystere(i) = Int(Rnd() * 5) Next MsgBox(mystere(0)) MsgBox(mystere(1)) MsgBox(mystere(2)) MsgBox(mystere(3)) MsgBox(mystere(4)) '--- Lancement du jeu ---DoWhile deviné = Falsenbbon = 0 nbplace = 0 ' --- Copie du tableu mystere (pour manipuler) ---For i = 0 To 4stockmyst(i) = mystere(i) Next' --- Remplir le tableau prop ---For i = 0 To 4prop(c, i) = InputBox( "Proposition pour la case " & i + 1 & " de la combinaison", "Proposition de combinaison")Next' --- Copie du tableau prop (pour manipuler) ---For i = 0 To 4stockprop(i) = prop(c, i) Next' --- Comparer la combinaison mystere et la proposition ---For i = 0 To 4If stockprop(i) = stockmyst(i) Thennbbon = nbbon + 1 stockprop(i) = stockmyst(i) = 8 Else : For j = 0 To 4If stockprop(i) <> 8 ThenIf stockprop(i) = stockmyst(j) ThenIf stockmyst(j) <> stockprop(j) Thennbplace = nbplace + 1 stockprop(i) = stockmyst(j) = 8 EndIfEndIfEndIfNextEndIfNext' --- Résultats ---If nbbon < 5 ThenMsgBox( "Vous avez " & nbbon & " chiffre(s) bien placé(s) et " & nbplace & " chiffre(s) mal placé(s). Courage !", , "Résultats")' ---Affichage des propositions ---For k = 0 To cMsgBox( "Proposition " & k + 1 & " : " & prop(k, 0) & prop(k, 1) & prop(k, 2) & prop(k, 3) & prop(k, 4), , "Combinaisons proposées")Nextc = c + 1 If c > 6 Thenquitter = MsgBox( "Vos neurones sont à bout ? Marre de chercher ? Allez, soyez courageux ! Sinon, cliquez sur Non, mais honte à vous !!", MsgBoxStyle.YesNo, "Continuer ?")If quitter <> 6 ThenMsgBox( "Pfff... Abandon... Un peu de persévérance ! Pour info, la combinaison était : " & mystere(0) & mystere(1) & mystere(2) & mystere(3) & mystere(4) & ".", , "Solution")ExitSubEndIfEndIfElsedeviné = TrueMsgBox( "Bravo ! Vous avez réussi à déchiffrer la combinaison en " & c + 1 & " essais.", , "Gagné !!")rejouer = MsgBox( "Souhaitez-vous refaire une partie ?", MsgBoxStyle.YesNo, "Rejouer ?")EndIfLoopLoop
Pour la petite explication, en fait le tableau mystere stocke les 5 chiffres (de 0 à 4) de la combinaison, définis aléatoirement. Le tableau prop est rempli par l'utilisateur, ce sont ses propositions. La variable nbbon représente le nombre de chiffres bien placés (de la proposition) et nbplace le nombre de chiffres mal placés. Et pour comparer les 2 combinaisons (mystere et prop), je stocke le contenu de chacun des 2 tableaux dans un autre tableau : stockmyst et stockprop, sur lesquels on va pouvoir faire des manipulations, puisque ce sont des copies. Si les chiffres comparés sont les mêmes, pas de problème, on incrémente nbbon de 1 et on efface le contenu des 2 cases en question. Quand je dis effacer, ce n'est pas vraiment effacer, je le mets à 8 en fait, c'est-à-dire une valeur bidon, autre que des chiffres de 0 à 4. En revanche, si les chiffres sont mal placés, ça se complique un peu. Dans ce cas, on compare le chiffre en question avec tous les chiffres de mystere, jusqu'à tomber sur le même chiffre (ou pas, si ce chiffre n'est pas du tout dans la combinaison mystere). Si on tombe sur le même chiffre, on incrémente nbplace de 1 puis on efface le contenu des 2 cases en question. Ca évite que si le même chiffre revient plusieurs fois dans la proposition, il soit compté 2 ou plusieurs fois comme nbplace alors qu'il n'y en a qu'1 dans la combinaison mystere. Voilà en gros l'explication de ma logique. Normalement, ça devrait marcher. Parfois c'est le cas, mais parfois ça ne marche pas. Et ni moi ni ma prof ne comprenons pourquoi... J'espère que quelqu'un ici pourra m'éclairer, je dois rendre mon projet dans moins d'une semaine, et pour ma satisfaction personnelle j'aimerais bien que mon Mastermind marche quand je le rendrai... Merci bien de vous pencher sur mon cas. Et bonne chance, bon courage !
|
|
dimanche 21 mai 2006 à 00:21:24 |
Re : Problème sur un Mastermind

Dowin
|
Salut, j'ai essayer de résoudre ton probleme, voici mon code basé sur le tien :
Dim Mystere(4, 1) As Integer
Dim Test(4) As Integer
Dim Proposition(5, 4) As Integer
Dim NbreBon, NbrePlace, NbreMauvais, NbreProposition As Integer
Dim i, j As Integer
Dim Quitter, Rejouer As Integer
Dim Trouve As Boolean
Quitter = 6
Rejouer = 6
Do While Rejouer = 6
Trouve = False
'Nombre mystère à trouver
For i = 0 To 4
Randomize()
Mystere(i, 0) = Int(Rnd() * 5)
Next
For i = 0 To 4
Test(i) = 0
Mystere(i, 1) = 0
Next
NbreBon = 0
NbrePlace = 0
NbreMauvais = 0
MsgBox(Mystere(0, 0) & Mystere(1, 0) & Mystere(2, 0) & Mystere(3, 0) & Mystere(4, 0))
Do While Trouve = False
'Entrée des propositions
For i = 0 To 4
Proposition(NbreProposition, i) = InputBox("Entrez votre proposition pour le chiffre : " & i + 1)
Next
'Test des propositions pour voir si elles sont bonnes et bien placées
For i = 0 To 4
If Proposition(NbreProposition, i) = Mystere(i, 0) Then
Test(i) = 1
Mystere(i, 1) = 1
End If
Next
'Test des propositions pour voir si elles sont mal placées ou mauvaises
For i = 0 To 4
For j = 0 To 4
If Test(i) = 0 And Mystere(j, 1) = 0 Then
If Proposition(NbreProposition, i) = Mystere(j, 0) Then
Test(i) = 2
Mystere(j, 1) = 2
End If
End If
Next
Next
'Comptage des propositions
For i = 0 To 4
Select Case Test(i)
Case 0
NbreMauvais += 1
Case 1
NbreBon += 1
Case 2
NbrePlace += 1
End Select
Next
'Boite de dialogue si les propositions sont bonnes
If NbreBon = 5 Then
Trouve = True
MsgBox("Bravo, vous avez trouvé !!!", MsgBoxStyle.Exclamation, "Gagné!!!")
Rejouer = MsgBox("Voulez-vous refaire une partie ?", MsgBoxStyle.YesNo, "Nouvelle partie ?")
If Rejouer <> 6 Then End
Else
'Résultats de propositions du joueur
MsgBox("Bons : " & NbreBon & " ; Mal placé : " & NbrePlace & " ; Mauvais : " & NbreMauvais)
'Quitter ou Rejouer
If NbreProposition <= 6 Then
Quitter = MsgBox("Voulez-vous continuer le jeu ?", MsgBoxStyle.YesNo)
If Quitter <> 6 Then
End
Else
For i = 0 To 4
NbreBon = 0
NbrePlace = 0
NbreMauvais = 0
Next
For j = 0 To NbreProposition
MsgBox("Proposition " & j + 1 & " : " & Proposition(j, 0) & Proposition(j, 1) & Proposition(j, 2) & Proposition(j, 3) & Proposition(j, 4))
Next
End If
Else
MsgBox("Le jeu est fini, la bonne combinaison était : " & Mystere(0, 0) & Mystere(1, 0) & Mystere(2, 0) & Mystere(3, 0) & Mystere(4, 0))
Rejouer = MsgBox("Voulez-vous refaire une partie ?", MsgBoxStyle.YesNo, "Nouvelle partie ?")
If Rejouer <> 6 Then End
End If
End If
'Incrémentation du nombre de propositions
NbreProposition += 1
Loop
Loop
Je pense que le plus simple serait quand même de faire une interface graphique avec une form, des textbox et des boutons, mais c'est toi qui vois . J'espère que ca t'aidera! DoWin
|
|
dimanche 21 mai 2006 à 00:28:39 |
Re : Problème sur un Mastermind

crenaud76
|
Réponse acceptée !
Si ta prof n'a trouvé aucune erreur de code dans ta source, ... tu pourras lui mettre une petite tarte de ma part, là !! , juste au dessus de la nuque !
En VB, Une ligne du type de "stockprop(i) = stockmyst(i) = 8", n'a pas le sens que tu crois !! J epense que tu veux à cet endroit mettre les item des deux tableaux à 8 ! Or, ce que tu demandes effectivement à VB, c'est de stocker dans stockprop(i), le résultat du test "stockmyst(i)=8 ?" !! comme stockmyst(i) est forcément différent de 8, ce test retourne False, donc traduit par un zéro en integer, zéro qui est stocké dans stockprop(i) !!! VB ne réagit pas comme le C à ce niveau !! En VB, tu dois faire ca en deux lignes ...
stockprop(i) = 8
stockmyst(i) = 8
ensuite, ton "If stockprop(i) <> 8 Then" jsute après le "For j = 0 to 4" est je pense inutile ! En effet, tu es dans un Else, alors que stockprop(i) ne peut être égal à 8 que si tu es passé dans la clause Then, tu ne peux donc pas avoir stockprop(i) égal à 8 à ce niveau. Et puis cette clause "Else", qui vérifie les mal placé si j'ai bien compris me parait un peut complexe ! En fait, pour une vérif complete de la combinaison, je ferais Un truc du genre ...
For i = 0 to 4
If Stockprop(i) = Sotckmyst(i) Then
Nbbon += 1
Else
For j = 0 to 4
If j <> i Then
If Stockprop(i) = Sotckmyst(j) Then NbPlace += 1
End If
Next j
End If
Next i
J'ai pas testé mais cela dois pas etre bien loin du but !
ET tu remettras une petite tarte à ta prof de ma part !!!
CR
Cela devrait nous suffire !
Et comme je ne touche pas au tableau, je ne suis pas certain que tu es besoin de passer par des tableau intermédiaire !
CR
|
|
dimanche 21 mai 2006 à 10:36:43 |
Re : Problème sur un Mastermind

louloute26
|
Merci bien DoWin et crenaud76 !! Je commençais à désespérer de voir mon Mastermind marcher un jour ! DoWin : Alors en fait, si je ne fais pas mon programme avec une interface (ce qui serait certainement plus simple pour ça, effectivement), c'est parce que cette année à cause des grèves on a pas pu apprendre à s'en servir, et comme on est des sous-doués de l'informatique, on sait pas apprendre tout seuls. Donc la prof nous a demandé un truc simplement avec la commande. Quant à ton code, merci beaucoup de t'être penché dessus. Là je suis en pleine période de partiels, donc j'ai pas vraiment le temps de regarder ça en détail. Mais dès que je serai en vacances je regarderai, comment je peux améliorer le mien en m'inspirant du tien. crenaud76 : Déjà, je pense que si je mets une tarte à ma prof, ma note risque de descendre en flèche ! lol Et puis ça me ferait mal au coeur, c'est peut-etre pas une spécialiste de VB mais je l'aime bien elle est sympa. D'autre part, en fait hier je suis retournée voir mon copain Mastermind, et j'ai regardé d'ou venait le problème en suivant par étapes avec des points d'arrêt. Et en fait j'ai trouvé l'erreur, c'était bien cette histoire de stock1 = stock2 = 8. Mais merci de ton explication, j'avais pas compris pourquoi il le remettait à 0. Comme ça marchait pour l'initialisation de mettre 2 variables à 0 sur la même ligne, j'ai cru que ça marchait aussi comme ça. Mais en fait non, pour l'initialisation sur la même ligne on utilise une virgule, et c'est compris dans un Dim. Pour le "If stockprop(i) <> 8 Then" juste après le "For j = 0 to 4" : je crois qu'il est utile dans le cas ou on a changé la valeur de stockprop (à 8), mais ou la boucle de j n'est pas terminée : si on a trouvé un chiffre mal placé, on a mis sa valeur à 8 (déjà traité), mais la boucle continue, donc si on ne veut pas qu'il compare ce 8 à un chiffre effacé précédemment dans stockmyst, il faut le rajouter. A moins effectivement (j'y pense à l'instant) de rajouter un Exit Do ou quelque chose du genre après l'incrémentation de nbplace. En fait j'avais déjà essayé un truc sans tableaux intermédiaires, mais ça marchait pas non plus et ça m'a pris la tête alors j'avais essayé autrement. Mais oui c'est possible (même probable) que ça marche sans tous ces tableaux. Pour ta proposition, même réponse qu'à DoWin : je testerai une fois mes partiels finis, parce que là je suis un peu en galère (comme d'hab...). A tous les 2 : En tout cas merci beaucoup d'avoir apporté un peu de votre temps à mon problème. C'est sympa. Et puis tant qu'on y est ... vous avez l'air bien calés en VB ... je connais un pote de ma classe, sur ce forum aussi, qui a un problème avec son BlackJack. Si vous pouviez y jeter un oeil... Son pseudo c'est beyleixa, son code est là http://www.vbfrance.com/infomsgt_ALGORITHME_229.aspx. Merci pour lui ! Bonne journée !
|
|
Cette discussion est classée dans : chiffres, to, combinaison, prop, mystere
Répondre à ce message
Sujets en rapport avec ce message
Problème sur un Mastermind... aidez-moi svp !! [ par louloute26 ]
Salut !Je suis débutante en VB, j'apprends ça en cours, et j'ai fait un Mastermind comme projet noté.Seule ombre au tableau : ça ne marche pas ! Ca fa
Faire une combinaison de chiffres [ par odeesey ]
Bonjour je suis debutant en VB et je voudrai un code pour trouver toute les combinaison possible de chiffre.Sachant que ces chiffre seront introduit d
boucles imbriquées [ par oolivierr ]
Bonsoir,je débute en VisualBasic 6 et je souhaiterai avoir une précision sur un problème d'optimisation sur les boucles imbriquées.Je m'expliqueje sou
HELP! comment désactiver la combinaison clavier CTRL+ESC?? [ par asel ]
voilà, la qst est dans le titre, je voudrais savoir comment désactiver (et réactiver) cette combinaison de touches, car j'ai trouvé comment faire pour
un tri un peu spécial dans un tableau [ par snake57 ]
Bonjour a tousJe dois effectuer une sorte de tri dans un tableau en fait mon tableau ne peu contenir que 3 chiffres diffèrent par exemple 6,7,8. Si pl
Screensaver [ par jphermans ]
Hello everybody,Sorry for the english text but i can not write the french , i can only read it.What i want to ask is the following.I'm creating a scre
label1 to 10 ? [ par ravachol ]
bonjour,je voudrais renommer plein de label (ou autre)label1.caption label2.caption ....est il possible d'utiliser un boucle forfor i=1 to 10labeli.ca
Word ... Switch to .. Reply URGENT merci [ par Nightcourrier ]
bonjour a tous, J'utilise word .. tous va bien . Cependant des fois quand J'essais de réouvrir un fichi
Comment permuter des lignes d'une matrice ? [ par franchise ]
Je suis une débutante en VB et je dois faire une résolution de système d'équations de n variables sur VB. J'ai réussi le tout mais mon gros problème e
Appel d'une fonction [ par zapping ]
Je n'arrive pas à faire fonctionner la fonction ci dessousavec des appels de type B = InverseMatrice(A())avec A (1 to 2 ; 1 to 2) As Double et B idemm
Livres en rapport
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|