private static void RunGame(IProcessor processor) { var finish = false; var result = processor.Process(GameAction.StartGame); while (!finish) { var action = GetUserAction(); Console.Clear(); result = processor.Process(action); switch (result) { case ProcessResult.None: case ProcessResult.RequestAction: break; case ProcessResult.End: finish = true; break; case ProcessResult.RequestSubAction: processor.ProcessSubAction(GetUserAction()); break; default: throw new ArgumentOutOfRangeException( "Unknown ProcessResult: " + result); } } }