Esempio n. 1
0
        /// <summary>
        /// Vérification d'une collision avec la nourriture.
        /// </summary>
        private void DoCollisionCheckFood()
        {
            // Récupération de la tête du serpent
            SnakePart snakeHead = snakeParts[snakeParts.Count - 1];

            // Vérification d'une collision avec la nourriture
            if ((snakeHead.GetPosition().X == Canvas.GetLeft(snakeFood.GetUiElement())) && (snakeHead.GetPosition().Y == Canvas.GetTop(snakeFood.GetUiElement())))
            {
                EatSnakeFood();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Vérification de collision pour le serpent.
        /// </summary>
        private void DoCollisionCheckWall()
        {
            // Récupération de la tête du serpent
            SnakePart snakeHead = snakeParts[snakeParts.Count - 1];

            // Vérification d'une collision avec les murs
            if ((snakeHead.GetPosition().Y < 0) || (snakeHead.GetPosition().Y >= GameArea.ActualHeight) ||
                (snakeHead.GetPosition().X < 0) || (snakeHead.GetPosition().X >= GameArea.ActualWidth))
            {
                EndGame();
            }

            // Vérification d'une collision avec une partie du serpent
            foreach (SnakePart snakeBodyPart in snakeParts.Take(snakeParts.Count - 1))
            {
                if ((snakeHead.GetPosition().X == snakeBodyPart.GetPosition().X) && (snakeHead.GetPosition().Y == snakeBodyPart.GetPosition().Y))
                {
                    EndGame();
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Déplacement du serpent
        /// </summary>
        private void MoveSnake()
        {
            // Si la grandeur du serpent n'a pas changé, on supprimer la queue et la
            //  dernière partie du corp
            if (snakeParts.Count == snakeLength)
            {
                GameArea.Children.Remove(snakeParts[0].GetUiElement());
                GameArea.Children.Remove(snakeParts[1].GetUiElement());
                snakeParts.RemoveAt(0);
            }

            // Pour chaque partie du serpent, on supprimer les éléments du canvas
            foreach (SnakePart snakePart in snakeParts)
            {
                GameArea.Children.Remove(snakePart.GetUiElement());
            }

            // La dernière partie du corps devient la queue
            snakeParts[0].SetTypeSnakePart(TypeSnakePart.TAIL);

            // Récupération de la tête actuelle
            SnakePart snakeHead = snakeParts[snakeParts.Count - 1];

            // La tête devient le corps
            snakeHead.SetTypeSnakePart(TypeSnakePart.BODY);

            // Récupération des positions actuelle de la tête
            double nextX = snakeHead.GetPosition().X;
            double nextY = snakeHead.GetPosition().Y;

            // Calcul des prochaines positions de la tête
            switch (snakeDirection)
            {
            case Direction.LEFT:
                nextX -= Configuration.SNAKE_SQUARE_SIZE;
                break;

            case Direction.RIGHT:
                nextX += Configuration.SNAKE_SQUARE_SIZE;
                break;

            case Direction.UP:
                nextY -= Configuration.SNAKE_SQUARE_SIZE;
                break;

            case Direction.DOWN:
                nextY += Configuration.SNAKE_SQUARE_SIZE;
                break;
            }

            // Création de la nouvelle tête
            snakeParts.Add(new SnakePart(new Point(nextX, nextY), TypeSnakePart.HEAD, snakeDirection));

            // Vérification d'une collision avec les murs ou le corps
            DoCollisionCheckWall();

            // Si le serpent est autorisé a se dessiner, le dessine
            if (isAuthorizedToDrawSnake)
            {
                DrawSnake();
            }

            // Vérification d'une collision avec de la nourriture
            DoCollisionCheckFood();
        }