public AiControllerInputBuilder LookForFood() { var vectorToFood = Vector2.Normalize(controllerInputs.FoodPosition - controllerInputs.SnakePositions[0]); var distance = Vector2.Distance(controllerInputs.FoodPosition, controllerInputs.SnakePositions[0]); inputs.Add(vectorToFood.X); inputs.Add(vectorToFood.Y); inputs.Add(ActivationFunctions.ExpMinusModX(distance)); return(this); }
private AiControllerInputBuilder LookInDirection(Direction direction) { var movement = direction.ToTranslation(); var currentIndex = controllerInputs.SnakePositions[0] + movement; var snakeBodyIndices = controllerInputs.SnakePositions.Skip(1); var inBounds = InBoundsConditions[direction]; var distance = 0f; while (inBounds(currentIndex, controllerInputs.GridDescription)) { if (snakeBodyIndices.Contains(currentIndex)) { break; } currentIndex += movement; distance++; } inputs.Add(ActivationFunctions.ExpMinusModX(distance)); return(this); }