This is quite a cool idea, although I did take a look at your code and found some issues.
- There are quite a few places where there's no code formatting, making it very difficult to read.
- The use of a try/catch statement for program flow is bad. There's no reason to do this. Simply use a goto statement if you want to reenter the loop.
Now, to defend the use of goto.
Using an exception is the
exact same thing as a goto in this case, except that the try/catch implies something different is going on, and ignores all real exceptions because of the
catch(...).
Yes, you could use some extra logic to handle exiting the double loop, but in the end, the simplest, and most readable solution is to have a label directly before the main while, and a goto on win.
Although the best solution would be to split the code up into separate functions such as.
- Setup
- WaitForStart
- Update - Returns a value in {continue, player_1_won, player_2_won}
Then the problem wouldn't be there to begin with

.