I'm investigating the prospect of being able to randomly generate puzzles at an initially simple but scalable level. The objects to work with include:
- A set of geometric primitives (floors, boxes, cylinders, inclines, stairs)
- Lasers and mirrors
- Simple pulleys
- Circuits and batteries
- Gears
- Wind power and mini-blimps (ties into circuits)
- Marbles and marble tracks
- Dominoes
The way I figure things, a puzzle should be expressible as a tree where each node has a solution whereby all of its dominoes are adjacent, and the solution is dictated by actions of itself(?) and its children. In the picture above, the puzzle is actually pretty basic: You have four objects, and you have to figure out where they go. So you'd have a tree with one root node and four leaf nodes. Once the leaves are all solved by the objects being placed in the gaps, the root node is thereby solved and you can knock over the first domino to win the game. Of course there's the matter of how to physically build the puzzle. You could have countless puzzles that are solved by having four gaps filled in with key objects. I'm drawing a blank on where to begin there so far because there's so much to consider: Things like differences in altitude when stairs get involved, the fact that puzzles are not straight lines but wind about and have intersections, deciding how random generation outcomes dictate undefined parts of the set or should be bounded by existing parts of the set, etc.
A friend of mine suggested I look into "L-Systems" (L-system on Wikipedia). I haven't looked at it yet, so I'll check it out and see if that gets me anywhere.
If anyone is aware of existing tech or articles that could accomplish random physics puzzle generation like this, let me know! Otherwise I may reply to myself if I find things to help other developers who stumble upon this thread.