public void Run() { startBackgroundMusic(); Console.BufferHeight = Console.WindowHeight; Console.CursorVisible = false; snake = new Snake(); snake.Show(); obstacles = new Obstacles(); obstacles.Show(); food = new Food(snake, obstacles); food.Create(); food.Show(); level = new Level(); int direction = right; try { while (true) { direction = updateDirection(direction); snake.Advance(direction, food, obstacles); if (food.IsTimeToMove()) { food.Hide(); food.Create(); food.Show(); level.NegativePoints += 5; } level.UpdatePoints(snake); if (level.LevelChanged) { level.ShowLevel(); obstacles.AddMore(snake, food); sleepTime -= 2; } sleepTime -= 0.01; Thread.Sleep((int)sleepTime); } } catch (Exception e) { level.UpdatePoints(snake); level.ShowGameOver(); } }
public void Advance(int direction, Food food, Obstacles obstacles) { Position snakeHead = snakeElements.ToArray()[snakeElements.Count - 1]; Position nextDirection = directions[direction]; Position snakeNewHead = new Position(snakeHead.row + nextDirection.row, snakeHead.col + nextDirection.col); if (snakeNewHead.col < 0) { snakeNewHead.col = Console.WindowWidth - 1; } if (snakeNewHead.row < 0) { snakeNewHead.row = Console.WindowHeight - 1; } if (snakeNewHead.row >= Console.WindowHeight) { snakeNewHead.row = 0; } if (snakeNewHead.col >= Console.WindowWidth) { snakeNewHead.col = 0; } if (snakeElements.Contains(snakeNewHead) || obstacles.Contains(snakeNewHead)) { throw new Exception("finished"); } Console.SetCursorPosition(snakeHead.col, snakeHead.row); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("*"); snakeElements.Enqueue(snakeNewHead); Console.SetCursorPosition(snakeNewHead.col, snakeNewHead.row); Console.ForegroundColor = ConsoleColor.Yellow; if (direction == right) { Console.Write(">"); } if (direction == left) { Console.Write("<"); } if (direction == down) { Console.Write("v"); } if (direction == up) { Console.Write("^"); } if (snakeNewHead.Equals(food.Position)) { food.Create(); food.Show(); //sleepTime--; obstacles.AddOne(this, food); } else { //moving Position last = snakeElements.Dequeue(); Console.SetCursorPosition(last.col, last.row); Console.Write(" "); } }
public Food(Snake snake, Obstacles obstacles) { this.snake = snake; this.obstacles = obstacles; }