/// <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(); } }
/// <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(); } } }
/// <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(); }