A couple of years ago I had a similar assignment at university.
I would say using the state pattern is overkill for this, as well as not being entirely suited, as previously mentioned. What we did with this assignment is:
- Use something above the different modes, which allows switching between them.
- Each mode has no knowledge of the other mode, they don't make calls into each other.
- They do share knowledge of the model though (which in your case would be the pinball board, with positions of the bumpers, balls, etc.), so when you switch between them they are consistent.
- In terms of the GUI, each mode is basically given space to do it's thing. Like you say, each mode has different possible actions, so forcing them to share the same actions as part of a state pattern is "smelly".
Basically, as mentioned elsewhere, the two modes do not share enough commonality to really justify the state pattern here.
There is one possibility of applying the state pattern, which would make sense. Since it's a university assignment, there's likely to be credit for the thought and justification behind it. It is related to the "level above" I mentioned earlier. In my experience this was part of the GUI that was independent of the mode. It allowed things like closing the application, opening previous pinball configurations, and switching between the modes. What it could also do is show context dependent menu items. The state of the menus could be retrieved from the current mode. So the builder mode could include save and other builder specific actions, and the running mode could offer play/pause options. If you have spent the time investigating the state pattern, and wish for that to pay off, this would be a possible option.
P.S. Murray did seem enthusiastic about our use of design patterns at the time ;-)