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();
            }
        }
예제 #2
0
        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(" ");
            }
        }
예제 #3
0
 public Food(Snake snake, Obstacles obstacles)
 {
     this.snake     = snake;
     this.obstacles = obstacles;
 }