示例#1
0
 public void position_GetRow_TEST()
 {
     SnakeGame.Position p = new SnakeGame.Position(3, 5);
     // int r = 3;
     // int c = 5;
     //Assert.AreEqual(5, p.Ge);
     Assert.AreEqual(3, p.GetRow);
 }
示例#2
0
        static void Main(string[] args)
        {
            Console.BufferHeight = Console.WindowHeight;
            Console.BufferWidth = Console.WindowWidth;
            Position[] directions = new Position[]
                {
                new Position(0,1), //right
                new Position(0,-1), //left
                new Position(1,0), //down
                new Position(-1,0), //up
                };

            Random randomNum = new Random();

            Position food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));

            Console.WriteLine("*******Snake Game********\n\nControl the snake with the arrow keys\nPause the game with spacebar\n"+
            "If you go overboard - GameOver!\nKeep playing there are some surprises! :)\n\n\nPress Enter to start the game");
            ConsoleKeyInfo startSignal = Console.ReadKey();
            if (startSignal.Key == ConsoleKey.Enter)
            {
                Queue<Position> snakeElements = new Queue<Position>();
                for (int i = 0; i < 5; i++)
                {
                    snakeElements.Enqueue(new Position(0, i));
                }

                foreach (Position position in snakeElements)
                {
                    Console.SetCursorPosition(position.col, position.row);
                    Console.Write('*');
                }

                int direction = 0;
                int delay = 0;
                int foodCounter = 0;
                while (true)
                {
                    if (Console.KeyAvailable)
                    {
                        ConsoleKeyInfo input = Console.ReadKey();
                        if (input.Key == ConsoleKey.RightArrow)
                        {
                            direction = 0;
                        }
                        if (input.Key == ConsoleKey.LeftArrow)
                        {
                            direction = 1;
                        }
                        if (input.Key == ConsoleKey.DownArrow)
                        {
                            direction = 2;
                        }
                        if (input.Key == ConsoleKey.UpArrow)
                        {
                            direction = 3;
                        }
                        if (input.Key == ConsoleKey.Spacebar)
                        {
                            Console.SetCursorPosition(0, Console.WindowHeight / 2);
                            Console.WriteLine("Your current score is {0}!\n To resume the game press spacebar again.", foodCounter);
                            input = Console.ReadKey();
                            while (input.Key != ConsoleKey.Spacebar)
                            {
                                input = Console.ReadKey();
                            }
                        }
                    }
                    snakeElements.Dequeue();
                    Position snakeHead = snakeElements.Last();
                    Position nextDirection = directions[direction];
                    Position snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                    snakeElements.Enqueue(snakeNewHead);

                    Console.Clear();
                    Console.SetCursorPosition(food.col, food.row);
                    Console.Write("@");

                    if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                    {
                        snakeElements.Enqueue(snakeNewHead);
                        food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                        foodCounter++;
                        if (foodCounter % 2 == 0)
                        {
                            delay += 10;
                            Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                            Console.WriteLine("New Speed -10ms");
                            Thread.Sleep(500);
                        }
                    }
                    if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight + 1 || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth + 1)
                    {
                        Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                        Console.WriteLine("Game Over! Your score is {0}", foodCounter);
                        Console.ReadKey();
                        break;
                    }
                    if (foodCounter >= 1)
                    {
                        Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                        Console.WriteLine("OH SNAP! A second snake appeared!");
                        Thread.Sleep(500);
                        Queue<Position> secondSnakeElements = new Queue<Position>();
                        for (int i = 1; i < 10; i++)
                        {
                            secondSnakeElements.Enqueue(new Position(1, i));
                        }

                        foreach (Position position in secondSnakeElements)
                        {
                            Console.SetCursorPosition(position.col, position.row);
                            Console.Write('#');
                        }
                        bool hitCeiling = false;
                        bool hitFloor = false;
                        bool hitLeftWall = false;
                        bool hitRightWall = false;

                        while (true)
                        {
                            if (Console.KeyAvailable)
                            {
                                ConsoleKeyInfo input = Console.ReadKey();
                                if (input.Key == ConsoleKey.RightArrow)
                                {
                                    direction = 0;
                                }
                                if (input.Key == ConsoleKey.LeftArrow)
                                {
                                    direction = 1;
                                }
                                if (input.Key == ConsoleKey.DownArrow)
                                {
                                    direction = 2;
                                }
                                if (input.Key == ConsoleKey.UpArrow)
                                {
                                    direction = 3;
                                }
                                if (input.Key == ConsoleKey.Spacebar)
                                {
                                    Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                    Console.WriteLine("Your current score is {0}!\n To resume the game press spacebar again.", foodCounter);
                                    input = Console.ReadKey();
                                    while (input.Key != ConsoleKey.Spacebar)
                                    {
                                        input = Console.ReadKey();
                                    }
                                }
                            }
                            snakeElements.Dequeue();
                            snakeHead = snakeElements.Last();
                            nextDirection = directions[direction];
                            snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                            snakeElements.Enqueue(snakeNewHead);

                            int secondDirection = 0;
                            secondDirection = randomNum.Next(0, 3);
                            secondSnakeElements.Dequeue();
                            Position secondSnakeHead = secondSnakeElements.Last();
                            Position secondSnakeNewHead = new Position();
                            Position nextSecondDirection = directions[secondDirection];
                            if (hitCeiling == false && hitFloor == false && hitLeftWall == false && hitRightWall == false)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                            }
                            if (hitCeiling)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + 1 + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                                hitCeiling = false;
                            }
                            if (hitFloor)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row-1 + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                                hitFloor = false;
                            }
                            if (hitLeftWall)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col+1 + nextSecondDirection.col);
                                hitLeftWall = false;
                            }
                            if (hitRightWall)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col-1 + nextSecondDirection.col);
                                hitRightWall = false;
                            }
                            secondSnakeElements.Enqueue(secondSnakeNewHead);

                            Console.Clear();
                            Console.SetCursorPosition(food.col, food.row);
                            Console.Write("@");

                            if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                            {
                                snakeElements.Enqueue(snakeNewHead);
                                food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                                foodCounter++;
                                if (foodCounter%3 == 0)
                                {
                                    delay += 10;
                                    Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                    Console.WriteLine("New Speed -10ms");
                                    Thread.Sleep(500);
                                }
                            }
                            if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight + 1 || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth + 1)
                            {
                                Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                //Console.WriteLine("Game Over! Your score is {0}", foodCounter);
                                //Console.ReadKey();
                                goto breakout;
                            }

                            foreach (Position position in snakeElements)
                            {
                                Console.SetCursorPosition(position.col, position.row);
                                Console.Write('*');
                            }

                            if (secondSnakeNewHead.row == 0)
                            {
                                hitCeiling = true;
                            }
                            if (secondSnakeNewHead.row == Console.WindowHeight-1)
                            {
                                hitFloor = true;
                            }
                            if (secondSnakeNewHead.col == 0)
                            {
                                hitLeftWall = true;
                            }
                            if (secondSnakeNewHead.col == Console.WindowWidth-1)
                            {
                                hitRightWall = true;
                            }
                            foreach (Position position in secondSnakeElements)
                               {
                               Console.SetCursorPosition(position.col, position.row);
                               Console.Write('#');

                               }
                            Thread.Sleep(70 - delay);
                        } //closing the inner while (true) cycle
                    }

                    foreach (Position position in snakeElements)
                    {
                        Console.SetCursorPosition(position.col, position.row);
                        Console.Write('*');
                    }
                    Thread.Sleep(70 - delay);

                }//closing outer while (true) cycle
            breakout: Console.WriteLine("Game Over! Your score is {0}", foodCounter);
                      Console.ReadKey();
            }
        }
示例#3
0
        static void Main()
        {
            byte right = 0; // the numbers are == index of the array directions
            byte left = 1;
            byte down = 2;
            byte up = 3;
            int lastFoodTime = 0;
            int foodDissapearTime = 7000;
            int negativePoints = 0;

            // Environment.TickCount
            // DateTime.Now can be used also
            Position[] directions = new Position[]
            {
                new Position(0, 1),  // right == [1] array element
                new Position(0, -1), // left  == [2] array element
                new Position(1, 0),  // down  == [3] array element
                new Position(-1, 0), // up    == [4] array element
            };
            double sleepTime = 100;

            int direction = right; // current snake direction
            Random randomNumbersGenerator = new Random();
            Console.BufferHeight = Console.WindowHeight;
            Console.BufferWidth = Console.WindowWidth;
            lastFoodTime = Environment.TickCount;

            List<Position> obstacles = new List<Position>() //creating obstacles
            {
                new Position(12, 12),
                new Position(14, 20),
                new Position(5, 20),
            };

            foreach (Position obstacle in obstacles) // print them
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.SetCursorPosition(obstacle.col, obstacle.row);
                Console.Write("=");
            }

            Queue<Position> snakeElements = new Queue<Position>();
            for (int i= 0; i <= 5; i++)
            {
                snakeElements.Enqueue(new Position(0, i));
            }

            Position food;

            do
            {
                food = new Position(randomNumbersGenerator.Next(0, Console.WindowHeight),
                randomNumbersGenerator.Next(0, Console.WindowWidth));
            }
            while(snakeElements.Contains(food) || obstacles.Contains(food));

            Console.SetCursorPosition(food.col, food.row);
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.Write("@");

            foreach (Position position in snakeElements)
            {
                Console.SetCursorPosition(position.col, position.row);
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.Write("*");
            }

            while (true)
            {
                negativePoints++;

                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo userInput = Console.ReadKey();

                    if (userInput.Key == ConsoleKey.LeftArrow)
                    {
                       if(direction != right) direction = left; // first elemnent of our array - directions
                    }
                    if (userInput.Key == ConsoleKey.RightArrow)
                    {
                        if (direction != left) direction = right; // using if, we are stoppping the snake to
                    }                                             // pass through itself
                    if (userInput.Key == ConsoleKey.UpArrow)
                    {
                        if (direction != down) direction = up;
                    }
                    if (userInput.Key == ConsoleKey.DownArrow)
                    {
                        if (direction != up) direction = down ;
                    }
                }

                Position snakeHead = snakeElements.Last(); // old snake head
                Position nextDirection = directions[direction];
                Position snakeNewHead = new Position(snakeHead.row + nextDirection.row,
                    snakeHead.col + nextDirection.col);

                if (snakeNewHead.col < 0) snakeHead.col = Console.WindowWidth - 1;   // lets the snake
                if (snakeNewHead.row < 0) snakeHead.row = Console.WindowHeight - 1;  // pass the window's
                if (snakeNewHead.row >= Console.WindowHeight) snakeNewHead.row = 0;  // borders
                if (snakeNewHead.col >= Console.WindowWidth) snakeNewHead.col = 0;    // error top and left

                if (snakeElements.Contains(snakeNewHead) || obstacles.Contains(snakeNewHead))
                {
                    Console.SetCursorPosition(0, 0);
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Game over!");
                    int userPoints = (snakeElements.Count - 6) * 100 - negativePoints;
                    if (userPoints < 0) userPoints = 0;
                    Console.WriteLine("Your points are: {0}", userPoints);
                    return;
                }

                Console.SetCursorPosition(snakeHead.col, snakeHead.row);
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.Write("*");

                snakeElements.Enqueue(snakeNewHead);
                Console.SetCursorPosition(snakeNewHead.col, snakeNewHead.row);
                Console.ForegroundColor = ConsoleColor.Gray;
                if (direction == right) Console.Write(">"); //the head of the snake
                if (direction == left) Console.Write("<");
                if (direction == up) Console.Write("^");
                if (direction == down) Console.Write("v");

                if (snakeNewHead.col == food.col && snakeNewHead.row == food.row)
                {
                    // feeding the snake - generate apple
                    do
                    {
                        food = new Position(randomNumbersGenerator.Next(0, Console.WindowHeight),
                            randomNumbersGenerator.Next(0, Console.WindowWidth));
                    }
                    while(snakeElements.Contains(food) || obstacles.Contains(food)); // check if food
                    lastFoodTime = Environment.TickCount;                            // and obstacles
                    Console.SetCursorPosition(food.col, food.row);                   // are drawn over
                    Console.ForegroundColor = ConsoleColor.Yellow;                   // the snake's body
                    Console.Write("@");
                    sleepTime--;

                    Position obstacle = new Position();
                        do
                        {
                            obstacle = new Position(randomNumbersGenerator.Next(0, Console.WindowHeight),
                            randomNumbersGenerator.Next(0, Console.WindowWidth));
                        }
                        while(snakeElements.Contains(obstacle) ||
                            obstacles.Contains(obstacle) ||
                            (food.col != obstacle.col && food.row != obstacle.row));
                    obstacles.Add(obstacle);
                    Console.SetCursorPosition(obstacle.col, obstacle.row);
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write("=");
                }
                else
                {
                    // moving...
                    Position last = snakeElements.Dequeue();
                    Console.SetCursorPosition(last.col, last.row);
                    Console.Write(" ");
                }

                if (Environment.TickCount - lastFoodTime >= foodDissapearTime)
                {
                    negativePoints = negativePoints + 50;
                    Console.SetCursorPosition(food.col, food.row);
                    Console.Write(" ");

                     do
                    {
                        food = new Position(randomNumbersGenerator.Next(0, Console.WindowHeight),
                            randomNumbersGenerator.Next(0, Console.WindowWidth));
                    }
                     while (snakeElements.Contains(food) || obstacles.Contains(food));
                    lastFoodTime = Environment.TickCount;
                }

                Console.SetCursorPosition(food.col, food.row);
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("@"); // code always providing 'apple'

                sleepTime -= 0.01;
                Thread.Sleep((int)sleepTime);
            }
        }
        static void Main()
        {
            #region InitializeConsoleWindowSize

            Console.SetWindowSize(Window_Width, Window_Height);
            Console.BufferHeight = Console.WindowHeight;
            Console.BufferWidth = Console.WindowWidth;

            #endregion

            #region InitializeGameElements

            int initialRowOfSnake = Window_Height / 2;
            int initialColoumOfSnake = Window_Width / 2;

            Direction currentDirection = initialDirection;
            int curentSnakeSpeed = initialSnakeSpeed;

            Queue<Position> snake = new Queue<Position>();

            for (int i = 0; i < initialSnakeLength; i++)
            {
                snake.Enqueue(new Position(initialColoumOfSnake + i, initialRowOfSnake));
            }

            Position snakeFood = GenerateFood();
            DrawSingleElement(snakeFood, foodSymbol);

            DrawBorderElement();

            Position snakeHead;
            Position snakeTail;
            Position headingOfSnake;
            Position newSnakeHead;

            #endregion

            #region Directions

            Position[] directions = new Position[]
            {
                new Position(-1, -1), //NorthWest
                new Position(0, -1), // North
                new Position(1, -1), //NorthtEast
                new Position(-1, 0), //West
                new Position(1, 0), //East
                new Position(-1, 1), //SouthWest
                new Position(0, 1), //South
                new Position(1, 1) //SouthEast
            };

            #endregion

            while (true)
            {
                if (Console.KeyAvailable)
                {
                    currentDirection = ReadKeyFromKeyboard(currentDirection);
                    DrawSingleElement(new Position(1 + curentLevel.Length, 1), spaceSymbol);
                }

                snakeHead = snake.Last();
                headingOfSnake = directions[(int)currentDirection];

                newSnakeHead = new Position(
                    snakeHead.Column + headingOfSnake.Column,
                    snakeHead.Row + headingOfSnake.Row
                );

                #region GameOverLogic

                if (newSnakeHead.Column < 1 ||
                    newSnakeHead.Row < 1 ||
                    newSnakeHead.Column >= Console.WindowWidth - 1 ||
                    newSnakeHead.Row >= Console.WindowHeight - 1 ||
                    snake.Contains(newSnakeHead))
                {
                    Console.Clear();

                    DrawSingleElement(new Position(initialColoumOfSnake - 3, initialRowOfSnake - 3),
                        "Game Over!");
                    DrawSingleElement(new Position(initialColoumOfSnake - 5, initialRowOfSnake - 1),
                        String.Format("Level reached: {0}", gameLevel));
                    DrawSingleElement(new Position(initialColoumOfSnake - 7, initialRowOfSnake),
                        "(Press Esc to exit)");

                    ConsoleKeyInfo exitKey = Console.ReadKey();

                    while (exitKey.Key != ConsoleKey.Escape)
                    {
                        exitKey = Console.ReadKey();
                    }
                    return;
                }

                #endregion

                #region SnakeGrowingLogic

                if (newSnakeHead == snakeFood)
                {
                    snakeFood = GenerateFood();
                    DrawSingleElement(snakeFood, foodSymbol);

                    if (curentSnakeSpeed > maxSnakeSpeed)
                    {
                        curentSnakeSpeed -= speedFactor;
                        gameLevel++;
                    }
                }

                else
                {
                    snakeTail = snake.Dequeue();
                    DrawSingleElement(snakeTail, spaceSymbol);

                }

                snake.Enqueue(newSnakeHead);

                #endregion

                DrawSnakeElement(snake);
                curentLevel = String.Format("Level:{0}", gameLevel);
                DrawSingleElement(new Position(1, 1), curentLevel);

                Thread.Sleep(curentSnakeSpeed);
            }
        }
 private static void DrawSingleElement(Position positionOfElement, string str)
 {
     Console.SetCursorPosition(positionOfElement.Column, positionOfElement.Row);
     Console.Write(str);
 }
示例#6
0
        static void Main(string[] args)
        {
            Console.BufferHeight = Console.WindowHeight;
            Console.BufferWidth = Console.WindowWidth;
            Position[] directions = new Position[]
                {
                new Position(0,1), //right
                new Position(0,-1), //left
                new Position(1,0), //down
                new Position(-1,0), //up
                };

            Random randomNum = new Random();

            Position food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
            Console.WriteLine();
            Console.WriteLine("*******  Snake Game  ********\n\nControl the snake with the arrow keys\n\nPause the game with spacebar\n\n" +
            "If you go overboard - GameOver!\n\nKeep playing there are some surprises! :)\n\n\n\n\n\nPress Enter to start the game");
            ConsoleKeyInfo startSignal = Console.ReadKey();
            if (startSignal.Key == ConsoleKey.Enter)
            {
                Queue<Position> snakeElements = new Queue<Position>();
                for (int i = 0; i < 5; i++)
                {
                    snakeElements.Enqueue(new Position(0, i));
                }

                foreach (Position position in snakeElements)
                {
                    Console.SetCursorPosition(position.col, position.row);
                    Console.Write('*');
                }

                int direction = 0;
                int delay = 0;
                int foodCounter = 0;
                int enemyFoodCounter = 0;
                while (true)
                {
                    if (Console.KeyAvailable)
                    {
                        ConsoleKeyInfo input = Console.ReadKey();
                        if (input.Key == ConsoleKey.RightArrow)
                        {
                            direction = 0;
                        }
                        if (input.Key == ConsoleKey.LeftArrow)
                        {
                            direction = 1;
                        }
                        if (input.Key == ConsoleKey.DownArrow)
                        {
                            direction = 2;
                        }
                        if (input.Key == ConsoleKey.UpArrow)
                        {
                            direction = 3;
                        }
                        if (input.Key == ConsoleKey.Spacebar)
                        {
                            Console.SetCursorPosition(0, Console.WindowHeight / 2);
                            Console.WriteLine("Your current score is {0}\n To resume the game press spacebar again.", foodCounter);
                            input = Console.ReadKey();
                            while (input.Key != ConsoleKey.Spacebar)
                            {
                                input = Console.ReadKey();
                            }
                        }
                    }
                    snakeElements.Dequeue();
                    Position snakeHead = snakeElements.Last();
                    Position nextDirection = directions[direction];
                    Position snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                    snakeElements.Enqueue(snakeNewHead);

                    Console.Clear();
                    Console.SetCursorPosition(food.col, food.row);
                    Console.Write("@");

                    if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                    {
                        snakeElements.Enqueue(snakeNewHead);
                        food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                        foodCounter++;
                        if (foodCounter % 5 == 0)
                        {
                            delay += 10;
                            Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                            Console.WriteLine("New Speed -10ms");
                            Thread.Sleep(1000);
                        }
                    }

                    if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight + 1 || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth + 1)
                    {
                        goto breakout;
                    }
                    if (foodCounter == 3)
                    {
                        Console.SetCursorPosition(0, Console.WindowHeight / 2);
                        Console.WriteLine("OH SNAP! A second snake came by!");
                        Thread.Sleep(2000);
                        Queue<Position> secondSnakeElements = new Queue<Position>();
                        for (int i = 1; i < 10; i++)
                        {
                            secondSnakeElements.Enqueue(new Position(1, i));
                        }

                        foreach (Position position in secondSnakeElements)
                        {
                            Console.SetCursorPosition(position.col, position.row);
                            Console.Write('#');
                        }
                        bool hitCeiling = false;
                        bool hitFloor = false;
                        bool hitLeftWall = false;
                        bool hitRightWall = false;

                        bool shownText = false;

                        while (true)
                        {

                            if (foodCounter == 7 && shownText == false)
                            {
                            Console.SetCursorPosition(0, Console.WindowHeight / 2);
                            Console.WriteLine("But it's not very smart.\nIt keeps banging its head into the wall...");
                            Thread.Sleep(2500);
                            shownText = true;

                            }
                            if (foodCounter == 12)
                            {
                                break;
                            }
                            if (Console.KeyAvailable)
                            {
                                ConsoleKeyInfo input = Console.ReadKey();
                                if (input.Key == ConsoleKey.RightArrow)
                                {
                                    direction = 0;
                                }
                                if (input.Key == ConsoleKey.LeftArrow)
                                {
                                    direction = 1;
                                }
                                if (input.Key == ConsoleKey.DownArrow)
                                {
                                    direction = 2;
                                }
                                if (input.Key == ConsoleKey.UpArrow)
                                {
                                    direction = 3;
                                }
                                if (input.Key == ConsoleKey.Spacebar)
                                {
                                    Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                    Console.WriteLine("Your current score is {0}!\n To resume the game press spacebar again.", foodCounter);
                                    input = Console.ReadKey();
                                    while (input.Key != ConsoleKey.Spacebar)
                                    {
                                        input = Console.ReadKey();
                                    }
                                }
                            }
                            snakeElements.Dequeue();
                            snakeHead = snakeElements.Last();
                            nextDirection = directions[direction];
                            snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                            snakeElements.Enqueue(snakeNewHead);

                            int secondDirection = 0;
                            secondDirection = randomNum.Next(0, 3);
                            secondSnakeElements.Dequeue();
                            Position secondSnakeHead = secondSnakeElements.Last();
                            Position secondSnakeNewHead = new Position();
                            Position nextSecondDirection = directions[secondDirection];
                            if (hitCeiling == false && hitFloor == false && hitLeftWall == false && hitRightWall == false)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                            }
                            if (hitCeiling)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + 1 + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                                hitCeiling = false;
                            }
                            if (hitFloor)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row - 1 + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                                hitFloor = false;
                            }
                            if (hitLeftWall)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col + 1 + nextSecondDirection.col);
                                hitLeftWall = false;
                            }
                            if (hitRightWall)
                            {
                                secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col - 1 + nextSecondDirection.col);
                                hitRightWall = false;
                            }
                            secondSnakeElements.Enqueue(secondSnakeNewHead);

                            Console.Clear();
                            Console.SetCursorPosition(food.col, food.row);
                            Console.Write("@");

                            if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                            {
                                snakeElements.Enqueue(snakeNewHead);
                                food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                                foodCounter++;
                                if (foodCounter % 5 == 0)
                                {
                                    delay += 10;
                                    Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                    Console.WriteLine("New Speed -10ms");
                                    Thread.Sleep(1000);
                                }

                            }

                            if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight + 1 || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth + 1)
                            {
                                goto breakout;
                            }
                            foreach (Position position in snakeElements)
                            {
                                Console.SetCursorPosition(position.col, position.row);
                                Console.Write('*');
                            }

                            if (secondSnakeNewHead.row == 0)
                            {
                                hitCeiling = true;
                            }
                            if (secondSnakeNewHead.row == Console.WindowHeight - 1)
                            {
                                hitFloor = true;
                            }
                            if (secondSnakeNewHead.col == 0)
                            {
                                hitLeftWall = true;
                            }
                            if (secondSnakeNewHead.col == Console.WindowWidth - 1)
                            {
                                hitRightWall = true;
                            }
                            foreach (Position position in secondSnakeElements)
                            {
                                Console.SetCursorPosition(position.col, position.row);
                                Console.Write('#');

                            }
                            Thread.Sleep(100 - delay);
                        } //closing the inner while (true) cycle
                    }
                    if (foodCounter == 12)
                    {
                        Console.SetCursorPosition(0, Console.WindowHeight / 2);
                        Console.WriteLine("This snake is supposed to be smarter!\n\nWatch Out!");
                        Thread.Sleep(2500);
                        Queue<Position> secondSnakeElements = new Queue<Position>();
                        for (int i = 1; i < 7; i++)
                        {
                            secondSnakeElements.Enqueue(new Position(1, i));
                        }

                        foreach (Position position in secondSnakeElements)
                        {
                            Console.SetCursorPosition(position.col, position.row);
                            Console.Write('#');
                        }
                        //bool hitCeiling = false;
                        //bool hitFloor = false;
                        //bool hitLeftWall = false;
                        //bool hitRightWall = false;
                        bool shownText2 = false;
                        bool shownText3 = false;
                        bool killedEnemy = false;

                        while (true)
                        {
                            if (Console.KeyAvailable)
                            {
                                ConsoleKeyInfo input = Console.ReadKey();
                                if (input.Key == ConsoleKey.RightArrow)
                                {
                                    direction = 0;
                                }
                                if (input.Key == ConsoleKey.LeftArrow)
                                {
                                    direction = 1;
                                }
                                if (input.Key == ConsoleKey.DownArrow)
                                {
                                    direction = 2;
                                }
                                if (input.Key == ConsoleKey.UpArrow)
                                {
                                    direction = 3;
                                }
                                if (input.Key == ConsoleKey.Spacebar)
                                {
                                    Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                    Console.WriteLine("Your current score is {0}!\nYour oponent score is {1}\nDon't let him eat more apples than you!\n\n\n"+
                                    "To resume the game press spacebar again.", foodCounter, enemyFoodCounter);
                                    input = Console.ReadKey();
                                    while (input.Key != ConsoleKey.Spacebar)
                                    {
                                        input = Console.ReadKey();
                                    }
                                }
                            }
                            snakeElements.Dequeue();
                            snakeHead = snakeElements.Last();
                            nextDirection = directions[direction];
                            snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                            snakeElements.Enqueue(snakeNewHead);

                            int secondDirection = 0;
                            secondSnakeElements.Dequeue();
                            Position secondSnakeHead = secondSnakeElements.Last();
                            if (food.col > secondSnakeHead.col)
                            {
                                secondDirection = 0;
                            }
                            if (food.col < secondSnakeHead.col)
                            {
                                secondDirection = 1;
                            }
                            if (food.col == secondSnakeHead.col)
                            {
                                if (food.row > secondSnakeHead.row)
                                {
                                    secondDirection = 2;
                                }
                                if (food.row < secondSnakeHead.row)
                                {
                                    secondDirection = 3;
                                }
                                if (food.row == secondSnakeHead.row)
                                {
                                    food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                                    enemyFoodCounter++;
                                }
                            }
                            Position nextSecondDirection = directions[secondDirection];
                            Position secondSnakeNewHead = new Position(secondSnakeHead.row + nextSecondDirection.row, secondSnakeHead.col + nextSecondDirection.col);
                            secondSnakeElements.Enqueue(secondSnakeNewHead);

                            Console.Clear();
                            Console.SetCursorPosition(food.col, food.row);
                            Console.Write("@");

                            if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                            {
                                snakeElements.Enqueue(snakeNewHead);
                                food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                                foodCounter++;
                                if (foodCounter % 5 == 0)
                                {
                                    delay += 10;
                                    Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                    Console.WriteLine("New Speed -10ms");
                                    Thread.Sleep(1000);
                                }

                            }

                            if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth)
                            {
                                goto breakout;
                            }
                            if (enemyFoodCounter >= 11 && killedEnemy == false)
                            {
                                food = new Position(randomNum.Next(0, Console.WindowHeight), Console.WindowWidth-1);
                                killedEnemy = true;
                            }
                            if (secondSnakeNewHead.row == -1 || secondSnakeNewHead.row == Console.WindowHeight || secondSnakeNewHead.col == -1 || secondSnakeNewHead.col == Console.WindowWidth)
                            {
                                Console.WriteLine("Oh well, it killed itself! So it is not so smart after all\n\nNow we're on our own again!");
                                Thread.Sleep(2500);
                                bool shownText4 = false;
                                bool shownText5 = false;

                                while (true)
                                {
                                    if (Console.KeyAvailable)
                                    {
                                        ConsoleKeyInfo input = Console.ReadKey();
                                        if (input.Key == ConsoleKey.RightArrow)
                                        {
                                            direction = 0;
                                        }
                                        if (input.Key == ConsoleKey.LeftArrow)
                                        {
                                            direction = 1;
                                        }
                                        if (input.Key == ConsoleKey.DownArrow)
                                        {
                                            direction = 2;
                                        }
                                        if (input.Key == ConsoleKey.UpArrow)
                                        {
                                            direction = 3;
                                        }
                                        if (input.Key == ConsoleKey.Spacebar)
                                        {
                                            Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                            Console.WriteLine("Your current score is {0}!" +
                                            "To resume the game press spacebar again.", foodCounter, enemyFoodCounter);
                                            input = Console.ReadKey();
                                            while (input.Key != ConsoleKey.Spacebar)
                                            {
                                                input = Console.ReadKey();
                                            }
                                        }
                                    }
                                    snakeElements.Dequeue();
                                    snakeHead = snakeElements.Last();
                                    nextDirection = directions[direction];
                                    snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col);
                                    snakeElements.Enqueue(snakeNewHead);

                                    Console.Clear();
                                    Console.SetCursorPosition(food.col, food.row);
                                    Console.Write("@");

                                    if (snakeNewHead.row == food.row && snakeNewHead.col == food.col)
                                    {
                                        snakeElements.Enqueue(snakeNewHead);
                                        food = new Position(randomNum.Next(0, Console.WindowHeight), randomNum.Next(0, Console.WindowWidth));
                                        foodCounter++;
                                        if (foodCounter % 5 == 0)
                                        {
                                            delay += 10;
                                            Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                            Console.WriteLine("New Speed -10ms");
                                            Thread.Sleep(1000);
                                        }

                                    }
                                    if (foodCounter == 20&& shownText4 == false)
                                    {
                                        Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                        Console.WriteLine("No more functionalities implemented. You can crash into the wall if you feel bored");
                                        Thread.Sleep(2500);
                                        shownText4 = true;
                                    }
                                    if (foodCounter == 33 && shownText5 == false)
                                    {
                                        Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                        Console.WriteLine("Well Done! You made it to the hall of fame!!!\n\n\n\nPS: I'm sorry but you're probably going to crash after this message disappears");
                                        Thread.Sleep(4500);
                                        shownText5 = true;
                                    }

                                    if (snakeNewHead.row == -1 || snakeNewHead.row == Console.WindowHeight || snakeNewHead.col == -1 || snakeNewHead.col == Console.WindowWidth)
                                    {
                                        goto breakout;
                                    }
                                    foreach (Position position in snakeElements)
                                    {
                                        Console.SetCursorPosition(position.col, position.row);
                                        Console.Write('*');
                                    }
                                    Thread.Sleep(100 - delay);
                                }

                            }
                            foreach (Position position in snakeElements)
                            {
                                Console.SetCursorPosition(position.col, position.row);
                                Console.Write('*');
                            }

                            foreach (Position position in secondSnakeElements)
                            {
                                Console.SetCursorPosition(position.col, position.row);
                                Console.Write('#');
                            }
                            if (enemyFoodCounter == 3 && shownText2 == false)
                            {
                                Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                                Console.WriteLine("Oh no, it's eating my apples !?!?");
                                Thread.Sleep(1500);
                                shownText2 = true;
                            }
                            if (enemyFoodCounter == 7 && shownText3 == false)
                            {
                                Console.SetCursorPosition(0, Console.WindowHeight / 2);
                                Console.WriteLine("Play smart! There is no chance to outrun it!\nYou can pause the game to see how you're doing");
                                Thread.Sleep(3000);
                                shownText3 = true;
                            }
                            //if (enemyFoodCounter > foodCounter)
                            //{
                            //    goto breakout;
                            //}
                            Thread.Sleep(100 - delay);
                        } //closing the inner while (true) cycle
                    }

                    foreach (Position position in snakeElements)
                    {
                        Console.SetCursorPosition(position.col, position.row);
                        Console.Write('*');
                    }
                    Thread.Sleep(100 - delay);

                }//closing outer while (true) cycle
            breakout:
                if (enemyFoodCounter > foodCounter)
                {
                    Console.SetCursorPosition(0, Console.WindowHeight / 2);
                    Console.WriteLine("Game Over! You let the other snake eat more apples than you. Your score is {0}", foodCounter);
                    Console.ReadKey();
                }
                else
                {
                Console.SetCursorPosition(0, Console.WindowHeight / 2);
                Console.WriteLine("Game Over! Your score is {0}", foodCounter);
                Console.ReadKey();

                }

            }
        }