JEU MASTERMIND

Messages postés
756
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
- - Dernière réponse : lapucedu88
Messages postés
98
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

Afficher la suite 
cs_Kenavo
Messages postés
756
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
-
"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
JulioDelphi
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
11 -
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 ®
lapucedu88
Messages postés
98
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1 -
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
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
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 ...
cs_Kenavo
Messages postés
756
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
-
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).