/// <summary>
        /// Dient zur Erstellung besonderer Ereignisse während einer Welle, z.B. das Auftauchen eines Mutterschiffs.
        /// </summary>
        /// <param name="gameTime">Spielzeit</param>
        public void SpecialEvent(GameTime gameTime)
        {
            // Verringere Cooldown-Zeit
            if (mothershipCooldownRemaining > 0)
            {
                mothershipCooldownRemaining = mothershipCooldownRemaining - gameTime.ElapsedGameTime.TotalMilliseconds;
            }


            // Kein Cooldown muss abgewartet werden und es wurden noch nicht alle potenziellen Mutterschiffe berechnet
            if ((mothershipCooldownRemaining <= 0) && (mothershipWaveCounter <= WaveCounter))
            {
                // Kein abgelaufener Mutterschiff-Cooldown; berechne ob und wann das nächste Mutterschiff auftaucht
                if (!mothershipCooldownActive)
                {
                    mothershipsPerWaveRemaining--;
                    // Mutterschiff wird erscheinen; Cooldown wird gesetzt
                    if (random.Next(101) <= mothershipProbability)
                    {
                        mothershipCooldownRemaining = mothershipCooldownMinimum + random.Next(mothershipCooldownMaximum - mothershipCooldownMinimum + 1);
                        mothershipCooldownActive    = true;
                    }
                    // Kein Mutterschiff wird erscheinen; sofern alle Mutterschiffe dieser Welle berechnet wurden, wird der Mutterschiff-Wellenzähler erhöht
                    else
                    {
                        if (mothershipsPerWaveRemaining <= 0)
                        {
                            mothershipWaveCounter++;
                            mothershipsPerWaveRemaining = mothershipsPerWave;
                        }
                    }
                }

                // Abgelaufener Mutterschiff-Cooldown; erzeuge Mutterschiff
                else
                {
                    Vector2[] formation = { GameItemConstants.MothershipPosition };
                    WaveGenerator.CreateWave(BehaviourEnum.MothershipMovement, formation, DifficultyLevel.EasyDifficulty);
                    mothershipCooldownActive = false;

                    // Sofern alle Mutterschiffe dieser Welle berechnet wurden, wird der Mutterschiff-Wellenzähler erhöht
                    if (mothershipsPerWaveRemaining <= 0)
                    {
                        mothershipWaveCounter++;
                        mothershipsPerWaveRemaining = mothershipsPerWave;
                    }
                }
            }
        }
        /// <summary>
        /// Erzeugt eine neue Welle, d.h. eine Liste von Aliens, die durch einen Controller gesteuert werden.
        /// Die Abfolge der Wellen ist hier anhand des WaveCounters festgelegt.
        /// </summary>
        /// <param name="gameTime">Spielzeit</param>
        public LinkedList <IGameItem> NextWave(GameTime gameTime)
        {
            LinkedList <IGameItem> wave = null;

            if (WaveCounter == 0)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.SkullFormation, DifficultyLevel.EasyDifficulty);
            }
            else if (WaveCounter == 1)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.BlockFormation, DifficultyLevel.EasyDifficulty);
            }
            else if (WaveCounter == 2)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.ArrowFormation, DifficultyLevel.EasyDifficulty);
            }
            else if (WaveCounter == 3)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.InfinityFormation, DifficultyLevel.MediumDifficulty);
            }
            else if (WaveCounter == 4)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.TriangleFormation, DifficultyLevel.MediumDifficulty);
            }
            else if (WaveCounter == 5)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.CircleFormation, DifficultyLevel.MediumDifficulty);
            }
            else if (WaveCounter == 6)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.SkullFormation, DifficultyLevel.HardDifficulty);
            }
            else if (WaveCounter == 7)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.BlockFormation, DifficultyLevel.HardDifficulty);
            }
            else if (WaveCounter == 8)
            {
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.ArrowFormation, DifficultyLevel.HardDifficulty);
            }
            else
            {
                int       rnd = random.Next(6);
                Vector2[] formation;
                if (rnd == 0)
                {
                    formation = FormationGenerator.SkullFormation;
                }
                else if (rnd == 1)
                {
                    formation = FormationGenerator.BlockFormation;
                }
                else if (rnd == 2)
                {
                    formation = FormationGenerator.CircleFormation;
                }
                else if (rnd == 3)
                {
                    formation = FormationGenerator.TriangleFormation;
                }
                else if (rnd == 4)
                {
                    formation = FormationGenerator.ArrowFormation;
                }
                else
                {
                    formation = FormationGenerator.InfinityFormation;
                }
                wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, formation, DifficultyLevel.HardDifficulty);
            }
            WaveCounter++;
            return(wave);
        }