I'm wondering how I can refine player movement/physics values, such as speed and jump height, to make it all work, while allowing the games to be fair and challenging. Is it simply trial and error, or is there a more standardized solution?
The levels in games like Super Mario or Geometry Dash are built on uniformly sized blocks, so the movement values need to work with these blocks. For example, if Mario can only jump 5 blocks high, the developers need to ensure that no obstacle is greater than 5 blocks tall (unless Mario has some special ability, but I'm not talking about that), or the player will be stuck.
Similarly, if the developers know that Mario can only jump 6.5 blocks horizontally, a blockless pit should be, at most, 6 blocks long. Knowing these relationships would allow one to create beatable levels, and even dynamically generate obstacles for the player to traverse.
I already have a character controller that can set my movement values easily, but I'm struggling to figure out a good way to make my movement and block sizes work together. Specifically, I'm concerned about making my game too easy or hard. How do I know when I've struck a proper balance?