Algo du jeu mastermind
rafale69300
Messages postés
93
Statut
Membre
-
rafale69300 Messages postés 93 Statut Membre -
rafale69300 Messages postés 93 Statut Membre -
Bonjour, je dois faire l'algo du jeu du mastermind mais je bloque sur une des procédures du programme
Enoncé :
L'ordinateur choisit 5 nombres au hasard entre 1 et 8. Il est possible qu'il choisisse plusieurs fois le même nombre. Le joueur a droit a 10 tentatives. A chaque tentative, l'ordinateur lui indique le nombre de chiffre exact proposés à la bonne place, et le nombre de chiffre exacts mais proposés à la mauvaise place.
Des remarques :
Un chiffre compté à sa place ne doit pouvoir compter comme "Exact mais mal placé"
Lorsqu'un tirage comporte plusieurs chiffres identiques, il ne faut qu'un même chiffre de la proposition du joueur puisse compter plusieurs fois comme exact.
Lorsqu'une proposition comporte plusieurs chiffres identiques, il ne faut pas les considérer tous comme correspondant à un même chiffre du tirage.
Procédures du prog :
Procédure Tirage (E/S : Tordi[1...5] : tableau d'entiers)
Cette procédure effectue le tirage aléatoire des 5 nombres, compris entre 1 et 8 et les stockee dans le tableau Tordi.
Procédure Saisie_Proposition (E/S : Tpropo[1...5] : tableau d'entiers
Cette procédure gère la sasie de le proposition du joueur. Cette proposition est stockée dans le tableau Tpropo. La saisie du joueur doit etre validée : il ne doit pas pouvoir proposer un nombre inférieur à 1 ni un nombre supérieur à 8.
Procédure Analyse (E : Tordi[1...5] : tableau d'entiers, E : Tpropo [1...5] : tableau d'entiers, E/S : nbbp : entier, E/S : nbmp : entier)
Cette procédure compare la proposition du joeur à celle de l'ordinateur et calcule le nombre de chiffrs exacts proposés à la bonne place (nbbp) et le nombre de chiffres exacts proposés à la mauvaise place (nbmp).
Donc mon souci ce trouve sur la procédure analyse car je l'ai faite mais je me suis fait enguelé par la prof car je les ai comparé un a un avec des SI alors que je devrais utilisés une boucle mais je ne vois pas du tout comme l'écrire avec une boucle donc si quelqu'un pouvait m'aider cela serait très sympa. Ne vous casez surtout pas la tête sur le programme prncipal et les autres procédures car les autres sont juste.
Merci d'avance.
Enoncé :
L'ordinateur choisit 5 nombres au hasard entre 1 et 8. Il est possible qu'il choisisse plusieurs fois le même nombre. Le joueur a droit a 10 tentatives. A chaque tentative, l'ordinateur lui indique le nombre de chiffre exact proposés à la bonne place, et le nombre de chiffre exacts mais proposés à la mauvaise place.
Des remarques :
Un chiffre compté à sa place ne doit pouvoir compter comme "Exact mais mal placé"
Lorsqu'un tirage comporte plusieurs chiffres identiques, il ne faut qu'un même chiffre de la proposition du joueur puisse compter plusieurs fois comme exact.
Lorsqu'une proposition comporte plusieurs chiffres identiques, il ne faut pas les considérer tous comme correspondant à un même chiffre du tirage.
Procédures du prog :
Procédure Tirage (E/S : Tordi[1...5] : tableau d'entiers)
Cette procédure effectue le tirage aléatoire des 5 nombres, compris entre 1 et 8 et les stockee dans le tableau Tordi.
Procédure Saisie_Proposition (E/S : Tpropo[1...5] : tableau d'entiers
Cette procédure gère la sasie de le proposition du joueur. Cette proposition est stockée dans le tableau Tpropo. La saisie du joueur doit etre validée : il ne doit pas pouvoir proposer un nombre inférieur à 1 ni un nombre supérieur à 8.
Procédure Analyse (E : Tordi[1...5] : tableau d'entiers, E : Tpropo [1...5] : tableau d'entiers, E/S : nbbp : entier, E/S : nbmp : entier)
Cette procédure compare la proposition du joeur à celle de l'ordinateur et calcule le nombre de chiffrs exacts proposés à la bonne place (nbbp) et le nombre de chiffres exacts proposés à la mauvaise place (nbmp).
Donc mon souci ce trouve sur la procédure analyse car je l'ai faite mais je me suis fait enguelé par la prof car je les ai comparé un a un avec des SI alors que je devrais utilisés une boucle mais je ne vois pas du tout comme l'écrire avec une boucle donc si quelqu'un pouvait m'aider cela serait très sympa. Ne vous casez surtout pas la tête sur le programme prncipal et les autres procédures car les autres sont juste.
Merci d'avance.
Configuration: Windows Vista Safari 525.19
7 réponses
-
Coucou Tout d’abord en plus de tes deux tableaux tordi et tpropo, je rajouterais un tableau tires de même taille initialisé à 0. Je m’explique, voilà l’idée. 1. Init : nbbp = 0, nbmp = 0, tires[1…5] = 0 tordi[1…5] = {o1,o2,….,o5) tpropo[1…5] = { p1,p2, ….,p5) 2. Contrôle des numéros en bonne position Pour num : 1 à 5 joueur (tpropo) faire Si tpropo(num) = tordi(num) alors nbbp = nbbp + 1 tires(num) = 1 fin si fin pour // A ce stade, on connaît le nombre de numeros bien placés et d’avoir mis 1 dans leur « case » réspective nous évite les doublons dans la suite du traitement 3. Contrôle des numéros mal positionnés //On va controler un par un les numeros du joueur par rapport à ceux de l’ordi non marqués dans la table tires numj = 1 faire pour numordi = 1 à 5 faire si tires(numordi) <> 1 alors//c.a.d non tirés si tpropo(numj) = tordi(numordi) alors //Ici on est sur d’avoir un nb mal placé nbmp = nbmp + 1 //Le numero ne doit plus être testé tires(numordi) = 1 //On sort alors du pour numordi vu que l’on a //trouvé un numero sorti pour fin si fin si fin pour numj = numj + 1 //numero suivant du joueur tant que numj <=5 //On fait tous les jetons Voilà le principe, j’espère avoir été assez clair car je l’ai codé en vb, mais pour le mettre en français, bonjour la galère ! Tout de suite, je pars pour un match de tennis de table à l’autre bout du département, mais n’hésite pas à me dire ce que tu en penses, je regarderais en rentrant vers 2, 3 heures du mat. A bientôt. -
Merci pour ton aide mikebzh oui tu as été très clair.
Bonne chance pour ta compétition de tennis de table, moi c demain mais je joue en petit niveau Départementale 2 du Rhone a Caluire. Bon week end -
Je voudrais juste un petit renseignement après avoir relu une autre fois ta solution je narrive pas bien a comprendre a quoi te sert ta variable numj si tu pouvais m'expliquer juste ça. Merci d'avance.
-
Re-bonjour
En fait numj correspond au numéro du joueur que l'on est en train de traiter, si on avait des boules, on peut dire que numj correspond à la boule 1, puis 2, etc...
L'idée est là, je prends mon premier numéro, est-il dans mon premier test, c'est à dire bien placé, non, alors je regarde les boules de l'ordi une par une, je trouve une correspondance, bingo, elle est mal placée, on sort et on prend le deuxième numéro, etc...
Bonne nuit -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour
Je devais être fatigué hier car dans ma soluce il y a un bug (cas où jeton bien placé + identique mal placé non géré, enfin bref..)
Voilà le morceau de source en vb (on peut presque le considérer come un algo, vu que j'ai mis des commentaires,
tu verras que j'ai rajouté un tableau jj pour connaitre les jetons du joueur dejà traités.
[code]
.......declarations variables, init tpropo & tordi..........For i = 0 To 4 jj(i) = 0 jo(i) = 0 Next i nbbp = 0 nbmp = 0 'on regarde si jeton bien place For numj = 1 To 5 If tpropo(numj - 1) = tordi(numj - 1) Then nbbp = nbbp + 1 jj(numj - 1) = 1 'on le(s) considére(nt) traité(s) dans tableau joueur et ordi jj & jo jo(numj - 1) = 1 End If Next numj 'on regarde si mal place numj = 1 Do If jj(numj - 1) <> 1 Then 'le jeton n'est pas traité For numo = 1 To 5 If jj(numo - 1) <> 1 Then 'ce jeton de l'ordi n'est pas traité If tpropo(numj - 1) = tordi(numo - 1) Then nbmp = nbmp + 1 jj(numj - 1) = 1 'mal placé trouvé on le considère traité jo(numo - 1) = 1 'ce jeton de l'ordi sert donc a quelqu'un --> traité Exit For End If End If Next numo End If 'jeton suivant numj = numj + 1 Loop While (numj <= 5)
..........recup nbbp & nbmp.........
[\code]
Normalement ça roule et on doit pouvoir intégrer la gestion bien placé et mal placé en même temps.
Je regarde ça.
A plus. -
Merci bien pour ton aide, oui c'est vrai qu'avec ton nouveau tableau cela me semble plus correcte.
Bonne journée moi je vais en cours !!! -