/// <summary>
        /// this is the builder of the Enemi with the level
        /// </summary>
        /// <param name="lvl"></param>
        /// <returns></returns>
        public static EnnemiBlock BUILDER_EnnemiBlock(Level lvl)
        {
            EnnemiBlock en = null;
            try {

               string file =lvl.nameFile;

                string[] fileSplit = lvl.nameFile.Split('\r');
                string[] tab = fileSplit[0].Split(' ');

                 en = new EnnemiBlock(new Vecteur2D(int.Parse(tab[0]), int.Parse(tab[1])), new Vecteur2D(30, 10));
                string line;

                for (int i = 1; i < fileSplit.Length ; i++)
                {
                    line = fileSplit[i];
                    tab = line.Split(' ');
                    en.addLine(
                       int.Parse(tab[0]),
                       int.Parse(tab[1]),
                       new BasicShip(
                           new Vecteur2D(),
                           int.Parse(tab[2]),
                           stringtoBitmap(tab[3])
                           ,150+lvl.num*50//speed
                           )
                       );

                }
            }
            catch (Exception a)
            {
                System.Console.WriteLine("fileerror"+a.StackTrace);

            }
            return en;
        }
        /// <summary>
        /// Private constructor
        /// </summary>
        /// <param name="gameSize">Size of the game area</param>
        private Game(Size gameSize)
        {
            Game.gameSize = gameSize;

            sound = new SoundPlayer(SpaceInvaders.Properties.Resources.soundGame);
            music = true;

            sound.PlayLooping();

            this.menuM = new MenuManager();
            this.menuM.add(new MenuItem("Jouer", "Lance une partie",
                delegate() {
                    this.currentState = gameState.startlevel ;
                    return true; }
            ));

            this.menuM.add(new MenuItem("Music on/off", "Active et désactive le son",
                delegate () {
                    if (this.music) {
                        this.sound.Stop();
                        this.music = false;
                    }
                    else
                    {
                        this.sound.PlayLooping();
                        this.music = true;
                    }
                    return true;
                }
            ));

            this.menuM.add(new MenuItem("Chargé", "Charge un fichier de niveaux", delegate () {

                OpenFileDialog openFileDialog1 = new OpenFileDialog();

                openFileDialog1.InitialDirectory = "c:\\";
                openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                openFileDialog1.FilterIndex = 2;
                openFileDialog1.RestoreDirectory = true;

                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        Console.WriteLine(openFileDialog1.FileName);
                        this.lvl = new Level("CUSTON LEVEL", File.ReadAllText(openFileDialog1.FileName), 0);
                        this.ennemis = EnnemiBlock.BUILDER_EnnemiBlock(this.lvl);
                        if (this.ennemis == null)
                        {
                           MessageBox.Show("le fichier n'est pas valide, utilisé les files dans resource/level* comme exemple");
                           return false;
                        }
                        this.counterTime = 3;
                        this.currentState = gameState.startlevel;
                        BasicInit();

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                    }
                }

                return true; }));
            this.menuM.add(new MenuItem("Quitter", "quitte le Jeux ", delegate () { Application.Exit(); return true; }));
            this.currentState = gameState.menu;
            this.counterTime=0;
        }
        /// <summary>
        /// Update game
        /// you can
        ///     change the possition the state of the game 
        /// you can't
        ///     draw somthing thanx to do it in draw()
        /// </summary>
        public void Update(double deltaT)
        {
            bool init = false;
            switch (currentState)
            {
                case gameState.menu:
                    this.menuM.move(deltaT,keyPressed);
                    break;
                case gameState.startlevel:

                    if (this.lvl == null) {
                        this.counterTime = 3;
                        this.lvl = Level.Builder_getLevel(1); init = true;
                        BasicInit();
                        this.ennemis = EnnemiBlock.BUILDER_EnnemiBlock(this.lvl);
                    }

                    this.counterTime -= deltaT;

                    if (this.counterTime < 0) {
                        this.currentState = gameState.start;
                    }

                    break;

                case gameState.start:

                    Missile.misileList.RemoveAll(a => !a.alive);
                    ennemis.move(deltaT);
                    this.playerShip.move(deltaT, keyPressed);
                    listBunger.ForEach(a =>
                    {
                        Missile.misileList.ForEach(b =>
                       {
                           a.collision(b);
                       });

                    }
                    );
                    Bonus.bonusList.ForEach(a =>
                    {
                        a.bonusFor = this.playerShip;
                        a.move(deltaT);

                    });

                    Bonus.bonusList.RemoveAll(pi => !pi.alive);
                    Missile.misileList.ForEach(a =>
                   {

                       a.move(deltaT);
                   });

                    this.ennemis.colitionPlayer(this.playerShip);
                    this.conditionLevelWin();
                    this.conditionLevelLoose();

                    if (keyPressed.Contains(Keys.P) && timePRESS < 0)
                    {
                            currentState = gameState.pause;
                            timePRESS = 0.3;

                    }

                    timePRESS -= deltaT;

                    break;

                case gameState.pause:

                    if (keyPressed.Contains(Keys.P) && timePRESS < 0)
                        {
                            currentState = gameState.start;
                            timePRESS = 0.3;
                        }

            timePRESS -= deltaT;
            break;

                case gameState.lost:

                    if (keyPressed.Contains(Keys.R))
                    {
                        this.currentState = gameState.startlevel;
                        this.lvl = null;
                        Missile.misileList.RemoveAll( pi => true);
                        Bonus.bonusList.RemoveAll(bo => true);

                    }

                    break;

                case gameState.win:

                    if (keyPressed.Contains(Keys.N))
                    {
                        Missile.misileList.ForEach(pi => pi.live = -1);
                        Missile.misileList.RemoveAll(pi =>true);
                        this.currentState = gameState.startlevel;
                        if (this.lvl.num == 0) {
                            this.currentState = gameState.menu;
                            return;
                        }

                        this.lvl = Level.Builder_getLevel(this.lvl.num+1);
                        this.ennemis = EnnemiBlock.BUILDER_EnnemiBlock(this.lvl);
                        this.counterTime = 3;
                    }
                    break;/*
                case gameState.restart:
                    break;
                case gameState.nextLevel:
                    break;
                case gameState.menu:
                    break;*/
            }
        }