DerF_44Cancel est en effet la bonne méthode.
Et ça fonctionne parfaitement : Le joueur ne peut franchir l'obstacle !… (ce que je voulais pour cet exemple)
DerF_44Exit termine le on..do courant (la procédure courante en fait). Donc c'est comme si tu faisais en “goto Fin;” et que tu mettais un label “Fin” juste avant le end du on..do.
Et, ma question : Quelle est la différence entre “Exit” et “Cancel” ?..
Cancel est une méthode du contexte de déplacement qui demande l'annulation du déplacement.
DerF_44Non, il y a des procédures, des while et même des for, mais pas de goto. Le goto est un concept très ancien, dépassé et obsolète dans les langages de programmation modernes, car il casse la structure des codes, et donc les rend moins lisibles.
N'y a t-il pas en FunDelphi la possibilité de poser des Labels et des Goto comme en Basic ?!..
DerF_44
Et donc maintenant je voudrais savoir comment (et où !) placer une procedure (valable pour d'autres vilaines bêtes !) qui affichera le message “Il te reste %d points de vie…” et un message en fonction du nb de pts de vie du joueur… (si pts <10 alors avertissement)… Ainsi que la condition si Pts de Vie = 0 alors le joueur perd..
unit TestLifePointsCounter;
uses
FunLabyBase, TLifePointsCounter;
components
BadSpider : TBadSpider;
LifePoints: TLifePoints;
object TLifePoints
name 'Points de vie';
image 'BodyParts/Heart';
end;
procedure InfoAboutLife(Player: TPlayer);
var
Master: TMaster;
begin
Master := Player.Master; // nécessaire pour Player.LifePoints
Player.ShowMessage (Format(
'Il te reste %d points de vie..',[Player.LifePoints]));
// peut être étdendu comme tu veux.
end;
obstacle TBadSpider
name 'araignée mortelle';
image 'araignee';
property LostLifePoints : Integer;
on Pushing do
begin
if Player can Marteler then
begin
Square.Obstacle := nil;
Exit;
end else
Player.LifePoints := Player.LifePoints + LostLifePoints;
Player.ShowMessage (Format(
'Oups !.. %d points de vie !.. ',[LostLifePoints]));
InfoAboutLife(Player);
Cancel;
end;
end;
end.