Forum FunLabyrinthe

Le jeu de labyrinthe fun et gratuit - Retour au site

  • Vous n'êtes pas connecté.

#1 déc. 10, 2011 13:49:34

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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.


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#2 déc. 10, 2011 14:42:38

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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

Hors-ligne

#3 déc. 11, 2011 12:20:58

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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 !…


(°!°) DerF

Hors-ligne

#4 déc. 11, 2011 12:49:19

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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;


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#5 déc. 11, 2011 13:00:21

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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

Hors-ligne

#6 déc. 11, 2011 15:24:20

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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” …


(°!°) DerF

Modifié DerF_44 (déc. 11, 2011 16:35:49)

Hors-ligne

#7 déc. 11, 2011 17:01:51

sjrd
De : Belgique
Enregistré : 2010-04-11
Messages : 481
Réputation: +  14  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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.


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#8 déc. 11, 2011 17:11:02

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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

Hors-ligne

#9 déc. 11, 2011 17:58:34

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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

Hors-ligne

#10 déc. 11, 2011 20:26:16

DerF_44
De : Nantes
Enregistré : 2011-10-24
Messages : 271
Réputation: +  0  -
Profil   Envoyer un courriel  

Nouvelle unité : Money

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;


(°!°) DerF

Modifié DerF_44 (déc. 11, 2011 21:11:28)

Hors-ligne

Pied de page

Modération

Powered by DjangoBB

Lo-Fi Version