public GameMoveType GetNextMove(GameState gameState, IGameInteractionService interactionService) { while(true) { var move = GameMoveType.None; var key = Console.ReadKey ().Key; switch(key) { // Quit the program if ESC is pressed. case ConsoleKey.Escape: if(this.GameQuitRequested != null) { this.GameQuitRequested (); } return GameMoveType.None; case ConsoleKey.UpArrow: // Arrow up = move the item below the empty space UP. move = GameMoveType.MoveItemBelow; break; case ConsoleKey.DownArrow: // Arrow down = move the item above the empty space DOWN. move = GameMoveType.MoveItemAbove; break; case ConsoleKey.LeftArrow: // Arrow left = move the item right of the empty space LEFT. move = GameMoveType.MoveItemRight; break; case ConsoleKey.RightArrow: // Arrow right = move the item left of the empty space RIGHT. move = GameMoveType.MoveItemLeft; break; default: Console.Beep (); break; } if(interactionService.CanMove(gameState.GameField, move)) { return move; } } }