gh/src/snake_m.pas
2026-01-15 15:50:03 +05:00

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.