Probleme sur serpent

seb33000 Messages postés 1 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 29 novembre 2005 - 29 nov. 2005 à 15:32
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 29 nov. 2005 à 16:50
salut, j ai un souci sur la progr de mon serpent, mon prof n a pas su m aider. j ai un message de violation a l execution. le serpent est un peu basic mais pour moi c est pas facile. il doit tester le labyrinthe et doit retrouver le bon chemin la foi suivante. j ai essayé de stocker des valeur dans une liste pour qu il retrouve son chemin et c est depuis ca qu il plante. ma source:

unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;


type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image3: TImage;
Timer1: TTimer;
Button2: TButton;
Shape1: TShape;
Button3: TButton;
Timer2: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);


private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;
ratleft,rattop : integer;
stringlist1:Tstringlist;
i:integer;
implementation


{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;
image3.visible := false;
image1.visible := false;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled := false;
image3.visible := true;
image1.visible := true;
timer2.Enabled:=false;


with image3.canvas do begin
shape1.Left := 50;
shape1.Top := 100;
pen.Color := clBlack ;
pen.Width:= 15;
moveto(50,100);
lineto(300,100);
lineto(300,150);
lineto(300,400);
lineto(600,400);
lineto(600,280);
moveto(120,300);
lineto(480,300);
moveto(50,200);
lineto(500,200);
pen.Color := clblue;
moveto(600,280);
lineto(600,220);
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.enabled := true;
i:=0;
end;



procedure TForm1.Timer1timer(Sender: TObject);
Begin
ratleft := shape1.Left;
rattop := shape1.Top ;
if image3.canvas.Pixels[ratleft,rattop-10] = clblue then begin
timer1.Enabled :=false
end;
//en noir
//aller a droite
if image3.canvas.Pixels[ratleft+10,rattop] = clblack then begin
shape1.Left := shape1.left+10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left-10,shape1.top);
image3.Canvas.lineto(shape1.left-10,shape1.top);
stringlist1.add(inttostr(2));inc(i);
end
//aller en bas
else if image3.canvas.Pixels[ratleft,rattop+10] = clblack then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top+10;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top-10);
image3.Canvas.lineto(shape1.left,shape1.top-10);
stringlist1.add(inttostr(1));inc(i);
end
//aller a gauche
else if image3.canvas.Pixels[ratleft-10,rattop] = clblack then begin
shape1.Left := shape1.left-10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left+10,shape1.top);
image3.Canvas.lineto(shape1.left+10,shape1.top);
stringlist1.add(inttostr(3));inc(i);
end
//aller en haut
else if image3.canvas.Pixels[ratleft,rattop-10] = clblack then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top-10;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top+10);
image3.Canvas.lineto(shape1.left,shape1.top+10);
stringlist1.add(inttostr(4));inc(i);
end
//en jaune
//aller a droite
else if image3.canvas.Pixels[ratleft+10,rattop] = clyellow then begin
shape1.Left := shape1.left+10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clred ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left-10,shape1.top);
image3.Canvas.lineto(shape1.left-10,shape1.top);
stringlist1.Delete(i);dec(i);
end
else if image3.canvas.Pixels[ratleft,rattop+10] = clyellow then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top+10;
image3.Canvas.pen.Color := clred ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top-10);
image3.Canvas.lineto(shape1.left,shape1.top-10);
stringlist1.Delete(i);dec(i);
end
else if image3.canvas.Pixels[ratleft-10,rattop] = clyellow then begin
shape1.Left := shape1.left-10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clred ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left+10,shape1.top);
image3.Canvas.lineto(shape1.left+10,shape1.top);
stringlist1.Delete(i);dec(i);
end
else if image3.canvas.Pixels[ratleft,rattop-10] = clyellow then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top-10;
image3.Canvas.pen.Color := clred ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top+10);
image3.Canvas.lineto(shape1.left,shape1.top+10);
stringlist1.Delete(i);dec(i);
end
{ else if shape1.Left = 480 then
if shape1.Top = 300 then timer1.Enabled := false;
if timer1.enabled = false then showmessage('Coucou SEB!!j''ai trouvé l''entrée!!!');}


end;
procedure TForm1.Button3Click(Sender: TObject);
begin
timer2.Enabled:=true;
i:=0;
end;


procedure TForm1.Timer2Timer(Sender: TObject);
begin
ratleft := shape1.Left;
rattop := shape1.Top ;
if image3.canvas.Pixels[ratleft,rattop-10] = clblue then begin
timer2.Enabled :=false
end;
//en noir
//aller a droite
if stringlist1[i]=inttostr(2) then begin
shape1.Left := shape1.left+10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left-10,shape1.top);
image3.Canvas.lineto(shape1.left-10,shape1.top);
inc(i);
end
//aller en bas
else if stringlist1[i]=inttostr(1) then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top+10;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top-10);
image3.Canvas.lineto(shape1.left,shape1.top-10);
inc(i);
end
//aller a gauche
else if stringlist1[i]=inttostr(3) then begin
shape1.Left := shape1.left-10;
shape1.Top := shape1.top;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left+10,shape1.top);
image3.Canvas.lineto(shape1.left+10,shape1.top);
inc(i);
end
//aller en haut
else if stringlist1[i]=inttostr(4) then begin
shape1.Left := shape1.left;
shape1.Top := shape1.top-10;
image3.Canvas.pen.Color := clyellow ;
image3.canvas.pen.Width:= 15;
image3.Canvas.moveto(shape1.left,shape1.top+10);
image3.Canvas.lineto(shape1.left,shape1.top+10);
inc(i);
end
end;
end.

Merci d avance pour toute vos reponses.

1 réponse

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
29 nov. 2005 à 16:50
salut,


premiere chose donnes nous le massage que tu obtiens ensuite passes en
mode pas à pas pour voir dans quelle partie du code se situe l'erreur.


Enfin je n'ai pas trouvé dans ton code l'initialisation de stringlist1:


stringlist1 := TStringList.Create; { construire la liste }


bonne prog


@+


jlen
0
Rejoignez-nous