public static void GameControls(SnakeModel snake) { var input = Console.ReadKey().Key; switch (input) { case ConsoleKey.DownArrow: snake.Body.First().Direction = ConsoleKey.DownArrow; break; case ConsoleKey.UpArrow: snake.Body.First().Direction = ConsoleKey.UpArrow; break; case ConsoleKey.LeftArrow: snake.Body.First().Direction = ConsoleKey.LeftArrow; break; case ConsoleKey.RightArrow: snake.Body.First().Direction = ConsoleKey.RightArrow; break; } }
public static void GameMovement(SnakeModel snake, int gameSpeed) { snake.Body.First().prevY = snake.Body.First().Y; snake.Body.First().prevX = snake.Body.First().X; switch (snake.Body.First().Direction) { case ConsoleKey.DownArrow: snake.Body.First().Y = snake.Body.First().Y + 1; break; case ConsoleKey.RightArrow: snake.Body.First().X = snake.Body.First().X + 1; break; case ConsoleKey.UpArrow: snake.Body.First().Y = snake.Body.First().Y - 1; break; case ConsoleKey.LeftArrow: snake.Body.First().X = snake.Body.First().X - 1; break; } for (int i = 1; i <= snake.Body.Count() - 1; i++) { snake.Body[i].prevX = snake.Body[i].X; snake.Body[i].prevY = snake.Body[i].Y; snake.Body[i].X = snake.Body[i - 1].prevX; snake.Body[i].Y = snake.Body[i - 1].prevY; } Thread.Sleep(gameSpeed); }
public static void Start(string[,] gameField, int gameSpeed, ConsoleColor snakeHeadColor, ConsoleColor snakeBodyColor, ConsoleColor fieldColor, ConsoleColor pointColor) { Random random = new Random(); SnakeModel snake = new SnakeModel(); SnakeGamePoints point = new SnakeGamePoints(); point.X = random.Next(1, gameField.GetLength(1) - 1); point.Y = random.Next(1, gameField.GetLength(1) - 1); snake.Body.Add(new SnakeModelBodyPart()); Console.SetCursorPosition(point.X, point.Y); while (Console.CursorLeft != gameField.GetLength(1) - 1 && Console.CursorTop != gameField.GetLength(1) - 1 && Console.CursorLeft != -1 && Console.CursorTop != -1) { Task.Run(() => SnakeGameLogic.GameControls(snake)); SnakeGameLogic.GameMovement(snake, gameSpeed); Console.ResetColor(); Console.Clear(); SnakeGameField.Draw(gameField, fieldColor); Console.SetCursorPosition(point.X, point.Y); Console.BackgroundColor = pointColor; Console.WriteLine(point.Fragment, Console.BackgroundColor); foreach (var piece in snake.Body) { Console.SetCursorPosition(piece.X, piece.Y); if (piece.X == snake.Body.First().X&& piece.Y == snake.Body.First().Y) { Console.BackgroundColor = snakeHeadColor; } else { Console.BackgroundColor = snakeBodyColor; } Console.WriteLine(piece.Fragment, Console.BackgroundColor); } Console.ResetColor(); Console.SetCursorPosition(snake.Body.First().X, snake.Body.First().Y); if (snake.Body.First().X == point.X && snake.Body.First().Y == point.Y) { point.X = random.Next(1, gameField.GetLength(1) - 1); point.Y = random.Next(1, gameField.GetLength(1) - 1); snake.Body.Add(new SnakeModelBodyPart()); } for (int i = 1; i <= snake.Body.Count() - 1; i++) { if (Console.CursorLeft == snake.Body[i].prevX && Console.CursorTop == snake.Body[i].prevY) { Console.Clear(); Console.WriteLine("Game over"); break; } } if (Console.CursorLeft == gameField.GetLength(1) - 1 || Console.CursorTop == gameField.GetLength(1) - 1 || Console.CursorLeft == 0 || Console.CursorTop == 0) { Console.ResetColor(); Console.Clear(); Console.WriteLine("Game over"); break; } } }