lektrosonic
Messages postés145Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention21 février 2013
-
9 juin 2011 à 15:02
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
9 juin 2011 à 18:08
Bonjour, je dois faire un morpion sous Delphi. Pour les cases du jeu j'utilise un DrawGrid de 3x3. A l'appel de la procedure DrawGridSelectCell c-a-d a la selection d'une case avec la souris, je souhaite la colorier en fonction du joueur. Cela marche mais mon probleme c'est que c'est decale. En effet, je click sur une case et c'est au bout de 1 ou 2 clicks suplementaie que la case du debut se colorie enfin et ansi de suite..
procedure TFormetableau.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var rect: TRect;
begin
lignecliquee := Arow; //récupère la ligne cliquée
colonnecliquee := ACol; //récupère la colonne cliquée
if Monjeu [colonnecliquee,lignecliquee] <> 0 then
showmessage('Case deja jouée')
else
begin
if (joueur=1) then
begin
Monjeu [colonnecliquee,lignecliquee]:=1;
drawgrid1.canvas.brush.color := clred;
rect := drawgrid1.CellRect(colonnecliquee,lignecliquee);
joueur:=2;
nbcoups := nbcoups -1;
end
else if (joueur=2) then
begin
Monjeu [colonnecliquee,lignecliquee]:=2;
drawgrid1.canvas.brush.color := clgreen;
rect := drawgrid1.CellRect(colonnecliquee,lignecliquee);
joueur:=1;
nbcoups := nbcoups -1;
end;
peindre;
end;
if nbcoups = 0 then showmessage('Partie finie') ;
end;
procedure TFormetableau.peindre;
var i,j : integer;
rect : Trect;
begin
for i:=0 to 2 do
begin
for j:=0 to 2 do
begin
if (Monjeu[i,j]= 0) then
begin
drawgrid1.canvas.brush.color := clwhite;
rect := drawgrid1.CellRect(i,j);
drawgrid1.Canvas.FillRect(rect);
end
else if (Monjeu[i,j]= 1) then
begin
drawgrid1.canvas.brush.color := clred;
rect := drawgrid1.CellRect(i,j);
drawgrid1.Canvas.FillRect(rect);
end
else if (Monjeu[i,j]= 2) then
begin
drawgrid1.canvas.brush.color := clgreen;
rect := drawgrid1.CellRect(i,j);
drawgrid1.Canvas.FillRect(rect);
end;
end;
end;
end;
Monjeu est un tableau d'entier de 3x3 qui stock les coup: 1 pour le joueur 1, 2 pour le joueur 2 et 0 pour vide.
Avez vous une idee svp ? Je suis bloque depuis plusieurs heures.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 9 juin 2011 à 18:08
Salut,
ton évènement "Peindre" tu peux le virer, il faut implémenter le "OnDrawCell" de ton DrawGrid et dans le "OnSelectCell" tu remplaces l'appel à "Peindre" par "DrawGrid1.Invalidate;" et ça devrait fonctionner