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
Petit oubli d'une “conjugaison” de base…
Si le code suivant fonctionne parfaitement :
Map[2, 8, 1].Tool := LifePotion;
Impossible de faire reconnaître "LifePotion1" qui est une copie au sein de l'éditeur…
(LifePotion1 non déclaré, me dit le compilateur)
Alors donc, comment accompagner ma ligne de code pour désigner le bon composant ?..
Un petit Master dans le coin, mais comment ?.
Merci.

sjrd
Non, en effet, les fichiers sources ne peuvent pas connaître les composants copiés dans l'éditeur. Ils ne connaissent que les composants définis dans l'unité en question ou dans d'autres unités dans ses uses.

Dans ton cas, le plus simple est faire :
Map[2, 8, 1].Tool := Master.Tool['LifePotion1'];
DerF_44
Yes !.. Oui, voilà !!. Perfect !.
Je n'étais pas loin dans mes essais, mais pas encore la bonne “orthographe” !…
Merci !!

Oui je me rends compte de plus en plus que de copier des éléments (ou de les créer en .ssq) est très facile mais énormément limité par rapport à une création .fnd !!…
Je réfléchis tranquillement, en arrière plan si je puis dire, à créer TOUS les composants de mon projet en .fnd, voire carrément agencer des unités avec des composants spécifiques qui ne seront “posés” qui si ils sont utiles à un moment précis !… (?!)…
Serait-ce utile et “intelligent” de découper mon plateau de jeu en plusieurs morceaux (unités) afin que le programme ne prenne en compte que ce qui est nécessaire au moment présent ??.
Poussé à l'extrême, serait-ce envisageable de faire mon projet en 63 () unités !!!!!??????

sjrd
Tu peux avoir autant d'unités que tu veux, aucun problème à ça. 63 c'est pas encore extrême ;-)

Cela dit, l'aspect “prendre en compte que ce qui est nécessaire au moment présent” : je ne sais pas trop ce que tu entends par là. Mais en tous cas, Dès le moment où tu charges ton projet, FunLabyrinthe charge tout ce qui concerne ton projet. Et il décharge tout quand tu le fermes.
DerF_44
Ok, je reconnais que mon explication est peu claire, et, de toutes façons, mon idée aussi !..
En fait je m'interroge sur une méthode d'écriture qui serait + appropriée à mon projet,
et me demande si une manière de faire peut être + efficace qu'une autre..
Par exemple dans mon .fnd principal j'ai :
if Player.Tag = 1 then
begin
//------------bloc de 30 lignes d'instructions
end;
if Player.Tag = 2 then
begin
//------------autre bloc de 25 lignes de codes..
end;
if Player.Tag = 3 then
// etc etc jusqu'à :
if Player.Tag = 63 then
//-------------bloc d'instructions
end;
Ne serait-ce pas + “efficace”, + “fluide” de faire :

if Player.Tag = 1 then
//Appel d'une procedure ou d'une fonction (ou d'une unité !) qui contient le bloc des 30 lignes d'instructions
end;
If Player.Tag = 2 then
//Appel d'une procedure qui contient les 25 lignes...
end;
//etc etc jusqu'à 63 !!..
Le hic c'est que je me demande bien comment on écrit tout ça !
(Par exemple comment poser plusieurs lignes de codes dans un case (plusieurs lignes pour un même n°)) ??..
Comment “appeler” un bloc d'instruction (ou une unité !) depuis un .fnd principal !?..
En fait je me rends compte, vieillard que je suis, que des instructions comme Goto (se rend au label),
Return (retour au programme appelant), ou PrgmMachinTruc (appel du programme MachinTruc) me manquent beaucoup !!

Il doit bien y avoir des ruses, des méthodes, en FunDelphi, qui permettraient de dégrossir mon .fnd principal, de l'assister avec des “modules” extérieurs, de le transformer (mon .fnd principal) en “mécanique” globale, laissant les décors, objets, outils, effets etc, à des unités secondaires ?…
Et si tout cela est faisable, y'aurait-il un intérêt quelconque d'un point de vue programmation ?..
Bref, tout cela est encore très confus, mais, dans le genre, si on peut poser un bloc d'instructions à chaque “ligne” d'un case je suis très intéressé !!!.



sjrd
DerF_44
(Par exemple comment poser plusieurs lignes de codes dans un case (plusieurs lignes pour un même n°)) ??..
Avec begin..end, comme d'habitude pour ce genre de choses :
case Player.Tag of
1:
begin
// ton code
end;
2:
begin
// ton code
end;
// etc.
end;
DerF_44
Comment “appeler” un bloc d'instruction (ou une unité !) depuis un .fnd principal !?..
Tu définis ta procédure comme ceci, soit dans ton .fnd principal, soit dans une autre unité :
procedure GereLaCase1(Master: TMaster; Context: TMoveContext);
var
// variables locales, si nécessaire
begin
// ton code ici
// grâce au Context tu as accès au Player, à la Map, à Cancel, etc.
end;
Tu l'appelles comme ceci :
case Player.Tag of
1: GereLaCase1(Master, Context);
2: GereLaCase2(Master, Context);
// etc.
end;
Si tu as défini ta procédure dans une autre unité, n'oublie pas d'ajouter cette unité dans les uses de ton unité principale.
DerF_44
En fait je me rends compte, vieillard que je suis, que des instructions comme Goto (se rend au label), Return (retour au programme appelant), ou PrgmMachinTruc (appel du programme MachinTruc) me manquent beaucoup !!
Je pense avoir déjà mentionné que goto avait été banni de tous les langages de programmations plus jeunes que moi.
Return est disponible en Delphi et FunDelphi sous le nom Exit.
L'appel de procédure ou fonction, eh bien c'est comme je viens de montrer au-dessus.
DerF_44
Il doit bien y avoir des ruses, des méthodes, en FunDelphi, qui permettraient de dégrossir mon .fnd principal, de l'assister avec des “modules” extérieurs, de le transformer (mon .fnd principal) en “mécanique” globale, laissant les décors, objets, outils, effets etc, à des unités secondaires ?…
Et si tout cela est faisable, y'aurait-il un intérêt quelconque d'un point de vue programmation ?..
Le découper en une procédure par case me semble bien, en effet. Ne serait-ce que parce que c'est plus facile à lire.
DerF_44
Énorme merci sjrd pour ces nouvelles astuces d'écriture !!
Cela me paraît relativement simple à utiliser..
(Évidemment le Context: TMoveContext je l'aurais pas trouvé tout seul !!)
Du coup mon envie de tout réécrire va pouvoir se concrétiser plus facilement !..
Pour l'instant je reste concentré sur mon brouillon actuel, bientôt terminé, que peut-être je publierais,
et ensuite je pourrais envisager la complète réécriture avec quelques options de jeu en + !..

Merci !
DerF_44
Toujours dans les expérimentations un peu “tordues”
(Et c'est un régal !! Déjà avec le peu de connaissances que j'ai c'est très plaisant, alors pour un développeur ça doit être gigantesque !!! )
je me demandais si il est possible d'afficher un message pendant un certain temps !!???…
Mon idée serait d'avoir un effet qui, lorsque exécuté, affiche un message pendant 1 seconde !..
Que le joueur appuie ou non sur les touches du clavier ne changerait rien, au bout d'1 seconde le message disparaîtrait !..
Possible or not possible ?…

NB: J'ai déjà largement de quoi m'amuser sans cela, ce n'est pas absolument nécessaire pour mon projet,
mais si une soluce relativement simple existe je suis preneur !!
sjrd
C'est possible, et très simple, grâce à l'unité PermanentPlayerMessage.
uses
PermanentPlayerMessage;

[...]
ShowPermanentMessage(Player, 'Un message');
Sleep(1000); // temps d'affichage en ms
HidePermanentMessage(Player);
DerF_44
Aaah oui effectivement, c'est simple et ça m'intéresse cette possibilité !.. Merci !.
(un effet pour afficher le message et un autre pour le cacher me donne quelques idées sympas…)
Mais… ….(désolé !)…
Mon idée de base serait de ne pas immobiliser le joueur pendant le temps d'affichage !!
(pas de Sleep(1000))…
N'y aurait-il pas moyen de combiner le ShowPermanentMessage(Player, ‘Coucou’) et la super formule
Master.Timers.ScheduleNotificationMsg(1000, Master.Players,msgMessage) !???…

Si je possédais le 1/1.000.000.000 de tes connaissances, je serais assez partant pour ouvrir un sujet
"Astuce de la semaine“ (j'ai pas osé écrire ”jour" à la place de semaine ! )
qui balancerait, au gré de l'inspiration du moment, une petite formule toute simple en FunDelphi !!!
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