var
Form1: TForm1;
i,j :integer;
caractere : char; // sert a lire le caractere entre par le joueur
trouve : boolean; // vrai si le caractere entre par le joueur est dans le mot selectionne
fini : boolean = false; //vrai si le mot entier est trouve
mot : array [0..6] of char = ' '; // sert a enregistrer les lettres exactes
nombre_essais : integer = 6;
implementation
{$R *.dfm}
begin
randomize;
i:= random (2);
{Choisir un mot dans l'array mots}
{Form1.Mot_choisi.caption := (mots[i,1]+ mots[i,2]); }
while (nombre_essais >0) or not(fini) do
begin
trouve := false;
caractere := Form1.lettre.text;
for j:= 0 to (longueur_des_mots -1) do
begin
{write (mots[i,j]); }
if caractere = mots[i,j]
then
begin
{writeln ('OK'); }
trouve := true;
if j = 0 then Form1.car1.caption := caractere;
if j = 1 then Form1.car2.caption := caractere;
if j = 2 then Form1.car3.caption := caractere;
if j = 3 then Form1.car4.caption := caractere;
if j = 4 then Form1.car5.caption := caractere;
if j = 5 then Form1.car6.caption := caractere;
if j = 6 then Form1.car7.caption := caractere;
end;
end;
if not(trouve)
then
nombre_essais := nombre_essais - 1;
end;
end.
{begin
randomize;
i:= random (2);
Choisir un mot dans l'array mots
{writeln (i);
for i:=0 to 1 do
begin
while nombre_essais >0 do
begin
trouve := false;
readln(caractere);
for j:= 0 to 6 do
begin
write (mots[i,j]);
if caractere = mots[i,j]
then
begin
writeln ('OK');
trouve := true;
mot[j] := caractere;
end;
end;
writeln;
write (mot);
writeln;
if not(trouve)
then
writeln ('rate!');
if not(trouve)
then
nombre_essais := nombre_essais - 1;
end;
end. }
mais il y a un probleme a : caractere := form1.lettre.text
il dit que char et Tcaption sont des types incompatibles.
Comment faire pour resoudre ce probleme?
slachz
Messages postés109Date d'inscriptionlundi 21 avril 2003StatutMembreDernière intervention 1 janvier 2006 19 juil. 2004 à 17:03
j'ais pas essayé de comprendre ton probleme parce que ton code est illisible ! (dsl)
je veux dire, tout se suit, il n'y a pas d'incrementation, meme les commentaires suivent direct les instructions (met de l'espace apres le ";" ).
tu peux aussi utiliser l'instruction case..of au lieu d'utiliser :
if j = 0 then ...
if j = 1 then ...
mais bon, c'est que tu ne connaissait pas..
au fait, pas besoins de mettre a chaque fois "FORM1." , pour les objets de ta form1, cela serait utile si plusieurs forms avait des objets homonyme.
bon si j'ai le temps je regarderais ta source lol ^^ (bon je susi un noob mais bon...)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 20 juil. 2004 à 09:57
Je ne comprends pas bien ce que tu veux faire avec ton code, une espèce de pendu ?
Sans entrer dans les détails :
- une variable de boucle (ici i, j) doit toujours être locale, pas globale. Le compilateur refusera de compiler;
- lettre.text est un String. Tu ne peux pas attribuer un String à un Char (l'inverse oui). Mais tu peux déclarer, par exemple :
caractere := lettre.text[1];
car là tu attribues la première lettre, qui est un Char (un String peut être comparé à un array of Char) à caractere qui est un Char.
Pour le reste, faut voir...
slachz te donne un excellent conseil. Quand tu as une suite de comparaisons "if...then", il est plus élégant et plus efficace de remplacer par "case of...", ce qui donnerait ici :
case j of
0: car1.Caption := caractere;
1: car2.Caption := caractere:
//etc...
end;
Pareil pour Form1, inutile de préciser, sauf à l'intérieur d'une procedure ou function non déclarée, ou si tu appelles depuis une autre unité, et encore, mais on sort du sujet...