FunLabyrinthe

Événements et instructions

Après avoir fait un terrain tout simple qui ne fait rien, il est temps de créer un composant qui fait quelque chose. Pour cela, nous allons prendre l'exemple d'un effet. De même que le mot-clef field introduit un terrain, le mot-clef effect permet de créer une nouvelle classe d'effet. Vous aurez compris qu'existent également des mots-clef similaires tool et obstacle.

effect TSampleEffect
  name 'Effet exemple';
  image 'Buttons/Button';
end;

Pour que cet effet fasse quelque chose, il faut réagir aux différents événements qui surviennent dans FunLabyrinthe. Rappelez-vous que l'événement principal d'un effet est l'événement Execute, qui est déclenché lorsque le joueur tombe sur l'effet.

effect TSampleEffect
  name 'Effet exemple';
  image 'Buttons/Button';

  on Execute do
  begin
  end;
end;

Entre les lignes begin et end, vous pourrez écrire les instructions que FunLabyrinthe devra exécuter lorsque l'événement Execute surviendra.

Instructions de base

Les instructions du langage FunDelphi peuvent être très diverses. En réalité, ce sont les mêmes que le langage de programmation Delphi, avec quelques simplifications liées à FunLabyrinthe. Cette section vous présente une série d'instructions de base, classiques, que vous voudrez utiliser dans FunLabyrinthe.

Changer le terrain, l'effet, l'outil ou l'obstacle d'une case

Très souvent, vous voudrez modifier une des composantes d'une case de la carte courante. Ceci peut se faire comme suit :

  on Execute do
  begin
    Map[1, 3, 0].Effect := NorthArow;
  end;

Cette instruction place une flèche nord sur la case (1, 3, 0) de la carte courante. Les trois nombres sont les coordonnées (X, Y, Z) de la case sur la carte. Vous pouvez remplacer Effect par Field, Tool ou Obstacle, pour modifier respectivement le terrain, l'outil, ou l'obstacle.

NorthArrow indique quel est le nouvel effet. Il s'agit de l'ID du composant voulu.

Si vous essayez de compiler ce code tel quel, vous aurez une mauvaise surprise :

On appelle ce type d'erreur une erreur de compilation. Forcément, lorsqu'on programme dans un langage qui impose des règles, il arrive qu'on les enfreigne. Le compilateur est là, entre autres, pour vérifier qu'on a bien respecté toutes les règles. Quand ce n'est pas le cas, il affiche des erreurs.

Notez que l'erreur a un texte (Identificateur NorthArow non déclaré) et une position (la ligne mise en rouge et la position du curseur dans le texte), ce qui peut vous aider à localiser et à corriger l'erreur.

En l'occurrence, cette erreur signifie que le compilateur ne sait pas ce qu'est NorthArow. Soit il a été mal orthographié, soit il n'a pas été déclaré correctement. Il s'agit ici du premier cas. En effet, NorthArrow s'écrit bien avec deux 'r' et non un. Corrigeons donc cette erreur :

  on Execute do
  begin
    Map[1, 3, 0].Effect := NorthArrow;
  end;

Cette fois, si vous compilez, vous n'aurez plus d'erreur.

Changer complètement une case

Si la section précédente montrait comme changer une des composantes d'une case, celle-ci présente comment modifier entièrement une case :

  on Execute do
  begin
    Map[1, 3, 0] := Grass+NorthArrow;
  end;

Vous pouvez constater que vous pouvez combiner plusieurs composantes de case avec l'opérateur +. N'oubliez pas qu'il est nécessaire qu'il y ait un terrain. Sinon vous courrez à la catastrophe.

Afficher un message au joueur

Pour afficher un message au joueur utilisez l'instruction suivante :

  on Execute do
  begin
    Player.ShowMessage('Hello World!');
  end;

Le texte affiché au joueur est une chaîne de caractères. Si vous voulez mettre une vraie apostrophe au sein d'un message, doublez-la, comme dans 'Salut l''ami !'.

Si votre message est long, il risque fort de dépasser la ligne grise verticale qui se trouve à droite. De manière générale, il est raisonnable d'éviter de dépasser cette largeur de ligne, car la lecture devient difficile. Vous pouvez alors découper votre message en plusieurs morceaux, comme ceci :

  on Execute do
  begin
    Player.ShowMessage('Tu as trouvé un objet super méga cool. Il ne te reste '+
      'plus qu''à savoir comment tu vas l''utiliser.');
  end;

Donner et reprendre des objets au joueur

Ce petit exemple montre un échange, et par là montre comment donner des objets au joueur, ou lui en reprendre.

  on Execute do
  begin
    Player.ShowMessage('On va faire un échange : tu me donnes 2 clefs '+
      'd''argent et je te donne une clef d''or.');
    Player discards 2 SilverKeys;
    Player receives 1 GoldenKeys;
  end;

La grammaire n'est pas le point fort de FunDelphi : on écrit bien 1 GoldenKeys et non 1 GoldenKey. En effet, c'est l'ID du composant objet clefs d'or. Cependant, notez que la "phraséologie" ressemble à celle de l'anglais naturel.

Déplacer le joueur

Si voulez déplacer le joueur à un autre endroit du jeu, comme un téléporteur, utilisez l'instruction (la méthode en fait) MoveTo :

  on Execute do
  begin
    Player.MoveTo(Point3D(3, 2, 1));
  end;

Cette forme ne change pas de carte, et n'exécute pas non plus la case où le joueur arrive. Si vous voulez exécuter la case de destination, utilisez cette autre forme :

  on Execute do
  begin
    Player.MoveTo(Point3D(3, 2, 1), True);
  end;

Actuellement, changer de carte requiert d'utiliser des variables, et ne sera donc pas présenté ici.

Changer de direction et continuer le déplacement

L'effet de flèche s'obtient par la combinaison de deux opération : changer la direction du joueur, puis imposer de continuer le déplacement.

  on Execute do
  begin
    Player.Direction := diEast;
    GoOnMoving := True;
  end;

Pour obtenir un effet de carrefour, seule l'instruction GoOnMoving est nécessaire.

Faire gagner ou perdre le joueur

Les méthodes Win et Lose font respectivement gagner et perdre le joueur. Elles s'utilisent de manière similaire. Voici un exemple qui fait gagner le joueur.

  on Execute do
  begin
    Player.Win;
    Player.ShowMessage('Bravo ! Tu as gagné !');
  end;

Afficher ou cacher le joueur

Les méthodes Show et Hide, respectivement, montrent et cachent le joueur. Leur syntaxe est équivalente à Win et Lose, ci-dessus.

Aller à la page
(C) 2000-2011 Sébastien Doeraene