Bonjour, voila un extrait de mon jeu de tir en pascal.
C'est la procédure gérant les déplacements et le tir du robot.
Telle qu'elle est, lors de l'appui sur A le rayon part et se déplace tout seul ( ce à quoi je voulais arriver, cf mon ancien topic ) mais le pb c que je voudrais que pendant ce temps là, mon gus puisse se déplacer, j'ai donc essayé de mettre un appel à la procédure deplacements dans ma boucle while counter2<=(counter1+1) mais si je fais cela, j'obtiens une erreur 202 : stack overflow error qui d'apres l'aide coorespond à un débordement de la pile du à une récursivité infinié je pense que cette erreur vient du fait que je passe en paramètres touchepressee dans la procédure deplacements qui doit etre restée à A je pense et du coup on retourne dans cette boucle et effectivement c bien une boucle infinie mais si je mets un touchepresse:=readkey juste avant, il faut faire déplacer le robot pour que le rayon avance
Je ne sais donc pas trop comment m'en sortir.
Je vous remercie de votre aide
PROCEDURE deplacements(var posrobx,posroby:integer;touchepressee:char);
var gauche,droite,bas,haut:char;
he,min,sec,cent,counter1,counter2:word;
poslasx,poslasy:integer;
begin
{ declaration des touches }
gauche:=char(113);
droite:=char(100);
bas:=char(115);
haut:=char(122);
{ Deplacement Droit }
if touchepressee=droite then
begin
{ Dessine le robot tout en noir afin de l effacer}
dessine_robot(posrobx,posroby,0,0,0);
{ Dessine le robot avec les nouvelles coordonn?es }
posrobx:=posrobx+10;
end;
{ Deplacement Gauche }
if touchepressee=gauche then
begin
dessine_robot(posrobx,posroby,0,0,0);
posrobx:=posrobx-10;
end;
{ Deplacement Haut }
if touchepressee=haut then
begin
dessine_robot(posrobx,posroby,0,0,0);
posroby:=posroby-10;
end;
{ Deplacement Bas }
if touchepressee=bas then
begin
dessine_robot(posrobx,posroby,0,0,0);
posroby:=posroby+10;
end;
{ Posage de bombe }
if touchepressee=char(97) then
begin
poslasx:=posrobx+80;
poslasy:=posroby;
while poslasx<=640 do
begin
dessine_laser(poslasx,poslasy,red,0);
gettime(he,min,sec,cent);
counter1:=cent+(sec*100)+(min*6000)+(he*360000);
while counter2<=(counter1+1) do
begin
!! PB !! deplacements(posrobx,posroby,touchepresse);
gettime(he,min,sec,cent);
counter2:=cent+(sec*100)+(min*6000)+(he*360000);
end;
dessine_laser(poslasx,poslasy,0,0);
poslasx:=poslasx+10;
dessine_laser(poslasx,poslasy,red,0);
end;
end;
end;
[jfdsdjhfuetppo]--Message édité par bartus--[/jfdsdjhfuetppo]