-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenemiesunit.pas
104 lines (85 loc) · 2.85 KB
/
enemiesunit.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
unit enemiesUnit;
interface
uses drawunit;
const
ENEMY_MOVE_TIME = 200;
var
delayEnemyMovement : Integer;
procedure updateEnemy(Xboule, Yboule: Integer; var plate: Plateau);
implementation
function isMurInFace(Xboule, Yboule: Integer; var xInc : Integer; var yInc : Integer; var plate : Plateau) : Boolean;
begin
xInc := 0;
yInc := 0;
case plate.cases[Yboule, Xboule].dir of
haut :
begin
if (plate.cases[Yboule - 1, Xboule].index = 'R') then
begin
isMurInFace := False;
yInc := -1;
end
else
isMurInFace := True;
end;
bas :
begin
if (plate.cases[Yboule + 1, Xboule].index = 'R') then
begin
isMurInFace := False;
yInc := 1;
end
else
isMurInFace := True;
end;
gauche :
begin
if (plate.cases[Yboule, Xboule - 1].index = 'R') then
begin
isMurInFace := False;
xInc := -1;
end
else
isMurInFace := True;
end;
droite :
begin
if (plate.cases[Yboule, Xboule + 1].index = 'R') then
begin
isMurInFace := False;
xInc := 1;
end
else
isMurInFace := True;
end;
else isMurInFace := True;
end;
end;
procedure updateEnemy(Xboule, Yboule: Integer; var plate: Plateau);
var
xInc : Integer = 0;
yInc : Integer = 0;
begin
delayEnemyMovement += TICK_INTERVAL;
if (delayEnemyMovement >= ENEMY_MOVE_TIME) then
begin
while isMurInFace(Xboule, Yboule, xInc, yInc, plate) do
case plate.cases[Yboule, Xboule].dir of
haut : plate.cases[Yboule, Xboule].dir := gauche;
bas : plate.cases[Yboule, Xboule].dir := droite;
gauche : plate.cases[Yboule, Xboule].dir := bas;
droite : plate.cases[Yboule, Xboule].dir := haut;
end;
plate.cases[Yboule + yInc, Xboule + xInc].dir := plate.cases[Yboule, Xboule].dir;
plate.cases[Yboule + yInc, Xboule + xInc].index := 'E';
plate.cases[Yboule, Xboule].index := 'R';
case plate.cases[Yboule + yInc , Xboule + xInc].dir of
haut : if plate.cases[Yboule + yInc, Xboule + 1 + xInc].index = 'R' then plate.cases[Yboule + yInc, Xboule + xInc].dir := droite;
bas : if plate.cases[Yboule + yInc, Xboule - 1 + xInc].index = 'R' then plate.cases[Yboule + yInc, Xboule + xInc].dir := gauche;
gauche : if plate.cases[Yboule - 1 + yInc, Xboule + xInc].index = 'R' then plate.cases[Yboule + yInc, Xboule + xInc].dir := haut;
droite : if plate.cases[Yboule + 1 + yInc, Xboule + xInc].index = 'R' then plate.cases[Yboule + yInc, Xboule + xInc].dir := bas;
end;
delayEnemyMovement := 0;
end;
end;
end.