57 lines
1.1 KiB
ObjectPascal
57 lines
1.1 KiB
ObjectPascal
|
|
unit snake_m;
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses creature_m;
|
||
|
|
|
||
|
|
procedure UpdateSnakeState(var s: creature);
|
||
|
|
procedure InitRandomSnake(var s: creature);
|
||
|
|
|
||
|
|
const
|
||
|
|
SnakeMovespeed = 2;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
uses arena_m, Math, math_m;
|
||
|
|
|
||
|
|
const
|
||
|
|
MinToReverse = 2;
|
||
|
|
MaxToReverse = 75;
|
||
|
|
|
||
|
|
procedure InitSnake(var s: creature; x, y, sigdx, sigdy: integer);
|
||
|
|
begin
|
||
|
|
s.t := creatureSnake;
|
||
|
|
s.curX := x;
|
||
|
|
s.curY := y;
|
||
|
|
s.dX := SnakeMovespeed * sigdx;
|
||
|
|
s.dY := SnakeMovespeed * sigdy;
|
||
|
|
s.alive := true;
|
||
|
|
s.moveSpeed := SnakeMovespeed;
|
||
|
|
s.beforeReverse := RandomLR(MinToReverse, MaxToReverse);
|
||
|
|
s.diagonalMove := false
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure InitRandomSnake(var s: creature);
|
||
|
|
var
|
||
|
|
x, y, sigdx, sigdy: integer;
|
||
|
|
begin
|
||
|
|
sigdx := IfThen(RandomBool, 1, -1);
|
||
|
|
sigdy := IfThen(RandomBool, 1, -1);
|
||
|
|
x := RandomLR(2, ArenaW - 1);
|
||
|
|
y := RandomLR(2, ArenaH - 1);
|
||
|
|
InitSnake(s, x, y, sigdx, sigdy)
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure UpdateSnakeState(var s: creature);
|
||
|
|
begin
|
||
|
|
s.beforeReverse := s.beforeReverse - 1;
|
||
|
|
if s.beforeReverse = 0 then
|
||
|
|
begin
|
||
|
|
s.beforeReverse := RandomLR(MinToReverse, MaxToReverse);
|
||
|
|
s.dX := s.dX * -1;
|
||
|
|
s.dY := s.dY * -1
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|