J'ouvre le bal avec un code qui permet de poser un trésor à un emplacement aléatoire :
Le joueur est placé sur un effet qui posera un trésor quelque part sur l'herbe dans la zone de droite…
Voici le code :
unit TresorAleatoire;
uses
FunLabyBase;
components
PoseTresor : TPoseTresor;
function OkPourPoserTresor(Square: TSquare): Boolean private;
begin
Result := (Square.Field is TGround) and (Square.Effect = nil) and
(Square.Tool = nil) and (Square.Obstacle = nil);
end;
effect TPoseTresor
name 'Pose du trésor';
on AfterConstruction do
begin
inherited;
EditVisualTag := 'Tréso';
end;
on Exited do
var
Map : TMap;
TresorX : Integer;
TresorY : Integer;
begin
inherited;
Map := Master.Map['MainMap'];
repeat
TresorX := Random(21-11+1) + 11;
TresorY := Random(11);
until OkPourPoserTresor(Map[Point3D(TresorX, TresorY, 0)]);
Map[Point3D(TresorX, TresorY, 0)].Effect := Treasure;
Square.Effect := nil;
end;
end;
end.
- ”on Exited do“ pose le trésor dès que le joueur quitte la case où se trouve l'effet déclencheur.
- ”repeat….until" choisit une case aléatoire jusqu'à ce que les conditions définies par la fonction OkPourPoserTresor soient vraies.
- "Random(21-11+1) + 11“ donne un nombre compris entre 11 et 21, la coordonnée x du trésor, ce qui le placera exclusivement dans la zone de droite.
- ”Random(11)“ donne un nombre compris entre 0 et 10, la coordonnée y du trésor.
- ”Map(Point3D(TresorX, TresorY, 0)).Effect := Treasure;" pose le trésor aux coordonnées choisies aléatoirement.
Bien évidemment, de la même manière, il est possible de poser n'importe quel élément (terrain, effet, outil, obstacle ou même Player) sur une carte.
Puisse ce petit code permettre quelques surprises dans vos labyrinthes !!