Turtle Graphics- Process terminated due to stackOberflowException : I am trying to prepare a Turtle graphics solution in C#. Everything is working fine but it ends in Process Terminated due to StackOverflowException. I checked [this][1]
and 
[this][2]
where the issue is of getter setter or infinite loop. But I dont have any of this condition in my code. I am a newbie in C#. 
Below is my code. 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TurtleGraphics
    {
        class Program
        {/**
    	 * Directions: 0 right, 1 down, 2 left, 3 up
    	 */
            private static short direction = 0;
            private static bool penDown;
            private static int turtleX = 0, turtleY = 0;
            private static int[,] floor = new int[20, 20];
    
    
            public static void Main(String[] args)
            {
                initFloor(floor);
                //Scanner in = new Scanner(System.in);
                printMenu();
                int nextCommand = int.Parse(Console.ReadLine());
                while (nextCommand != 9)
                {
                    switch (nextCommand)
                    {
                        case 1:
                            penDown = false;
                            break;
                        case 2:
                            penDown = true;
                            break;
                        case 3:
                            direction++;
                            break;
                        case 4:
                            direction--;
                            break;
                        case 5:
                            Console.WriteLine("How many steps do you want to move?");
                            int move = int.Parse(Console.ReadLine());
                            if (move <= 10)
                                while (--move != 0)
                                 Moves();
                            break;
                        case 6:
                            printArray();
                            break;
                        default:
                            Console.WriteLine("Unknow command, please try again:\n");
                            break;
                    }
                    Moves();
                    Console.WriteLine("What's next?");
                    nextCommand = int.Parse(Console.ReadLine());
                }
            }
    
            private static void initFloor(int[,] floor)
            {
                for (int i = 0; i < floor.GetLength(0); i++)
                {
                    for (int j = 0; j < floor.GetLength(1); j++)
                    {
                        floor[i,j] = 0;
                    }
                }
            }
    
            private static void printMenu()
            {
                Console.WriteLine("Commands List:\n\n\t1 Pen up\n"
                            + "\t2 Pen down\n"
                            + "\t3 Turn right\n"
                            + "\t4 Turn left\n"
                            + "\t5 to 10 Move forward 10 spaces (replace 10 for a different number of spaces)\n"
                            + "\t6 Display the 20-by-20 array\n"
                            + "\t9 End of data (sentinel)Please enter a command number:\n");
            }
    
            private static void printArray()
            {
                for (int i = 0; i < floor.GetLength(0); i++)
                {
                    for (int j = 0; j < floor.GetLength(1); j++)
                    {
                        // Console.WriteLine(floor[i, j]);
                        // Console.WriteLine("  ");
                        if (floor[i, j] == 0)
                            Console.Write(".");
                        else if (floor[i, j] == 1)
                            Console.Write("*");
                        else if (floor[i, j] == 2)
                            Console.Write("T");
                    
                }
                    Console.WriteLine();
                }
            }
    
            private static void Moves()
            {
                switch (direction)
                {
                    case 0:
                        turtleX++;
                        break;
                    case 1:
                        turtleY++;
                        break;
                    case 2:
                        turtleX--;
                        break;
                    case 3:
                        turtleY--;
                        break;
                    default:
                        if (direction < 0)
                            direction = 3;
                        else
                            direction = 4;
                        Moves();
                        break;
                }
                if (penDown)
                {
                    if (turtleX < 20 && turtleY < 20)
                        floor[turtleX, turtleY] = 1;
                    else
                    {
                        direction -= 2;
                        Moves();
                    }
                }
    
            }
        }
    }

Any quick help is appreciated. Thanks

  [1]: https://stackoverflow.com/questions/26016613/getting-infinite-loop-issue-process-terminated-due-to-stackoverflowexception
  [2]: https://stackoverflow.com/questions/46520739/c-sharp-process-is-terminated-due-to-stackoverflowexception
