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.