I actually do something similar for touch controls using 8 direction. Same principle.
Pick a threshold (it will be an imaginary bounding box) for how close the enemies can get to the player. Say, if they get within 40 pixels of the player, they stop progressing. Otherwise, they keep moving.
This is simple to set up. In this case, we decided threshold = 40.
If player.X>enemy.X+threshold, simulate control "move right" for enemy.
If player.X< enemy.X-threshold, simulate control "move left" for enemy.
If player.Y>enemy.Y+threshold, simulate control "move down" for enemy.
If player.Y<enemy.Y-threshold, simulate control "move up" for enemy.
It will then move up, down, left, right, and any combination of those directions until it is within your threshold (40 pixels here). That way, they won't bunch up and overlap the player. You can have whatever offset you want.