Before I started on the digital version of the game, I used this to perform gameplay tests, experiment with level design, and prove the value of the concept. It includes 2 game boards (one for each of the first two worlds in the game), a direction board, 10 direction pieces, 1 car token, and 3 goal tokens. All of the components are magnetic, so the prototype is playable even when attached to a wall, which came in handy since the desk space in the QA room was limited.
The final version of Global Puzzling System has 26 puzzles across 7 different road maps (I chose to use each map for multiple puzzles so players can get familiar with the layouts over time). The first two worlds focus on introducing the player to the basic challenge of guiding the car around the map using the direction board; worlds three through six each add a new mechanic to keep the player interested, including bridges, one-way roads, and new types of direction pieces; and then the final map brings everything together and ramps up the difficulty for a memorable ending challenge.
The individual puzzles within each world, meanwhile, first teach new mechanics in a pretty simple context, then gradually build in complexity. The main metric by which I constructed the difficulty curve was the number of possible direction piece permutations. The first puzzle on each road map might have just four direction pieces, meaning the complexity is minimal and the player should have little trouble figuring it out once they understand what new mechanic is being demonstrated; they can even reasonably brute-force it if they’re stuck. Later puzzles, meanwhile, may have up to seven direction pieces, creating many more possibilities and forcing the player to plan a route more deliberately.
In order to get all those levels into the game in a reasonably efficient and scalable way, I used Unity’s scriptable object system to create level data assets. Each of these specifies the road map, direction pieces, and goal positions needed for one puzzle; when the player selects a puzzle to play, a script reads the level data information and spawns the necessary objects into the scene automatically. After I implemented this system, I only needed one scene per road map, and the process of adding new puzzles and revising old ones became much faster.