Rechercher - Liste des utilisateurs
Version complète : A.A.A. (Aides Aux Apprentis)
Accueil » FunDelphi » A.A.A. (Aides Aux Apprentis)
1 2 3
DerF_44
Bonjour à tous,

Après une longue absence des mondes de FunLabyrinthe, me voici de retour dans celui de FunDelphi !.
Comme je n'ai pas touché une seule ligne de code depuis des lustres, je vais devoir quasiment tout réapprendre depuis le début !.
Aussi je me demandais si il ne serait pas intéressant de poster régulièrement les bouts de codes basiques que je suis en train de redécouvrir !?.
Je ne me lasserai jamais de répéter que ce jeu est hautement génial et fantastique, et je reste persuadé
que bon nombre de non-développeurs aimeraient pouvoir se frotter aux conjugaisons du FunDelphi…
Ils ne leurs manquent qu'un lexique exhaustif et des exemples simples pour oser commencer à écrire avec ce language fabuleux..

C'est ce que je me propose de commencer de réaliser ici !

Bien entendu la communauté expérimentée est invitée à me corriger et/ou à compléter par quelques variantes les exemples ici proposés.

Qu'en pensez-vous !??


INDEX :

- Préparation [funlabyrinthe.com]

Terrains :
- Mon premier terrain [funlabyrinthe.com]
- Mon premier terrain qui accepte la planche [funlabyrinthe.com] (idem sans les fondus) [funlabyrinthe.com]
- Un terrain inaccessible [funlabyrinthe.com]
- Un terrain inaccessible + message [funlabyrinthe.com]
- Un terrain inaccessible + message conditionnel [funlabyrinthe.com]
- De l'herbe magique [funlabyrinthe.com]

Obstacles :
- Bloc en or secret [funlabyrinthe.com]
- Personnages et QCM (Oui - Non) [funlabyrinthe.com] (Oui - Non - Peut-être) [funlabyrinthe.com]
- Personnages et QCM (1 seule bonne réponse) [funlabyrinthe.com]
sjrd
Oh ! Pour une raison obscure, je n'ai pas été notifié de ce nouveau message, et je ne l'ai pas vu !

Bon retour
Oui, bien sûr, c'est certainement une bonne idée !
DerF_44
Merci !.
C'est parti !!

Préparation :

Je pars du principe que si l'on souhaite se frotter au FunDelphi,
on a certainement l'envie d'utiliser des images et des sons bien à soi,
autres que ceux proposés dans la Library
Aussi il est nécessaire, après la création d'un nouveau projet, d'ouvrir le répertoire du projet
(qui se trouve dans Documents partagés/FunLabyrinthe/Projects)
afin d'y intégrer un nouveau dossier que l'on nommera Resources.
Dans ce dossier Resources on placera deux sous-dossiers,
nommés Images et Sounds afin d'y déposer les images et les sons que l'on souhaite utiliser.

Via le menu Sources de l'éditeur, puis Nouveau… on va créer un nouveau fichier source FunDelphi
que l'on nommera à convenance, pourquoi pas avec le même nom que le projet.
Ensuite, via le petit bouton prévu à cet effet , on enregistre, compile et recharge le projet.
Enfin, via le menu Fichier, puis Unitées utilisées… on va joindre aux unités utilisées la source .fnd fraîchement créée.


Rappel :

Même si le fait d'utiliser le FunDelphi permet en général de se passer des CustomSquares (.ssq)
il est important de noter que le bouton Code (en bas et à gauche) au sein d'un .ssq ouvert,
permet d'obtenir le code source FunDelphi, visualisable par n'importe quel éditeur de texte (bloc-notes)
ce qui est très riche d'enseignements lorsque l'on commence à manipuler des éléments en FunDelphi.
Il m'est arrivé ainsi de créer en .ssq un bouton-poussoir aux actions simples, puis de visualiser le code source
afin de m'en inspirer pour créer en .fnd un autre bouton aux fonctionnements plus complexes.
sjrd
DerF_44
Mon premier terrain :

Il est tout à fait possible d'utiliser une image bien plus grande que les cases de base de FunLabyrinthe (qui font 30 x 30 pixels)…
On peut même poser une photographie si celle-ci est redimensionnée en multiple de 30 et que la zone est suffisament grande !.

Pour notre premier terrain, de l'herbe praticable, je vais utiliser une image de 300 x 240 pixels,
de préférence au format .png, nommée ‘'GreenGrass’', et qui sera posée dans le dossier Images du projet.
(Documents partagés/FunLabyrinthe/Projects/NomDuProjet/Resources/Images)

Note : Personellement je suis (très) loin d'être anglophone, pourtant, en dehors des noms des différents éléments (Terrains, Effets, Outils, etc)
consultables depuis la liste des objets de l'éditeur, je ne saurais que trop conseiller l'usage de la langue de Shakespeare.
En effet j'ai remarqué qu'il était assez désagréable d'avoir à consulter des lignes de codes mélangeant plusieurs langues.
De plus, il se trouve que l'anglais, déjà très présent en FunDelphi, est une langue particulièrement bien adaptée
aux descriptions sommaires mais précises que l'on rencontre souvent dans les lignes de code informatique.

Voici donc le code, d'une simplicité déconcertante, permettant de ‘'fabriquer’' notre premier terrain :

unit AAA;

uses
FunLabyBase;

components
MyGrass: TMyGrass;

field TMyGrass
name 'Mon herbe';
image 'GreenGrass';
end;

end.

Après avoir déclaré l'élément dans la section components, on décrit le terrain par la section field
Notre terrain ne comporte donc qu'un identifiant (ID) MyGrass qui pourra être utilisé dans une autre portion de code,
un nom Mon herbe, lisible au sein de l'interface Cartes et joueurs de l'éditeur,
et une image GreenGrass, qui sera donc utilisée par FunLabyrinthe pour dessiner notre terrain.
L'instruction end; termine la description du terrain.

Après avoir Enregistré, compilé et rechargé le projet, avec le petit bouton ,
nous obtenons donc un nouveau terrain, disponible dans la liste des objets de l'éditeur,
que l'on peut donc poser sur notre carte :




Télécharger l'image GreenGrass [dl.dropboxusercontent.com]
DerF_44
Mon premier terrain qui accepte la planche :

Dans l'état actuel des choses notre premier terrain comporte deux inconvénients :
- Si on pose de l'eau dessus, ce n'est pas joli, les bords ne sont pas fondus comme avec l'utilisation de l'herbe originale..
- On ne peut pas utiliser la planche avec Mon herbe !.



Pour y remédier nous allons faire dépendre notre terrain MyGrass d'une classe parente, d'où est issue l'herbe classique Grass..
Cette classe ‘'chef’' TGround permet d'indiquer à FunLabyrinthe que notre terrain doit se comporter comme de l'herbe classique,
à savoir dessiner un fondu avec l'eau, et accepter la planche..

On ajoute donc simplement la classe d'où est issu notre terrain :

field TMyGrass(TGround)
Mon herbe permet maintenant l'utilisation de la planche :




Si l'on souhaite conserver l'impossibilité d'utiliser la planche sur notre terrain,
mais bénéficier des fondus entre Mon herbe et l'eau, nous allons utiliser une petite instruction
particulière DoDraw, qui va indiquer au programme quoi faire lorsque MyGrass sera dessiné :

unit AAA;

uses
FunLabyBase;

components
MyGrass: TMyGrass;

field TMyGrass
name 'Mon herbe';
image 'GreenGrass';

on DoDraw do
begin
inherited;
DissipateGroundNeighbors(Context);
end;
end;

end.
C'est l'instruction particulière DissipateGroundNeighbors(Context); qui va permettre d'obtenir des bords fondus esthétiquement plus agréables.

À l'inverse, si on souhaite pouvoir utiliser la planche sur notre terrain, mais ne pas avoir de fondus sur les bords…. je ne sais pas comment on fait !!
sjrd
DerF_44
À l'inverse, si on souhaite pouvoir utiliser la planche sur notre terrain, mais ne pas avoir de fondus sur les bords…. je ne sais pas comment on fait !!
On peut faire quelque chose comme ça :
  on message Plank do
begin
if Kind = pmkLeaveFrom then
begin
Result := (Map[Dest].Field is TMyGrass) and
(Map[Src].Obstacle = nil) and (Map[Dest].Obstacle = nil);
end;
end;
(pas testé)
DerF_44
Ok, bien que cela dépasse (très largement) les compétences d'un apprenti,
voici le code qui permet de créer un terrain qui accepte la planche mais non-issu de TGround :
(il n'y aura donc pas de bords fondus avec l'eau)

unit AAA;

uses
FunLabyBase;

components
MyGrass: TMyGrass;

field TMyGrass
name 'Mon herbe';
image 'GreenGrass';

on message Plank do
var
Map: TMap;
begin
Map := Master.Map['MainMap'];
if Kind = pmkLeaveFrom then
begin
Result := (Map[Dest].Field is TMyGrass) and
(Map[Src].Obstacle = nil) and (Map[Dest].Obstacle = nil);
end;
end;
end;

end.

Merci sjrd !
sjrd
Oui la planche est en fait un élément très complexe de FunLabyrinthe ^^ J'ai dû réfléchir longtemps (des semaines) pour trouver comment la faire fonctionner de manière relativement générique (c'est-à-dire, pas seulement pour le triplet herbe/eau/trou) pour FunLabyrinthe 5.
DerF_44
Effectivement, vu le code, ça a l'air un peu chaud cette histoire de planche !
D'ailleurs avec le code que j'ai donné précédemment,
il n'est pas possible de franchir un cours d'eau où il y aurait Mon herbe d'un côté et Herbe de l'autre…

Il faut ajouter TGround dans la condition en l'imbriquant :

Result := ((Map[Dest].Field is TMyGrass) or (Map[Dest].Field is TGround)) and
(Map[Src].Obstacle = nil) and (Map[Dest].Obstacle = nil);

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