There are lots of ways you could accomplish this, I'll just give you one to get started.
Attach this script to a gameobject, and give it another gameobject as target to follow. Uncomment line 29 if you're using a top-down view.
public class AssassinMove : MonoBehaviour
public Transform target;
[Range(0, 10)] public float speed;
Use random events which are not actually that random.
When the player is losing the game, throw them a bone by giving them a "random" event which lets them catch up.
When there is nothing left which can stop the player from winning and the game becomes just a matter of playing down the clock, then give them a "random" event which creates ...