Forum FunLabyrinthe

Le jeu de labyrinthe fun et gratuit - Retour au site

  • Vous n'êtes pas connecté.

#1 juil. 11, 2012 12:26:16

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

Débutants

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.



(°!°) DerF

Hors-ligne

#2 juil. 11, 2012 12:58:32

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

Débutants

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'];


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#3 juil. 11, 2012 13:16:11

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

Débutants

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



(°!°) DerF

Hors-ligne

#4 juil. 11, 2012 19:14:04

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

Débutants

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.


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#5 juil. 11, 2012 21:10:37

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

Débutants

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é !!!.





(°!°) DerF

Hors-ligne

#6 juil. 12, 2012 11:04:47

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

Débutants

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.


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#7 juil. 12, 2012 12:16:52

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

Débutants

É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

Hors-ligne

#8 juil. 14, 2012 13:30:35

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

Débutants

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


(°!°) DerF

Hors-ligne

#9 juil. 15, 2012 17:32:24

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

Débutants

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);


---
Sébastien Doeraene
Auteur de FunLabyrinthe

Hors-ligne

#10 juil. 15, 2012 18:27:09

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

Débutants

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


(°!°) DerF

Modifié DerF_44 (juil. 15, 2012 18:27:45)

Hors-ligne

Pied de page

Modération

Powered by DjangoBB

Lo-Fi Version