Dans les concepts de FunLabyrinthe est déjà expliquée la notion générale de classe et de sous-classes. Cette section vous montre qu'il est possible d'utiliser cette notion en FunDelphi de manière à réutiliser efficacement des classes déjà existantes, tout en les personnalisant pour votre propre usage.
Créer un bouton qui s'enfonce et se relâche
Dans la rubrique événements et instructions, l'effet construit en exemple avait une image de bouton. Mais il ne s'enfonce pas pour autant. En effet, ce n'était pas vraiment un bouton.
Les boutons font partie de la classe TPushButton, qui est une sous-classe de TEffect. Pour créer un véritable bouton, il suffit de spécifier qu'on veut hériter de TPushButton. Ceci se fait simplement en l'indiquant entre parenthèses, comme suit :
effect TSampleButton(TPushButton) name 'Bouton exemple'; on ButtonDown do begin Player.ShowMessage('Tu as appuyé sur le bouton.'); end; end;
Il y a deux choses à noter ici, en plus de l'indication d'héritage : plus d'image, car TPushButton gère déjà l'image. Et l'événement intercepté n'est plus Execute, mais ButtonDown.
Le nom de la classe indiquée entre parenthèses doit être compatible avec le type de composant que l'on décrit. Ainsi, vous n'auriez pas pu mettre TPushButton si vous écriviez un outil. Autrement, vous pouvez utiliser n'importe quelle classe d'effet, y compris une classe que vous auriez vous-même écrite.
Créer un interrupteur
Un interrupteur a pour vocation d'avoir deux listes d'actions "inverses". Lorsqu'on appuie une première fois dessus, il transforme le jeu dans un sens. La deuxième fois, il le remet en place. Et cetera.
Vous pouvez créer très facilement un interrupteur en héritant de la classe TSwitch :
effect TSampleSwitch(TSwitch) name 'Interrupteur exemple'; on SwitchOn do begin Map[1, 2, 3].Effect := NorthArrow; end; on SwitchOff do begin Map[1, 2, 3].Effect := EastArrow; end; end;
Un terrain qui accepte la planche
La rubrique Première approche proposait la création d'un terrain très simple avec dessin de plancher. Cependant, si un trou se trouvait au milieu de deux planchers de cette classe, le joueur n'aurait pas pu passer avec la planche. En effet, par défaut, les terrains n'acceptent pas que l'on "pose" la planche dessus.
Pour créer un terrain tout à fait similaire à l'herbe, et donc qui accepte la planche, vous pouvez hériter de TGround.
field TWoodFloor(TGround) name 'Plancher'; image 'Fields/WoodenFloor'; end;