Hmm... well, the way I code my games is to have a "system" variable which tracks which primary system to run code through. If the system variable changes, then the next time there's a system loop it will run completely different code. For a splash screen, the simplest thing to do is create an entirely separate code section just for it, then jump to your game code following. At the moment, everything you do is in main(), whereas my main() simply calls init code then runs a while() + switch() loop, accessing various system functions depending on the system variable state until I set the system variable to a shutdown state, which exits the while() loop and calls all the shutdown functions.
Kinda like this pseudocode:
while (system_state != SYS_SHUTDOWN) switch (system_state)
case SYS_SPLASHSCREEN: RunSplashScreen(); break;
case SYS_MAINMENU: RunMainMenu(); break;
case SYS_OPTIONSMENU: RunOptions(); break;
case SYS_RUNGAME: RunGame(); break;
For a screenshot function, just keep a numerical variable going to add onto your screenshot's filename and advance it every time you save a screen. Before you actually save the screenshot, check if the file exists. If it does, add the variable up by 1 and check again. Most screenshot functions are attached to the F12 Key, though the Print Screen key works too, keeping in mind that Windows will take a screenshot itself and put it in the clipboard when you press that key.
As for high scores, this is going to depend on a number of factors. If you want your game to have joystick/gamepad support you should show a screen of letter selectors that you can move through with the joystick/gamepad, or even the arrow keys on the keyboard, though you should still detect actual alphanumeric keypresses. I'd only go with initials if you intend this game to feel like an arcade game, otherwise have at least 8 characters allowed. Top 20 takes a lot of screen space and can actually look less impressive than a Top 10, but this is more a matter of preference really.