Rechercher - Liste des utilisateurs
Version complète : Nouvelle unité : Money
Accueil » FunDelphi » Nouvelle unité : Money
1 2 3 4 5 6 7
sjrd
DerF_44
Et ça fonctionne parfaitement : Le joueur ne peut franchir l'obstacle !… (ce que je voulais pour cet exemple)
Cancel est en effet la bonne méthode.
DerF_44
Et, ma question : Quelle est la différence entre “Exit” et “Cancel” ?..
Exit 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.
Cancel est une méthode du contexte de déplacement qui demande l'annulation du déplacement.
DerF_44
N'y a t-il pas en FunDelphi la possibilité de poser des Labels et des Goto comme en Basic ?!..
Non, 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.
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.
Normalement ça devrait le faire.
DerF_44
Yesss !! Ça le fait carrément !
Suite à mes premiers essais, c'est nickel, ça fonctionne parfaitement !!
C'est exactement ce que je voulais, et j'ai pu placer la petite boucle qui fait clignoter le joueur lorsqu'il touche la vilaine bête… SUPER !

Énorme merci !!
DerF_44
Ok, j'ai presque terminé l'unité LifePointsCounter avec possibilité d'affichage permanent du nombre de points, une vilaine bête, une potion de vie, et un effet configurable unique ou permanent…
Ce qui serait parfait c'est que le joueur puisse afficher ou non le nb. de pts à l'écran en appuyant sur une touche du clavier..
Comment pourrais-je “allumer” ou “éteindre” le plugin en question avec la touche V du clavier ??..


Si une réponse facile et simple existe, je suis preneur !…
sjrd
Si le plugin qui montre la vie du joueur s'appelle LifePointsDisplayPlugin, il faut créer un autre plugin qui l'ajoute ou le retire :
uses
KeyStrokes;

components
LifePointsDisplayEnablePlugin: TLifePointsDisplayEnablePlugin;

plugin TLifePointsDisplayEnablePlugin(TKeyStrokePlugin)
hint 'Active ou désactive l''affichage des points de vie';

on SetupKeyStroke do
begin
KeyStroke.Key := Ord('V');
end;

on KeyStrokeTriggered do
begin
if Player.HasPlugin(LifePointsDisplayEnablePlugin) then
Player.RemovePlugin(LifePointsDisplayEnablePlugin)
else
Player.AddPlugin(LifePointsDisplayEnablePlugin);
end;
end;
DerF_44
Merci, merci et encore merci sjrd !!.
C'est géant !!
Et vu le code je pense que j'ai bien fait de poser la question !!!!
(C'est un peu comme une langue étrangère le FunDelphi, le comprendre vient assez vite, mais construire des phrases c'est quand même un tantinet + balaise !!)
Je bricole tout ça, “torture” un peu l'unité afin de la tester dans des circonstances différentes, puis la livre par ici..

Encore MERCI pour tous ces apprentissages !!.
DerF_44
Juste une petite vérification….

obstacle TBadSpider
name 'araignée mortelle';
image 'araignee';
property LifePointsCount : Integer;

on AfterConstruction do
begin
inherited;
LifePointsCount := -8;
end;

on Pushing do
begin
Blabla....
Blabla...
C'est correct pour poser une valeur par défaut du nb. de pts de vie perdus au contact de la vilaine bête ?!.
(N'est-il pas possible de donner la valeur en même temps que la déclaration de la property ?.)
Le code fonctionne, mais bon, autant proposer quelque chose de “propre” …
sjrd
C'est la bonne manière de faire. Il n'est pas possible de donner de valeur par défaut là où on déclare une property, mais ce sera sans doute possible dans une version ultérieure.
DerF_44
Ok d'ac…
Allez, je me permets une toute petite dernière demande, vu que j'ai crashé FunLabyrinthe à cause de mes bidouilles et que j'ai été obligé de re-éditer mon .fnd en dehors de l'appli (merci Notepad++ !) comment attribuer par défaut 100 pts de vie ??…

object TLifePoints
name 'Pts de vie';
image 'BodyParts/Heart';
J'ai testé toutes sortes de “ruses” sur le même principe que l'obstacle Araignée mais sans succès…
Après avoir fais mumuse avec des Player et TPlayer tout a planté et ça m'a calmé !!..
DerF_44
Ok, je crois que j'ai finalement trouvé !!.. (ce fut pas sans mal !..)


on SetCount do
begin
Player receives 100 LifePoints;
end;

C'est la liste des on… do qui m'a mis sur la voie !!..
DerF_44
Ben non, ça ne marche pas !…
J'ai de plus des difficultés à poser l'action de l'outil tueur d'araignées !…
Pffffffff….

Ça y est : Ça m'énerve !!..


tool TSword
name 'Epée';
image 'Weapons/Sword';

on Find do
begin
Player.ShowMessage ('Super : Tu peux tuer les araignées avec cette épée !.');
end;

SOS !! Comment puis-je poser mon action KillBadSpider if Player has at least 1 self;
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB