lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 4 févr. 2005 à 08:22
Ok, je te remercie japee, c'est bon à savoir
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 3 févr. 2005 à 18:31
La boucle parcourt tous les composants de l'application : Components[0], Components[1]... jusqu'à Components[nombre de components -1 puisqu'on a démarré à 0].
Si le composant est un TShape, alors si le nom du composant n'est pas 'SFont' (c'est le nom que tu as donné à ton TShape qui représente le fond, lol), alors le composant n'est plus visible.
Cette manière de procéder peut être utile si l'on a beaucoup de composants auxquels il faut appliquer un même traitement. On évite ainsi un listing impressionnant d'instructions répétitives.
Une astuce que j'utilise consiste à donner un tag identique à cette série de composants (propriété tag dans l'inspecteur d'objet) et à trier les composants au moyen de ce tag.
Exemple concret, si tu as affecté la valeur 1 au tag des TShape à rendre invisibles :
var i: Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TShape then
if TShape(Components[i]).Tag = 1 then
TShape(Components[i]).Visible := False;
end;
Ca peut être utile si tu veux que certains composants de même type soient concernés et pas d'autres, mais ici l'avantage n'est peut-être pas évident ?
Bonne prog'
lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 2 févr. 2005 à 08:35
Dit voir japee, je comprend pas trop ce que tu fais dans ta dernière procedure en fait je comprend pas le 'SFont' qui sert à la comparaison du nom du composant.
lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 1 févr. 2005 à 14:08
Merci japee, j'avais pensée à faire des modifiactions sur ce code en y ajoutant des procedures mais je n'est pas encore eu le temps de me remettre dessus car je suis en train de remodifier mon master et que j'essaie également de faire un casse brique.
Mais je promet de les faire rapidement tous de même.
Encore merci de l'avoir regarder.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 1 févr. 2005 à 02:29
Bien sûr, merci copier-coller, "var i: integer" est inutile dans l'avant dernière procedure décrite.
N'hésite pas à demander des explications complémentaires.
Et utilise le forum, c'est bien pratique ;)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 1 févr. 2005 à 02:21
Sympa, ton code, lapucedu88
Ca me rappelle mes débuts, y'a pas si longtemps (heu, 3 ans environ...)
Tu peux largement optimiser ton code, par exemple ici :
Procedure TForm1.categorieClick( Sender : TObject );
Var
lettre1 : Integer;
procedure TForm1.InitialisePendu;
var i: Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TShape then
if TShape(Components[i]).Name <> 'SFont' then
TShape(Components[i]).Visible := False;
end;
... que tu as déclaré, bien sûr, dans la partie private du Form, ainsi :
procedure InitialisePendu;
Comme tu as l'air de connaître Case of..end, je te t'épargnerai le discours sur l'économie par rapport à if..then...
Je n'ai pas débuggé ton programme, mais ça a l'air de fonctionner... mais là je passe la main, pas trop le temps...
Bienvenue parmis nous, et ne perd pas ton enthousiasme ;)
P-S: J'ai fait pas mal de copier-coller, j'espère que je ne dis pas trop de c...
à + faut pas mollir !
lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 28 janv. 2005 à 07:41
Va si, fait, irdjv, il est là pour ça.
lrdjv
Messages postés20Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 6 avril 2005 26 janv. 2005 à 09:03
Encore félicitation pour ce jeu. Des que j’ai 5 minute je vais analysé ton code il m’intéresse.
lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 26 janv. 2005 à 08:15
Contente qu'il te plaise mcapp, quand j'aurai un peu de temps je ferais une aide utilisateur de manière à ce que plus personne ne se trompe.
Merci de m'avoir prévenue.
cs_mcapp
Messages postés71Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention15 décembre 2011 25 janv. 2005 à 23:03
Je suis confus !
Le jeu fonctionne ! Je n'avais pas compris que le champ réclamait une lettre et non un chiffre (je pensais qu'il fallait y mentionner le nombre de lettres que le mot devait comporter !
Donc, excuses et félicitaion !
cs_mcapp
Messages postés71Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention15 décembre 2011 25 janv. 2005 à 22:55
Effectivement, j'ai téléchargé à l'instant le jeu.
(ce 25 à 22h50)
Il ne fonctionne pas.
On peut choisir la catégorie, le bouton "nouveau mot" réagit. Mais, ensuite, impossible d'inscrire quoi que ce soit dans le champ en-dessous et impossible de confirmer.
J'attends impatiemment la correction !
lapucedu88
Messages postés96Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention22 mai 20081 24 janv. 2005 à 11:43
Merci à vous deux pour les correction à effectuer.
J'ai rectifié mon code, de manière à ce qu'on ne gagne pas toujours.
mardi4fr
Messages postés2Date d'inscriptionmercredi 10 mars 2004StatutMembreDernière intervention27 juillet 2008 22 janv. 2005 à 10:36
manque peut etre un test , ou alors tu dois mettre une categorie par defaut , car si pas de catégorie selectionnée , on gagne toujours.
lrdjv
Messages postés20Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 6 avril 2005 21 janv. 2005 à 11:14
Pas mal fait mais une fois qu'on a perdu le dessin a droite ne disparait pas et on peu continue à joué sans faire nouveau mot.
4 févr. 2005 à 08:22
3 févr. 2005 à 18:31
Si le composant est un TShape, alors si le nom du composant n'est pas 'SFont' (c'est le nom que tu as donné à ton TShape qui représente le fond, lol), alors le composant n'est plus visible.
Cette manière de procéder peut être utile si l'on a beaucoup de composants auxquels il faut appliquer un même traitement. On évite ainsi un listing impressionnant d'instructions répétitives.
Une astuce que j'utilise consiste à donner un tag identique à cette série de composants (propriété tag dans l'inspecteur d'objet) et à trier les composants au moyen de ce tag.
Exemple concret, si tu as affecté la valeur 1 au tag des TShape à rendre invisibles :
var i: Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TShape then
if TShape(Components[i]).Tag = 1 then
TShape(Components[i]).Visible := False;
end;
Ca peut être utile si tu veux que certains composants de même type soient concernés et pas d'autres, mais ici l'avantage n'est peut-être pas évident ?
Bonne prog'
2 févr. 2005 à 08:35
1 févr. 2005 à 14:08
Mais je promet de les faire rapidement tous de même.
Encore merci de l'avoir regarder.
1 févr. 2005 à 02:29
N'hésite pas à demander des explications complémentaires.
Et utilise le forum, c'est bien pratique ;)
1 févr. 2005 à 02:21
Ca me rappelle mes débuts, y'a pas si longtemps (heu, 3 ans environ...)
Tu peux largement optimiser ton code, par exemple ici :
Procedure TForm1.categorieClick( Sender : TObject );
Var
lettre1 : Integer;
procedure GestionCategorie(Categorie: String; Liste: TListBox);
begin
nbmot := Liste.items.Count;
Lcat.visible := true;
Lcat.caption := Categorie;
aleas := random( Liste.items.Count );
motatrouver := Liste.items[ aleas ];
Lnbmotcat.caption := 'La catégorie contient ' + inttostr( nbmot ) + ' mots';
Liste.items.Delete( aleas );
end;
Begin
randomize;
Bbcat.enabled := true;
BBchange.enabled := true;
gagne := 0;
perd := 0;
Case categorie.itemindex of
0: GestionCategorie('animaux', animaux);
5: GestionCategorie('fruit', fruit);
6: GestionCategorie('batiment', batiment);
7: GestionCategorie('boisson', boisson);
2: GestionCategorie('fleur', fleur);
3: GestionCategorie('constellation', constellation);
1: GestionCategorie('dessin', dessin);
4: GestionCategorie('aliment', aliment);
end;
mot_choisi := motatrouver;
For lettre1 := 97 To 122 Do
deja_essaye[ lettre1 ] := false;
long_mot := length( mot_choisi );
mot_cache := '';
For j := 1 To long_mot Do
Begin
If mot_choisi[ j ] = ' ' Then
mot_cache := mot_cache + ' '
Else
mot_cache := mot_cache + '';
End;
result.visible := true;
result.text := mot_cache;
categorie.visible := false;
Bbcat.visible := true;
erreur := 0;
lettre.Enabled:=true;
lettre.SetFocus;
End;
...ou là :
Procedure TForm1.BBchangeClick( Sender : TObject );
Var
j, numero : Integer;
lettre1 : Integer;
procedure TraiteCategorie(Liste: TListBox);
begin
If Liste.items.Count = 0 Then
Begin
showmessage( 'plus de mot dans cette categorie.' );
BBchange.enabled := false;
Bbcat.enabled := false;
result.visible := false;
categorie.visible := true;
End
Else
Begin
categorie.visible := false;
aleas := random( Liste.items.Count );
motatrouver := Liste.items[ aleas ];
Liste.items.Delete( aleas );
result.visible := true;
End;
end;
Begin
Case categorie.ItemIndex of
0: TraiteCategorie(animaux);
1: TraiteCategorie(dessin);
6: TraiteCategorie(batiment);
7: TraiteCategorie(boisson);
5: TraiteCategorie(fruit);
2: TraiteCategorie(fleur);
3: TraiteCategorie(constellation);
4: TraiteCategorie(aliment);
end;
mot_choisi := motatrouver;
For lettre1 := 97 To 122
Do
deja_essaye[ lettre1 ] := false;
long_mot := length( mot_choisi );
mot_cache := '';
For j := 1 To long_mot
Do
Begin If mot_choisi[ j ] = ' '
Then
mot_cache := mot_cache + ' '
Else
mot_cache := mot_cache + '';
End;
result.text := mot_cache;
Bbcat.visible := true;
InitialisePendu; // <- procedure plus haut, remplace 10 lignes
erreur := 0;
lettre.Enabled:=true;
lettre.SetFocus;
End;
... sans compter que quand tu veux effacer le pendu tu peux faire appel à cette procedure :
procedure TForm1.InitialisePendu;
var i: Integer;
begin
Ssoclebas.visible := false;
Ssoclevertical.visible := false;
Ssoclehaut.visible := false;
Sfil.visible := false;
Stete.visible := false;
Scorps.visible := false;
Sbrasdroit.visible := false;
Sbrasgauche.visible := false;
Spieddroit.visible := false;
Spiedgauche.visible := false;
end;
... voire, pourquoi pas :
procedure TForm1.InitialisePendu;
var i: Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TShape then
if TShape(Components[i]).Name <> 'SFont' then
TShape(Components[i]).Visible := False;
end;
... que tu as déclaré, bien sûr, dans la partie private du Form, ainsi :
procedure InitialisePendu;
Comme tu as l'air de connaître Case of..end, je te t'épargnerai le discours sur l'économie par rapport à if..then...
Je n'ai pas débuggé ton programme, mais ça a l'air de fonctionner... mais là je passe la main, pas trop le temps...
Bienvenue parmis nous, et ne perd pas ton enthousiasme ;)
P-S: J'ai fait pas mal de copier-coller, j'espère que je ne dis pas trop de c...
à + faut pas mollir !
28 janv. 2005 à 07:41
26 janv. 2005 à 09:03
26 janv. 2005 à 08:15
Merci de m'avoir prévenue.
25 janv. 2005 à 23:03
Le jeu fonctionne ! Je n'avais pas compris que le champ réclamait une lettre et non un chiffre (je pensais qu'il fallait y mentionner le nombre de lettres que le mot devait comporter !
Donc, excuses et félicitaion !
25 janv. 2005 à 22:55
(ce 25 à 22h50)
Il ne fonctionne pas.
On peut choisir la catégorie, le bouton "nouveau mot" réagit. Mais, ensuite, impossible d'inscrire quoi que ce soit dans le champ en-dessous et impossible de confirmer.
J'attends impatiemment la correction !
24 janv. 2005 à 11:43
J'ai rectifié mon code, de manière à ce qu'on ne gagne pas toujours.
22 janv. 2005 à 10:36
21 janv. 2005 à 11:14