LE JEU MASTERMIND

guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006 - 23 févr. 2006 à 09:21
djfeeler Messages postés 18 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 2 juin 2006 - 10 mars 2006 à 10:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36199-le-jeu-mastermind

djfeeler Messages postés 18 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 2 juin 2006
10 mars 2006 à 10:23
ok merci je vais corriger cela !!!
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
9 mars 2006 à 21:52
J'ai eut le même soucie sur un mastermind que j'avais fait (dispo sur vbfrance.com), c'est un problème qu'on retrouve regulièrement sur la conception de ce jeu.
m4nn1x Messages postés 2 Date d'inscription dimanche 11 janvier 2004 Statut Membre Dernière intervention 9 mars 2006
9 mars 2006 à 19:00
Salut, j'ai constaté une erreur dans ton programme en ce qui concerne les indices sur les pions bien placés et mal placés. En effet, si la combinaison à trouver contient 1 pion rouge (par exemple) et que la proposition du joueur contient 3 pions rouges dont 1 bien placé, ton programme dira: 1 bien placé et 2 mal placés. c'est faux, il n'y a qu'un bien placé et 0 mal placé. Tu dois compter les indices selon la combinaison à trouver et non selon la proposition du joueur. En clair, la somme des indices (bien ou mal placés) doit être égale à la somme des pions proposés effectivement contenus dans la combinaison à trouver.

J'espère que mon conseil te sera utile.
Bonne continuation.
f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
25 févr. 2006 à 02:53
a la prochaine mises a jours, pour faire ton zip supprime ces fichiers de l'archive :

mastermind/Aide.~dfm
mastermind/Aide.~pas
mastermind/Aide.dcu
mastermind/apropos.~dfm
mastermind/apropos.~pas
mastermind/apropos.dcu
mastermind/intmaster.~ddp
mastermind/intmaster.~dfm
mastermind/intmaster.~pas
mastermind/intmaster.dcu
mastermind/intmaster.ddp
mastermind/mastermind.~dpr
mastermind/mastermind.cfg
mastermind/mastermind.dof
mastermind/mastermind.exe



pour le code j'ai vus une autre optimisation possible et j'en profite pour faire un precieux rappel :

- Pour les portions de codes repetée a plusieurs endroit dans le programme, la transformation en fonction ou procedure unique de cette derniere est a penser!

je dis cela notement pour la selection d'une nouvelle combinaison secrete cela supprimerais plusieurs lignes de code inutile.


et j'en profite aussi pour rappeler ceci :

- Peu importe que votre programme soit utile ou non, soit complexe ou non, ce que l'on regarde surtout c'est son code : syntaxe, discipline d'indentation, optimisation multi-niveau, commentaires.
Si une partie de code vous semble louche, inadaptée ou lourde c'est qu'elle l'est surrement et qu'une meilleure solution doit exister.
djfeeler Messages postés 18 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 2 juin 2006
23 févr. 2006 à 20:56
merci pour cet allègement de code !!!
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 16:38
ouah fOxy,comme toujours très efficace, grosse optimisation et allegement de code, bravo!
f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
23 févr. 2006 à 16:29
aie ...

alors deja, virer toutes les shapes crée en dur.

utiliser une matrice deja existante pour les créer dynamiquement:

Plateau = array[1..10,1..5] of TShape;

procedure CreatePlateau;
var x, y : integer;
begin
for x := 1 to 10 do
for y := 1 to 5 do begin
Plateau[x,y] := TShape.Create;
Plateau[x,y].parent:= Form1;
Plateau[x,y].shape := stCircle;
Plateau[x,y].width := 20;
Plateau[x,y].height:= 20;
Plateau[x,y].left := 23 + (30*y);
Plateau[x,y].right := 34 + (30*x);
end;
end;

par exemple, cela allegeras beaucoup le code et le programme.

ensuite pour ce genre de truc :

procedure Tform1.BtrougeClick(Sender: TObject);
begin
if (compteur >=1) and (compteur<=5)
then
begin
proposition_joueur[compteur].Brush.color := clred;
compteur:=compteur+1;
end;
end;

fait plutot (declarer l'unité math dans les uses) :

procedure Tform1.BtrougeClick(Sender: TObject);
begin
if inrange(compteur,1,5) then begin
proposition_joueur[compteur].Brush.color := clred;
inc(compteur);
end;
end;


pour ça :

if nb = 1 then
begin
Bp1.Caption := inttostr(bienplace);
Mp1.Caption := inttostr(malplace);
end;
if nb = 2 then
begin
Bp2.Caption := inttostr(bienplace);
Mp2.Caption := inttostr(malplace);
end;
if nb = 3 then
begin
Bp3.Caption := inttostr(bienplace);
Mp3.Caption := inttostr(malplace);
end;
if nb = 4 then
begin
Bp4.Caption := inttostr(bienplace);
Mp4.Caption := inttostr(malplace);
end;
if nb = 5 then
begin
Bp5.Caption := inttostr(bienplace);
Mp5.Caption := inttostr(malplace);
end;
if nb = 6 then
begin
Bp6.Caption := inttostr(bienplace);
Mp6.Caption := inttostr(malplace);
end;
if nb = 7 then
begin
Bp7.Caption := inttostr(bienplace);
Mp7.Caption := inttostr(malplace);
end;
if nb = 8 then
begin
Bp8.Caption := inttostr(bienplace);
Mp8.Caption := inttostr(malplace);
end;
if nb = 9 then
begin
Bp9.Caption := inttostr(bienplace);
Mp9.Caption := inttostr(malplace);
end;
if nb = 10 then
begin
Bp10.Caption := inttostr(bienplace);
Mp10.Caption := inttostr(malplace);
end;

fait plutot :

function Resultat(var lb1,lb2 : TLabel);
begin
lb1.caption := inttostr(bienplace);
lb2.caption := inttostr(malplace);
end;
// ---- //
case nb of
1 : resultat(bp1,mp1);
2 : resultat(bp2,mp2);
3 : resultat(bp3,mp3);
4 : resultat(bp4,mp4);
5 : resultat(bp5,mp5);
6 : resultat(bp6,mp6);
7 : resultat(bp7,mp7);
8 : resultat(bp8,mp8);
9 : resultat(bp9,mp9);
10: resultat(bp10,mp10);
end;



pour ce genre de code :

Shape56.Visible := true ;
Shape57.Visible := true ;
Shape58.Visible := true;
shape59.Visible := true;
shape60.Visible := true;

grace a la matrice de tshape tu pourras pondre une fonction pratique :

procedure ShowShape(var matrice : TShapeMatrice; index : array of integer);
var x : integer;
begin
for x := 0 to high(index) do matrix[index[x]].visible := true;
end;

procedure HiddeShape(var matrice : TShapeMatrice; index : array of integer);
var x : integer;
begin
for x := 0 to high(index) do matrix[index[x]].visible := false;
end;

utilisation :

ShowShape(plateau,[56,57,58,59,60]);
HiddeShape(plateau,[56,57,58,59,60]);


pour la mise en place de la sequence secrete : voir le bug randomrange dans les codes sources et faire :

{randomize doit etre declarer une seule fois dans le FormCreate}
const ColorTable array[1..5] of TColor (clyellow,clblue,clred,clblack,clgreen);
// --- //
for i := 1 to 5 do begin
nbhasar := round(randomrange(100,599)/100); // augmente les variations de couleurs
proposition_ordi[i].Brush.Color := ColorTable[nbHasar];
tableau_couleur[i] := ColorTable[nbHasar];
end;




voila, bonne optimisation...
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
23 févr. 2006 à 13:24
Entre compiler un exe, et double cliquer dessus ... effectivement, lol

Pour compiler faut faire "Projets" > "Compiler [Nom Projet]"
Pour les options du projet et de la compilation c'est "Projets" > "Options"

Trivial non ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2006 à 11:35
ah oui, le double clic sur exe, ça c'est surement très édifiant...
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 11:35
Apprendre a fair un exe n'est pas apprendre le delphi! il n'y a aucune relation avec du code. peut on clore ce sujet?
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
23 févr. 2006 à 11:32
rien a voir, je demande comment executer tu dis bien "de permettre a tous de pouvoir apprendre" et bien moi je voulais simplement apprendre a executer le delphi...
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 11:28
non,tu demandais un exe, ce qui est different. ici,on echange des codes delphi afin de faire partager ses connaissances et de permettre a tous de pouvoir apprendre et développer. Si tu veux des exe, va sur un site adéquat
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2006 à 11:27
Mais non, tu demandes exe en précisant que tu ne connais rien au delphi.
Pose des questions sur le code et tout ira bien.
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
23 févr. 2006 à 11:23
tu dis bien lieu d'entre-aide alors pourquoi supprimer mes postes? s'était un peut d'aide que je demandais... tsssssss vrément
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2006 à 11:09
Non delphiste passer son chemin, CS n'est pas freeware.com mais un lieu d'entre-aide pour développeurs.
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 10:04
Et Les caption des boutons qui s'appellent "quittez, jouez",c'est pas terrible de les faire finir par un "z",non?
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 09:43
De plus,dans ton a propos, qu'est ce que fait un copyright?
Ensuite, presque aucun composant n'est nommé,ce qui ne facilite pas la lecture,bien que tu ais commenté! Pour finir, ben ca fonctionne, je continue a décortiqué tout ca !!
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 09:23
De plus:
Tous les fichiers qui ont une extension qui commence par le caractère "~"
sont a supprimer ce sont des copies de sauvegardes que Delphi fait automatiquement.
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
23 févr. 2006 à 09:21
Salut, corrige ton zip:
seul les deux fichiers *.Pas les deux *.Dfm le *.Dpr sont nécessaire le reste tu peux le retirer vas voir dans les tuto comment faire une zip pour Codes Sources par f0xi. De plus, l'.exe n'est pas obligatoire!
@+
guillaume
Rejoignez-nous