public override bool TryMove(Field <IAnimal> field, out Vector nextMove) { if (!TryDecreaseHealth()) { nextMove = new Vector(); return(false); } PerformMating(field); var vectorsLionToAntelope = CollectVectorsFromNearbyLions(field); if (vectorsLionToAntelope.Count > 0) { nextMove = _borderChecker.FitVectorIntoBorders(field.Size, Position, CalculateMoveByNearbyLions(vectorsLionToAntelope)); } else { nextMove = _randomMoveCalculator.GetFreePositionsAndCalculate(Position, field); } var p = Position + nextMove; return(field[p.X, p.Y] == null); }
public void AdjustPosition(Field <IAnimal> field, IAnimal animal, Vector nextMove) { nextMove = _borderChecker.FitVectorIntoBorders(_field.Size, animal.Position, nextMove); var nextPosition = animal.Position + nextMove; if (field[nextPosition.X, nextPosition.Y] != null) { return; } field[animal.Position.X, animal.Position.Y] = null; field[nextPosition.X, nextPosition.Y] = animal; animal.Position = nextPosition; }