Beispiel #1
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();
        }