Rechercher - Liste des utilisateurs
Version complète : Débutants
Accueil » FunDelphi » Débutants
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
DerF_44
Voici une de mes premières bidouilles en FunDelphi, un voleur de clés :

unit LostKeys;

uses
FunLabyBase;
components
LostKeysEffect: TLostKeysEffect;

effect TLostKeysEffect
name ‘voleur de clés’;
image ‘Characters/Angel’;

on Execute do
begin
if player has at least 4 SilverKeys then
Player discards 4 SilverKeys;
if player has at least 3 SilverKeys then
Player discards 3 SilverKeys;
if player has at least 2 SilverKeys then
Player discards 2 SilverKeys;
if player has at least 1 SilverKeys then
Player discards 1 SilverKeys;

if player has at least 4 GoldenKeys then
Player discards 4 GoldenKeys;
if player has at least 3 GoldenKeys then
Player discards 3 GoldenKeys;
if player has at least 2 GoldenKeys then
Player discards 2 GoldenKeys;
if player has at least 1 GoldenKeys then
Player discards 1 GoldenKeys;

end;
end;
end.

Si cela fonctionne parfaitement et qu'à la rencontre de cette charmante personne vous êtes dépouillé de toutes vos clés d'argent et d'or, (dans un maximum de 10) il faut bien avouer que le code n'est pas joli du tout !.. Quelle est donc la “ruse” afin de dérober un maximum de clé sans tomber dans un nombre négatif ?!
Comment connaître le nombre de clés possédées ?
Ou comment forcer une valeur minimale à 0 (genre : si nb. de clé < à 0, alors nb. de clé = 0)
Dans mon scénario le voleur disparaît furtivement et le joueur ne peut rien faire d'autre que de trouver d'autres clés !.. Dans l'idéal j'aurais aimé faire réapparaître le voleur à un autre endroit du labyrinthe et, avec une condition particulière (genre le joueur possède une arme) que le joueur puisse récupérer ses clés !..

Beaucoup plus grave : Comment dépouiller le joueur de TOUT ce qu'il possède !!!!????????

Désolé du caractère (très) débutant de ce post, il n'y a pas urgence, mais je suis en manque d'exemples simples et concrets !.
Merci.

PS: J'ai lu dans l'aide que si 2 outils permettent une même action, le joueur dispose automatiquement du choix de l'outil à utiliser (exemple une clé d'argent et une clé d'argent éternelle) cela ne fonctionne pas chez moi et plante le jeu : Tout est bloqué !. (obligé de tuer le processus “FunLaby.exe”)

Xaumina
J'ai le même problème quant aux deux objets avec la même action…
sjrd
Eh bien je ferais ceci :
if Player has at least 10 SilverKeys then
Player discards 10 SilverKeys
else
Player.SilverKeys := 0;
et pareil avec les GoldenKeys.
DerF_44
Ok, Vu !.. Impec !!.
(c'est ça que j'admire chez les programmeurs : C'est fluide, propre, net, efficace !)
Je pense que j'aurais peut-être pu trouver cette soluce, mais ça m'aurait pris des plombes !!
Donc merci !.
DerF_44
Comment afficher un petit texte de présentation en “plein écran” en début de partie, à la manière du didacticiel !?. Et comment re-déclencher un “plein écran” en cours de jeu ?…


sjrd
Le plus simple est d'aller voir directement comment c'est fait dans le didacticiel. L'utile se trouve dans DidacticielUtils.fnd. Puis avec ça il suffit de faire
ShowFullScreenMessage(Player, 'Le message à afficher en plein écran.');
Pour afficher un message au début du jeu, il faut faire un plugin :
plugin TOnGameStartedPlugin
on message GameStarted do
begin
// Ici les choses à faire au début du jeu
end;
end;
DerF_44
sjrd
Le plus simple est d'aller voir directement comment c'est fait dans le didacticiel. L'utile se trouve dans DidacticielUtils.fnd.

Mouais, ben justement, je regarde, je décortique, je dissèque, je copie, et rien ne fonctionne !..
Plus ça va et plus j'y comprends… rien !..
Je vais devoir re-re-re-lire l'aide je crois… Ou prendre un peu de recul..
Mais merci quand même !.

PS: Je vote pour une aide + touffue avec + d'exemples !.
sjrd
Bon eh bien copie ceci dans ton .fnd :
uses
FunLabyBase, FullScreenPlayerMessage;

procedure BeginFullScreenMessages(Player: TPlayer);
var
Master: TMaster;
begin
Master := Player.Master;
Player.RemovePlugin(DefaultShowMessagePlugin);
Player.AddPlugin(FullScreenShowMessagePlugin);
end;

procedure EndFullScreenMessages(Player: TPlayer);
var
Master: TMaster;
begin
Master := Player.Master;
Player.RemovePlugin(FullScreenShowMessagePlugin);
Player.AddPlugin(DefaultShowMessagePlugin);
end;

procedure ShowFullScreenMessage(Player: TPlayer; const Text: string);
begin
BeginFullScreenMessages(Player);
try
Player.ShowMessage(Text);
finally
EndFullScreenMessages(Player);
end;
end;
Et avec ça tu peux utiliser les bouts de code de mon message précédent.
DerF_44
Vraiment désolé, ça marche pas !..
Suis paumé complet : Je les mets où les bouts de code de ton avant-dernier message ?!.
Dois-je utiliser l'unité “FullScrennPlayerMessage” ??. (via Fichier|unités utilisées…) et mettre à True le plug-in FullScreenShowMessage dans les Plug-in attachés au joueur ?!.
Mais bon sang où est-il situé le petit texte d'intro du didacticiel !!???
Tout s'embrouille !…
Dois-je me mettre au tricot et abandonner le FunDelphi !!!!!???
snif..

PS: Je vote pour un pack de 300 labyrinthes ultra-simples montrants un peu + le tour des milliards de possibilités de FunLabyrinthe !!
sjrd
Il n'est pas nécessaire de mettre FullScreenPlayerMessages dans les unités utilisées. Il ne faut pas non plus mettre le plugin à True.
Il faut juste utiliser
ShowFullScreenMessage(Player, 'Le message');
au lieu de
Player.ShowMessage('Le message');
à n'importe quel endroit où tu veux afficher un message.

Dans le didacticiel, ce “n'importe quel endroit” est entre autres au lancement du labyrinthe. Cela se fait grâce au plugin TDidacticielPlugin (dans l'unité Didacticiel.fnd), grâce au message GameStarted. Il peut être réduit au second bout de code dans mon avant-dernier message.

All in all, si tu veux mettre un message en plein écran au lancement du labyrinthe, tu as besoin de ça :
unit TonLaby;

uses
FunLabyBase, FullScreenPlayerMessage;

components
OnGameStartedPlugin: TOnGameStartedPlugin;

procedure BeginFullScreenMessages(Player: TPlayer);
var
Master: TMaster;
begin
Master := Player.Master;
Player.RemovePlugin(DefaultShowMessagePlugin);
Player.AddPlugin(FullScreenShowMessagePlugin);
end;

procedure EndFullScreenMessages(Player: TPlayer);
var
Master: TMaster;
begin
Master := Player.Master;
Player.RemovePlugin(FullScreenShowMessagePlugin);
Player.AddPlugin(DefaultShowMessagePlugin);
end;

procedure ShowFullScreenMessage(Player: TPlayer; const Text: string);
begin
BeginFullScreenMessages(Player);
try
Player.ShowMessage(Text);
finally
EndFullScreenMessages(Player);
end;
end;

plugin TOnGameStartedPlugin
on message GameStarted do
begin
ShowFullScreenMessage(Player,
'Ici le texte affiché en plein écran au démarrage du jeu');
end;
end;

end.
Puis évidemment il faut mettre à True le plugin OnGameStartedPlugin dans l'inspecteur d'objets.
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