static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; bool events = false; int countdown = 9; int goal; System.Media.SoundPlayer player = new System.Media.SoundPlayer(); player.SoundLocation = "../../music/backgroundmusic.wav"; player.Play(); Menu menu = new Menu(); menu.DrawMenu(); Console.CursorVisible = false; ConsoleKeyInfo userinput = Console.ReadKey(); while (userinput.Key != ConsoleKey.Enter) { menu.SelectDiff(userinput); menu.DrawMenu(); userinput = Console.ReadKey(); } Console.Clear(); Console.SetWindowSize(120, 30); if (menu.GetDiff() == 0) { goal = 1000; } else if (menu.GetDiff() == 1) { goal = 2000; } else { goal = 4000; } //Create a snake object Snake snake = new Snake(); //Create obstacles object Obstacle obstacle = new Obstacle(); //Create a Food Object Food food = new Food(); //Extra Food int z = 1; Position extra = food.GetExFood(); bool spawn = false; int lastFoodTime = 0; int foodDissapearTime = 14000; //extended the time if (menu.GetDiff() == 1) { foodDissapearTime = 10000; } else if (menu.GetDiff() == 2) { foodDissapearTime = 8000; } int negativePoints = 0; int userPoints = 0; double sleepTime = 100; Random randomNumbersGenerator = new Random(); Random randomNumbersGenerator2 = new Random(); int x; int y; int SnakeColor; //Snake Initial Colour SnakeColor = randomNumbersGenerator.Next(0, 5); Console.BufferHeight = Console.WindowHeight; lastFoodTime = Environment.TickCount; foreach (Position ob in obstacle.GetPositions()) { Console.ForegroundColor = ConsoleColor.Cyan; Console.SetCursorPosition(ob.col, ob.row); Console.Write("\u2592"); } x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); Position fd = food.GetFood(); Position fd1 = food.Generate(x, y + 1); while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)) { x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); } Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); snake.SnakeBody(); while (true) { Position snakeHead; Position snakeNewHead; Console.SetCursorPosition(0, 0); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Score: " + (userPoints).ToString()); Console.WriteLine("Goal: " + goal); Console.ForegroundColor = ConsoleColor.Black; if (Console.KeyAvailable) { ConsoleKeyInfo userInput = Console.ReadKey(); if (events) { if (userInput.Key == ConsoleKey.LeftArrow) { if (snake.GetDirection() != Direction.left) { snake.SetDirection(Direction.right); } } else if (userInput.Key == ConsoleKey.RightArrow) { if (snake.GetDirection() != Direction.right) { snake.SetDirection(Direction.left); } } else if (userInput.Key == ConsoleKey.UpArrow) { if (snake.GetDirection() != Direction.up) { snake.SetDirection(Direction.down); } } else if (userInput.Key == ConsoleKey.DownArrow) { if (snake.GetDirection() != Direction.down) { snake.SetDirection(Direction.up); } } } else { if (userInput.Key == ConsoleKey.LeftArrow) { if (snake.GetDirection() != Direction.right) { snake.SetDirection(Direction.left); } } else if (userInput.Key == ConsoleKey.RightArrow) { if (snake.GetDirection() != Direction.left) { snake.SetDirection(Direction.right); } } else if (userInput.Key == ConsoleKey.UpArrow) { if (snake.GetDirection() != Direction.down) { snake.SetDirection(Direction.up); } } else if (userInput.Key == ConsoleKey.DownArrow) { if (snake.GetDirection() != Direction.up) { snake.SetDirection(Direction.down); } } } if (userInput.Key == ConsoleKey.R) { Console.Clear(); menu.DrawMenu(); Console.CursorVisible = false; userinput = Console.ReadKey(); while (userinput.Key != ConsoleKey.Enter) { menu.SelectDiff(userinput); menu.DrawMenu(); userinput = Console.ReadKey(); } Console.Clear(); if (menu.GetDiff() == 0) { goal = 1000; } else if (menu.GetDiff() == 1) { goal = 2000; } else { goal = 4000; } snake = new Snake(); //Create obstacles object obstacle = new Obstacle(); //Create a Food Object food = new Food(); //Extra Food z = 1; extra = food.GetExFood(); spawn = false; foodDissapearTime = 14000; //extended the time if (menu.GetDiff() == 1) { foodDissapearTime = 10000; } else if (menu.GetDiff() == 2) { foodDissapearTime = 8000; } negativePoints = 0; userPoints = 0; sleepTime = 100; randomNumbersGenerator = new Random(); randomNumbersGenerator2 = new Random(); Console.BufferHeight = Console.WindowHeight; lastFoodTime = Environment.TickCount; foreach (Position ob in obstacle.GetPositions()) { Console.ForegroundColor = ConsoleColor.Cyan; Console.SetCursorPosition(ob.col, ob.row); Console.Write("\u2592"); } x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.GetFood(); fd1 = food.Generate(x, y + 1); while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)) { x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); } Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); snake.SnakeBody(); snakeHead = snake.GetSnakeElements().Last(); snakeNewHead = snake.Move_Snake(snakeHead); } } snakeHead = snake.GetSnakeElements().Last(); snakeNewHead = snake.Move_Snake(snakeHead); //Winning Requirement if (userPoints == goal) { Console.SetCursorPosition(Console.WindowWidth - 30, 0); Console.Write(new string(' ', 30)); string path = "../../Score.txt"; Console.SetCursorPosition((Console.WindowWidth / 2) - 14, (Console.WindowHeight / 2) - 2); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Successfull Clear Stage!!!"); Console.ForegroundColor = ConsoleColor.Red; string exit = "\t\t\t\t\t\tPress Enter to Exit"; Console.WriteLine(exit); Console.ForegroundColor = ConsoleColor.Black; if (!File.Exists(path)) { // Create a file to write to. Console.WriteLine("Can't Open the File, Please try again"); } else { using (StreamWriter sw = File.AppendText(path)) { sw.WriteLine("Clear Stage"); } } ConsoleKeyInfo userInput = Console.ReadKey(); while (true) { if (userInput.Key == ConsoleKey.R) { Console.Clear(); menu.DrawMenu(); Console.CursorVisible = false; userinput = Console.ReadKey(); while (userinput.Key != ConsoleKey.Enter) { menu.SelectDiff(userinput); menu.DrawMenu(); userinput = Console.ReadKey(); } Console.Clear(); if (menu.GetDiff() == 0) { goal = 1000; } else if (menu.GetDiff() == 1) { goal = 2000; } else { goal = 4000; } snake = new Snake(); //Create obstacles object obstacle = new Obstacle(); //Create a Food Object food = new Food(); //Extra Food z = 1; extra = food.GetExFood(); spawn = false; foodDissapearTime = 14000; //extended the time if (menu.GetDiff() == 1) { foodDissapearTime = 10000; } else if (menu.GetDiff() == 2) { foodDissapearTime = 8000; } negativePoints = 0; userPoints = 0; sleepTime = 100; randomNumbersGenerator = new Random(); Console.BufferHeight = Console.WindowHeight; lastFoodTime = Environment.TickCount; foreach (Position ob in obstacle.GetPositions()) { Console.ForegroundColor = ConsoleColor.Cyan; Console.SetCursorPosition(ob.col, ob.row); Console.Write("="); } fd = food.GetFood(); fd1 = food.Generate(x, y + 1); while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)) { x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); } Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); snake.SnakeBody(); snakeHead = snake.GetSnakeElements().Last(); snakeNewHead = snake.Move_Snake(snakeHead); break; } if (userInput.Key == ConsoleKey.Enter) { Console.ForegroundColor = ConsoleColor.Red; System.Environment.Exit(1); } userInput = Console.ReadKey(); } } if (snake.GetSnakeElements().Contains(snakeNewHead) || obstacle.GetPositions().Contains(snakeNewHead)) { string path = "../../Score.txt"; Console.SetCursorPosition((Console.WindowWidth / 2) - 8, (Console.WindowHeight / 2) - 2); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Game over!"); // userPoints = (snakeElements.Count - 6) * 100; //removed negativePoints because it's decreasing too fast. //if (userPoints < 0) userPoints = 0; userPoints = Math.Max(userPoints, 0); Console.WriteLine("\t\t\t\t\t\tYour points are: {0}", userPoints); string exit = "\t\t\t\t\t\tPress Enter to Exit"; Console.WriteLine(exit); Console.ForegroundColor = ConsoleColor.Black; if (!File.Exists(path)) { // Create a file to write to. Console.WriteLine("Can't Open the File, Please try again"); } else { using (StreamWriter sw = File.AppendText(path)) { sw.WriteLine(userPoints); } } ConsoleKeyInfo userInput = Console.ReadKey(); while (true) { if (userInput.Key == ConsoleKey.R) { Console.Clear(); menu.DrawMenu(); Console.CursorVisible = false; userinput = Console.ReadKey(); while (userinput.Key != ConsoleKey.Enter) { menu.SelectDiff(userinput); menu.DrawMenu(); userinput = Console.ReadKey(); } Console.Clear(); if (menu.GetDiff() == 0) { goal = 1000; } else if (menu.GetDiff() == 1) { goal = 2000; } else { goal = 4000; } snake = new Snake(); //Create obstacles object obstacle = new Obstacle(); //Create a Food Object food = new Food(); //Extra Food z = 1; extra = food.GetExFood(); spawn = false; foodDissapearTime = 14000; //extended the time if (menu.GetDiff() == 1) { foodDissapearTime = 10000; } else if (menu.GetDiff() == 2) { foodDissapearTime = 8000; } negativePoints = 0; userPoints = 0; sleepTime = 100; randomNumbersGenerator = new Random(); Console.BufferHeight = Console.WindowHeight; lastFoodTime = Environment.TickCount; foreach (Position ob in obstacle.GetPositions()) { Console.ForegroundColor = ConsoleColor.Cyan; Console.SetCursorPosition(ob.col, ob.row); Console.Write("\u2592"); } fd = food.GetFood(); fd1 = food.Generate(x, y + 1); while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)) { x = randomNumbersGenerator.Next(0, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); } Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); snake.SnakeBody(); snakeHead = snake.GetSnakeElements().Last(); snakeNewHead = snake.Move_Snake(snakeHead); break; } if (userInput.Key == ConsoleKey.Enter) { Console.ForegroundColor = ConsoleColor.Red; System.Environment.Exit(1); } userInput = Console.ReadKey(); } } Console.SetCursorPosition(snakeHead.col, snakeHead.row); if (SnakeColor == 0) { Console.ForegroundColor = ConsoleColor.DarkBlue; } else if (SnakeColor == 1) { Console.ForegroundColor = ConsoleColor.Yellow; } else if (SnakeColor == 2) { Console.ForegroundColor = ConsoleColor.Red; } else if (SnakeColor == 3) { Console.ForegroundColor = ConsoleColor.Magenta; } else if (SnakeColor == 4) { Console.ForegroundColor = ConsoleColor.DarkGreen; } else if (SnakeColor == 5) { Console.ForegroundColor = ConsoleColor.Green; } Console.Write("*"); snake.GetSnakeElements().Enqueue(snakeNewHead); Console.SetCursorPosition(snakeNewHead.col, snakeNewHead.row); Console.ForegroundColor = ConsoleColor.Gray; string head = snake.SnakeHead(); Console.Write(head); // feeding the snake if ((snakeNewHead.col == fd.col && snakeNewHead.row == fd.row) || (snakeNewHead.col == fd1.col && snakeNewHead.row == fd1.row)) { System.Media.SoundPlayer player2 = new System.Media.SoundPlayer(); player2.SoundLocation = "../../music/soundeffect.wav"; player2.Play(); Console.SetCursorPosition(fd.col, fd.row); Console.Write(" "); SnakeColor = randomNumbersGenerator.Next(0, 5); userPoints += 100; Console.ForegroundColor = ConsoleColor.Red; Console.SetCursorPosition(0, 0); Console.Write("Score :" + (userPoints).ToString()); while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)) { x = randomNumbersGenerator.Next(2, 30); y = randomNumbersGenerator.Next(0, 120); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); } z = randomNumbersGenerator.Next(0, 1); lastFoodTime = Environment.TickCount; Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); if (menu.GetDiff() == 0) { sleepTime -= 0.01; } else if (menu.GetDiff() == 1) { sleepTime -= 0.02; } else { sleepTime -= 0.04; } //Position obstacles = new Position(); Position ob = new Position(); while (snake.GetSnakeElements().Contains(ob) || obstacle.GetPositions().Contains(ob) || (fd.row != ob.row && fd.col != ob.row)) { x = randomNumbersGenerator.Next(2, Console.WindowHeight); y = randomNumbersGenerator.Next(0, Console.WindowWidth); ob = obstacle.Generate(x, y); } obstacle.GetPositions().Add(ob); Console.SetCursorPosition(ob.col, ob.row); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\u2592"); if (menu.GetDiff() == 2) { while (snake.GetSnakeElements().Contains(ob) || obstacle.GetPositions().Contains(ob) || (fd.row != ob.row && fd.col != ob.row)) { x = randomNumbersGenerator.Next(2, Console.WindowHeight); y = randomNumbersGenerator.Next(0, Console.WindowWidth); ob = obstacle.Generate(x, y); } obstacle.GetPositions().Add(ob); Console.SetCursorPosition(ob.col, ob.row); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\u2592"); } } else { // moving... Position last = snake.Moving(); Console.SetCursorPosition(last.col, last.row); Console.Write(" "); } if (Environment.TickCount - lastFoodTime >= foodDissapearTime) { Console.SetCursorPosition(fd.col, fd.row); do { x = randomNumbersGenerator.Next(2, Console.WindowHeight); y = randomNumbersGenerator.Next(0, Console.WindowWidth); fd = food.Generate(x, y); fd1 = food.Generate(x, y + 1); Console.WriteLine(" "); }while (snake.GetSnakeElements().Contains(fd) || obstacle.GetPositions().Contains(fd) || snake.GetSnakeElements().Contains(fd1) || obstacle.GetPositions().Contains(fd1)); lastFoodTime = Environment.TickCount; lastFoodTime = Environment.TickCount; Console.SetCursorPosition(fd.col, fd.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("\u2665\u2665"); } if (menu.GetDiff() == 2) { if (z == 0) { do { x = randomNumbersGenerator.Next(2, Console.WindowHeight); y = randomNumbersGenerator.Next(0, Console.WindowWidth); extra = food.Generate(x, y); }while (snake.GetSnakeElements().Contains(extra) || obstacle.GetPositions().Contains(extra)); Console.SetCursorPosition(extra.col, extra.row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("Q"); z += 1; spawn = true; } if (spawn) { if (Environment.TickCount - lastFoodTime >= 4000) { Console.SetCursorPosition(extra.col, extra.row); Console.WriteLine(" "); lastFoodTime = Environment.TickCount; spawn = false; } else if (snake.GetSnakeElements().Contains(extra)) { userPoints += 1000; Console.SetCursorPosition(extra.col, extra.row); Console.WriteLine(" "); spawn = false; } } } if (userPoints > 0 && userPoints % 500 == 0 && events == false) { events = true; countdown = 9; } if (events) { Console.SetCursorPosition(Console.WindowWidth - 30, 0); Console.ForegroundColor = ConsoleColor.White; Console.Write("Upside Down Event!!!: "); Console.Write(countdown); if (Environment.TickCount - lastFoodTime >= 1000) { lastFoodTime = Environment.TickCount; countdown -= 1; } if (countdown == 0) { Console.SetCursorPosition(Console.WindowWidth - 30, 0); Console.Write(new string(' ', 30)); events = false; } } Console.ForegroundColor = ConsoleColor.Black; //hide text if clicked others button Console.CursorVisible = false; Thread.Sleep((int)sleepTime); } }