takeEveryPoint :: [Point] -> Point -> Direction -> Int -> Int -> Bool -> Bool -> [Point] -> (Int, (Bool, Bool), [Point])
takeEveryPoint listOfPoint lastPoint direction count pos theLast pointsYet acc
    | not (sameDirection direction lastPoint currentPoint) = ((lessSafePos pos count), (theLast, not (theLast && pointsYet)), acc)
    | (lastPoint == realLastPoint) && (theLast == False)   = takeEveryPoint listOfPoint lastPoint direction count pos True pointsYet acc
    | otherwise                                            = takeEveryPoint listOfPoint currentPoint direction count (addSafePos pos count) theLast pointsYet (acc ++ [currentPoint])
    where
        currentPoint  = listOfPoint !! pos
        realLastPoint = listOfPoint !! (count - 1)
takeEveryPoint :: [Point] -> Point -> Direction -> Int -> Int -> Bool -> Bool -> [Point] -> (Int, (Bool, Bool), [Point])
takeEveryPoint listOfPoint lastPoint direction count pos theLast pointsYet acc
    | not (sameDirection direction lastPoint currentPoint) = ((lessSafePos pos count), (theLast, not (theLast && pointsYet)), acc)
    | (lastPoint == realLastPoint) && (theLast == False)   = takeEveryPoint listOfPoint lastPoint direction count pos True pointsYet acc
    | otherwise                                            = takeEveryPoint listOfPoint currentPoint direction count (addSafePos pos count) theLast pointsYet (acc ++ [currentPoint])
    where
        currentPoint  = listOfPoint !! pos
        realLastPoint = listOfPoint !! (count - 1)
takeEveryPoint listOfPoint lastPoint direction count pos theLast pointsYet acc
    | not (sameDirection direction lastPoint currentPoint) = ((lessSafePos pos count), (theLast, not (theLast && pointsYet)), acc)
    | (lastPoint == realLastPoint) && (theLast == False)   = takeEveryPoint listOfPoint lastPoint direction count pos True pointsYet acc
    | otherwise                                            = takeEveryPoint listOfPoint currentPoint direction count (addSafePos pos count) theLast pointsYet (acc ++ [currentPoint])
    where
        currentPoint  = listOfPoint !! pos
        realLastPoint = listOfPoint !! (count - 1)