/// <summary>
        /// Kümmert sich um die Bewegung der GameItem
        /// </summary>
        /// <param name="game">Referenz des Games aus dem XNA Framework.</param>
        /// <param name="gameTime">Bietet die aktuelle Spielzeit an.</param>
        protected override void Movement(Game game, GameTime gameTime)
        {
            //Umrechnung von V/s in V/frame
            VelocityIncreasePerFrame = (this.VelocityIncrease * (float)game.TargetElapsedTime.TotalSeconds);


            //Ausführung des Runter Kommandos aus vorigem Frame.
            if (moveDown)
            {
                //Navigiert alle GameItem nach unten.
                foreach (IGameItem item in Controllees)
                {
                    // Geschwindigkeitserhöhung
                    item.Velocity += VelocityIncreasePerFrame;

                    //Befehl an GameItem
                    item.Move(CoordinateConstants.Down, gameTime);
                }

                //MoveDown ausgeführt !
                moveDown = false;
            }
            else //Bewegung in Richtung aktuelle Richtung.
            {
                foreach (IGameItem item in Controllees)
                {
                    // Geschwindigkeitserhöhung
                    item.Velocity += VelocityIncreasePerFrame;

                    if (!(item.Move(currentDirection, gameTime)))
                    {
                        moveDown = true;
                    }
                }
            }

            /*
             * Ändert die aktuelle Richtung sofern ein GameItem am Rand ist,
             * damit nachdem runtergerückt wurde in die andere Richtung sich bewegt wird.
             */
            if (moveDown)
            {
                currentDirection = BlockWaveAI.changeDirection(currentDirection);

                //Alle mann zurück!
                foreach (IGameItem item in Controllees)
                {
                    item.Move(currentDirection, gameTime);
                }
            }
        }
        /// <summary>
        /// Generiert einen Controller für eine KI Steuerung.
        /// </summary>
        /// <remarks>
        /// Diese Methode ist bei dem EventHandler der WaveGenerator Klasse zu registrieren.
        /// Die ControllerEventArgs enthalten die relevanten Daten zur Controller Generierung.
        /// Das BehaviourEnum beschreibt das vom Model gewünschte Verhalten.
        /// <see cref="ModelSection.BehaviourEnum"/>
        /// </remarks>
        /// <param name="sender">Absender des Events.</param>
        /// <param name="desiredController">Gibt an welchen Controllers man generiert haben möchte.</param>
        public void CreateController(object sender, ControllerEventArgs desiredController)
        {
            //Für Extraktion der Werte des desired Controller
            ICollection <IGameItem> controllees;
            float   shootingFrequency;
            Vector2 velocityIncrease;

            //Zwischenspeicher für den generierten Controller
            ICommander temp;

            //Aus dem Event extrahierte Werte und Überprüfung von desired Controller auf Korrektheit

            if ((desiredController.Controllees is ICollection <IGameItem>) || desiredController.Controllees.Count >= 1)
            {
                controllees = desiredController.Controllees;
            }
            else
            {
                throw new ArgumentException("is no Collection of GameItem or Collection is Empty", "Controllees");
            }


            shootingFrequency = desiredController.DifficultyLevel.ShootingFrequency;


            if (desiredController.DifficultyLevel.VelocityIncrease != null)
            {
                velocityIncrease = desiredController.DifficultyLevel.VelocityIncrease;
            }
            else
            {
                throw new ArgumentNullException("VelocityIncreaseMultiplier");
            }



            //Start der Controllererzeugung
            switch (desiredController.Behaviour)
            {
            case BehaviourEnum.BlockMovement:

                temp = new BlockWaveAI(this, shootingFrequency, controllees, velocityIncrease);

                //TODO Löschen nach Testphase by CK
                //TODO Enable für Test folgender Bugs: 12,
                //temp = new MoveDownTestAI(this, shootingFrequency, controllees, velocityIncrease);
                //Ende


                Controllers.Add(temp);

                break;

            case BehaviourEnum.MothershipMovement:

                temp = new MothershipAI(this, shootingFrequency, controllees.First(), velocityIncrease);
                Controllers.Add(temp);

                break;
            }
        }