Procedural Generation using Constraint Satisfaction