JEU MASTERMIND

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 26 janv. 2005 à 11:36
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 - 12 avril 2005 à 10:11
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/29087-jeu-mastermind

lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
12 avril 2005 à 10:11
c'est vrai barbichette, c'est une chose à laquelle je ne pense jamais.
Depuis le temps j'en ai fait un autre, mais je le met sur le réseaux car je l'ai pas fait toute seul.
Je changerais ce défault à l'occasion, pour l'instant je suis sur un autre projet.
Bisous à vous tous.
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013
11 avril 2005 à 11:59
Salut,
un peu en retard par rapport aux autres,

Il n'y a pas besoin de faire un FORMACTIVATE pour initialiser le tableau CouleurPossible.

Pour les déclarations en dehors des procedures et fonctions, il est possible d'attribuer directement les valeurs.

Ainsi pour la déclaration de CouleurPossible, écrire

CouleurPossible : Array[ 1..28 ] Of TColor=
(clred, clblack, clgreen, clblue, clteal, clgray,
cllime, clyellow, clfuchsia, claqua, clmaroon, clolive,
clnavy, clpurple, clsilver, clmoneygreen, clskyblue, clinfobk);

Et voilà, quelques lignes de gagnées et un code plus clair...
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
27 janv. 2005 à 15:45
Merci kenavo, mais je suis la pour ça, écouter les remarques que l'on me fait afin d'amèliorer ma façon de programmer.
D'ailleur je viens de laisser un message sur le forum afin de l'amèliorer encore un peu.
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
27 janv. 2005 à 14:28
Moi, ce que jaime, c'est quand remarques et conseils sont aussi vite et bien compris et mis en pratique !
Bravo !

Ken@vo
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
27 janv. 2005 à 12:06
Merci JulioDelphi. Il est vrai que je pense toujours à utiliser des procédures. De plus les tableaux que Kenavo m'a fait utiliser permette d'allèger le code.
Je vous remercie, car depuis que j'utilise ce site j'apprend beaucoup plus vite et cet apprentissage je le dois à vous tous.
Bisous
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
27 janv. 2005 à 11:16
ha bah ça c de l'optimisation ! tu te sens pas plus legere ? plus simple ala lecture le code tt de meme !
bien joué =)
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
27 janv. 2005 à 09:09
Sa y est j'ai essayer de vraiment optimiser mon code (peut être encore deux ou trois retouches),
J'ai créé des procedure dans certains cas et, kenavo, tes tableaux marche super bien, en plus il me simplifie mon code.
Merci à vous tous et si vous avez d'autre remarques à faire, je les attends avec impatiences
Bisous à vous tous.
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
26 janv. 2005 à 16:22
Ok, je te remercie Kenavo, je vais essayer de regarder ça pour demain.
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
26 janv. 2005 à 15:21
Salut la puce,

Déclarer un tableau de TShape n'est pas un gros problème, quoiqu'il y ait quelques règles à respecter.
Dans ton cas ça peut s'écrire comme suit :

dans les propriétés de la form (privées ou publiques selon l'usage extérieur qui peut en être fait) tu déclares :

TabCoups : Array[0..26,0..4] of TShape;

... et dans FormCreate :

procedure TForm1.FormCreate(Sender: TObject);
var
i, j : Integer;
begin
for i:= 0 to 26 do
for j:= 0 to 4 do
begin
TabCoups[i,j]:=TShape.Create(self);
With TabCoups[i,j] do
begin
Parent := Self; //faut pas oublier
Width := 25;
Height := 25;
Left := 8 + j*24;
Top := 640 - i*24;
Shape := stCircle;
Brush.Color := clWhite;
end;
end;
end;

... et après, pour changer la couleur : TabCoups[i,j].Brush.Color := NewColor;

----------------------------
Attention à Sender!

Sender qui est passé par paramètre à l'évènement identifie l'émetteur de l'évènement.
Par exemple, quand on clique sur un bouton, dans la procédure déclenchée par l'évènement, sender (TObjet) est le bouton (TButton).
Pour accéder aux propriétés propres au bouton (comme Caption) on dit que l'objet sur lequel on a cliqué est un bouton (Sender as TButton) et on regarde ou modifie une propriété.
Mais, si c'est pas un bouton, il y a problème ! Et dans ton cas, le "sender" n'est pas un TShape mais un TButton ("nouvelle partie"): il y a erreur ! On peut vérifier le type en faisant : If Sender is TShape (ou TButton).
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
26 janv. 2005 à 15:13
C' est primitif comme code. Le principal etant que ça marche. Maintenant, si tu as besoin dans 1 mois de changer le programme, ça va te donner un mal de crane pas possible. Quand on dis de simplifier, ça veut dire:
-faciliter la compréhension du code.
-eviter d' ecrire du code répétitif remplaçable par une fonction.

Sender est la parametre passé dans l' event OnClick.
En fait, Sender est l' object qui a provoqué le onClick.
Si tu as 4 TSpeedButtons et que tu attribues le meme event BoutonClick par exemple, en faisant click sur un des 4 TSpeedButtons, tu sauras lequel gràce à Sender genre:

If Sender = SpeedButton1 Then ...
else
If Sender = SpeedButton2 Then ...
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
26 janv. 2005 à 14:36
Ok, je savais qu'il était lourd, néanmoins je suis la pour apprendre et je demande que ça.
Dis moi Kenavo, je vois pas trop comment faire pour réaliser des tableaux de TShape.
Et si je veux utiliser (Senter as TShape).Brush.color:=clwhite dans l'événement OnClick de nouvelle partie sa met une erreur pourquoi
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
26 janv. 2005 à 12:56
lourd oui c'est peu dire, FireFox n'a meme pas voulu me montrer la totalité du .pas !! "PLANTAGE" lol

C'est assez repetitif le code, le ctrl+V a été abusé ! toutes tes procedures se ressemblent, je suis sur que c'est faisable en une seul. OPTIMISE !!

C'est assez repetitif le code, le ctrl+V a été abusé ! toutes tes procedures se ressemblent, je suis sur que c'est faisable en une seul. OPTIMISE !!

C'est assez repetitif le code, le ctrl+V a été abusé ! toutes tes procedures se ressemblent, je suis sur que c'est faisable en une seul. OPTIMISE !!

C'est assez repetitif le code, le ctrl+V a été abusé ! toutes tes procedures se ressemblent, je suis sur que c'est faisable en une seul. OPTIMISE !!

=)

ps : MasterMind is ®
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
26 janv. 2005 à 11:36
"Le code est un peu lourd."

Non, sans blagues !

18 fois la procédure TForm1.Couleur_MouseDown !!!
Il eut été plus élégant de n'en écrire qu'une qui s'occupât des 18 Tshapes concernés :

Procedure TForm1.CouleursMouseDown( Sender : TObject; Button : TMouseButton;
Shift : TShiftState; X, Y : Integer );
Begin
CouleurChoisi := (Sender as TShape).Brush.Color;
cour.Brush.Color := CouleurChoisi ;
End;

...et pareil pour Choix_MouseDown

Procedure TForm1.ChoixMouseDown( Sender : TObject; Button : TMouseButton;
Shift : TShiftState; X, Y : Integer );
Begin
(Sender as TShape).Brush.Color := CouleurChoisi;
End;

Et vu le paquet de TShape, un creation dynamique de deux tableaux de Tshape à deux dimensions (un pour la zone l'affichage [27x5] et un pous la zone de résultat [27x3]) aurait encore allégé le code. Juste un compteur de coups réalisés pour pointer la bonne ligne, une fonction pour afficher le coup, une fonction pour afficher le résultat.

Allez, au boulot !

Ken@vo
Rejoignez-nous