Software design patterns for enabling auto dynamic difficulty in video games | Synapse