Le jeu de labyrinthe fun et gratuit - Retour au site
unit PassageTemporise;
uses
FunLabyBase;
messages
SortieBloquee : TPlayerMessage = 123;
components
GoTimer : TGoTimer;
SortieBloqueePlugin : TSortieBloqueePlugin;
effect TGoTimer
name 'Déclencheur compte à rebours';
on AfterConstruction do
begin
inherited;
EditVisualTag := 'Go';
end;
on Execute do
begin
inherited;
Master.Timers.ScheduleNotificationMsg(4500, Player, msgSortieBloquee); //---ici le 4500 = 4.5 secondes !
end;
end;
plugin TSortieBloqueePlugin
hint 'plugin qui bloque la sortie';
on message SortieBloquee do
begin
Master.Map['MainMap'].Map[4, 0, 0].Field := Wall;
end;
end;
end.
Modifié DerF_44 (nov. 13, 2012 21:04:42)
Hors-ligne
Hors-ligne
Hors-ligne
NbAleatoire2 := Random(54)+1; //---Donne un nombre compris entre 1 et 54 inclus.
NbAleatoire1 := Random(54-0+1)+0; //---Donne un nombre compris entre 0 et 54 inclus (=Random(54) ?)
NbAleatoire3 := Random(54-14+1)+14; //---Donne un nombre compris entre 14 et 54 inclus.
if Random > 0.5 then
Player.ShowMessage('Pile !')
else
Player.ShoMessage('Face !'); //---Jeu du pile ou face (une chance sur deux).
Hors-ligne
De manière générale :
- Random(N) avec N un entier > 0 donne un nombre compris entre 0 inclus
et N exclu, que je note [0, N[ (où de manière équivalente,
entre 0 et N-1 inclus, que je note [0, N-1]).
- Random sans paramètre donne un nombre flottant compris entre 0 inclus
et 1 exclu, donc [0, 1[.
On peut donc en conclure :
- Random(54)+1 = [0, 54[ + 1 = [1, 55[ = [1, 54]
- Random(54-0+1)+0 = Random(55)+0 = [0, 55[ + 0 = [0, 55[ = [0, 54]
- qui n'est pas égal à Random(54) = [0, 54[ = [0, 53]
- Random(54-14+1)+14 = Random(41)+14 = [0, 41[ + 14 = [14, 55[ = [14, 54]
Plus généralement, étant donné L et H des nombres entiers avec L <= H :
- Random(H-L+1)+L = [0, H-L+1[ + L = [L, (H-L+1)+L[ = [L, H+1[ = [L, H]
Pour le pile ou face, en fait il faudrait mettre Random >= 0.5 (et non >)
car ainsi on divise l'intervale [0, 1[ en [0, 0,5[ et [0,5, 1[.
Modifié sjrd (nov. 18, 2012 11:22:12)
Hors-ligne
Random(B-A+1) + A;
Random(100-50+1) + 50;
Random(6) + 1;
Hors-ligne
Hors-ligne
Hors-ligne
unit PortesSurprises;
uses
FunLabyBase;
messages
MurFerme : TPlayerMessage = 101;
components
GoTimer1 : TGoTimer1;
GoTimer2 : TGoTimer2;
GoTimer3 : TGoTimer3;
GoTimer4 : TGoTimer4;
GoTimer5 : TGoTimer5;
GoTimer6 : TGoTimer6;
GoTimer7 : TGoTimer7;
MursPlugin : TMursPlugin;
effect TGoTimer1
name 'Go1';
property MurY : Integer;
on AfterConstruction do
begin
inherited;
EditVisualTag := 'Départ';
end;
on Exited do
var
Map : TMap;
begin
inherited;
MurY := Random(9);
Map := Master.Map['MainMap'];
Map[1, MurY, 0] := Grass+GoTimer2;
Master.Timers.ScheduleNotificationMsg(1500, Player, msgMurFerme);
Square.Effect := nil;
end;
end;
effect TGoTimer2
name 'Go2';
property MurY : Integer;
on Exited do
var
Map : TMap;
begin
inherited;
MurY := Random(9);
Map := Master.Map['MainMap'];
Map[3, MurY, 0] := Grass+GoTimer3;
Master.Timers.ScheduleNotificationMsg(1500, Player, msgMurFerme);
Square.Effect := nil;
end;
end;
//--------
//--------etc etc jusqu'à effect TGoTimer7 où seule la ligne "Map[3, MurY, 0] := Grass+GoTimer3;" change,
//--------le X s'incrémentant de 2 à chaque fois, et le Grass+GoTimerN de 1...
//--------
plugin TMursPlugin
hint 'Plugin des murs';
property MurX : Integer;
on AfterConstruction do
begin
MurX := -1;
end;
on message MurFerme do
var
Map : TMap;
I : Integer;
begin
MurX := MurX + 2;
Map := Master.Map['MainMap'];
Player.PlaySound('Explosion.wav');
for I := 0 to 8 do
begin
Map[MurX, I, 0].Field := Wall;
end;
end;
end;
end.
Hors-ligne
components
GoTimer7: TGoTimer
MurX: 13;
end;
GoTimer6: TGoTimer
MurX: 11;
NextGoTimer: GoTimer7;
end;
...
GoTimer1: TGoTimer
MurX: 1;
NextGoTimer: GoTimer2;
end;
effect TGoTimer
name 'Go';
property MurX: Integer;
property MurY: Integer;
property NextGoTimer: TGoTimer;
on Exited do
var
Map : TMap;
begin
inherited;
MurY := Random(9);
Map := Master.Map['MainMap'];
Map[MurX, MurY, 0] := Grass+NextGoTimer;
Master.Timers.ScheduleNotificationMsg(1500, Player, msgMurFerme);
Square.Effect := nil;
end;
end;
Hors-ligne