public void checkContenuDansPorteeMoyenEchiquier(MoteurGraphique moteurgraphique_, int portee_, Unite moi_, SystemeDeJeu gameplay_, Armee armee_, HUD hud_)
        {
            List<Unite> ciblesPotentielles = new List<Unite>();
            List<int> porteesPotentielles = new List<int>();
            int abscisseHerosEnnemi = -1;
            int ordonneeHerosEnnemi = -1;

            if (moi_.alive)
            {
                foreach (Unite unite in gameplay_.listeDesJoueurs[(gameplay_.tourencours + 1) % 2].bataillon)
                {
                    if (unite.typeUnite == e_typeUnite.Heros)
                    {
                        abscisseHerosEnnemi = unite.i;
                        ordonneeHerosEnnemi = unite.j;
                    }
                }

                #region boucleTestCiblesPotentielles

                if (moi_.attaqOrNot && moi_.typeUnite != e_typeUnite.Heros)
                {
                    for (int k = 0; k < portee_; k++)
                    {
                        if (moi_.i + k >= 0 && moi_.i + k < moteurgraphique_.longueur
                            && moi_.j + (portee_ - k) >= 0 && moi_.j + (portee_ - k) < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurUnite]);
                                porteesPotentielles.Add(k);
                            }
                        }
                        if (moi_.i - k >= 0 && moi_.i - k < moteurgraphique_.longueur
                             && moi_.j - (portee_ - k) >= 0 && moi_.j - (portee_ - k) < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurUnite]);
                                porteesPotentielles.Add(k); ;
                            }
                        }
                        if (moi_.i + (portee_ - k) >= 0 && moi_.i + (portee_ - k) < moteurgraphique_.longueur
                             && moi_.j - k >= 0 && moi_.j - k < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurUnite]);
                                porteesPotentielles.Add(k);
                            }
                        }
                        if (moi_.i - (portee_ - k) >= 0 && moi_.i - (portee_ - k) < moteurgraphique_.longueur
                             && moi_.j + k >= 0 && moi_.j + k < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurUnite]);
                                porteesPotentielles.Add(k);
                            }
                        }
                    }

                #endregion

                    #region attaquerHerosOuUniteAvecPlusBasPV
                    do
                    {
                        if (moi_.attaqOrNot)
                        {
                            for (int i = ciblesPotentielles.Count - 1; i >= 0; i--)
                            {
                                if (!ciblesPotentielles[i].alive)
                                {
                                    ciblesPotentielles.RemoveAt(i);
                                    porteesPotentielles.RemoveAt(i);
                                }
                            }

                            for (int j = 0; j < ciblesPotentielles.Count - 1; j++)
                            {
                                if (ciblesPotentielles[j].i == abscisseHerosEnnemi && ciblesPotentielles[j].j == ordonneeHerosEnnemi)
                                {
                                    moi_.Initiative(ciblesPotentielles[j], porteesPotentielles[j], moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                    ciblesPotentielles.RemoveRange(0, ciblesPotentielles.Count - 1);
                                }
                            }

                            if (moi_.attaqOrNot)
                            {
                                for (int i = ciblesPotentielles.Count - 2; i >= 0; i--)
                                {
                                    if (ciblesPotentielles[i].pvactuel < ciblesPotentielles[i + 1].pvactuel)
                                    {
                                        ciblesPotentielles.RemoveAt(i + 1);
                                        porteesPotentielles.RemoveAt(i + 1);
                                    }
                                    else
                                    {
                                        ciblesPotentielles.RemoveAt(i);
                                        porteesPotentielles.RemoveAt(i);
                                    }
                                }
                            }
                        }
                    } while (ciblesPotentielles.Count > 1 && moi_.attaqOrNot);

                    if (ciblesPotentielles.Count > 0)
                    {
                        moi_.Initiative(ciblesPotentielles[0], porteesPotentielles[0], moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                    }
                }
                    #endregion
            }
        }
        public void checkContenuDansPorteeMoyenJoute(MoteurGraphique moteurgraphique_, int portee_, Unite moi_, SystemeDeJeu gameplay_, Armee armee_, HUD hud_)
        {
            //cible : gameplay_.armees[moteurgraphique_.map[i_, j_].pointeurArmee].bataillon[moteurgraphique_.map[i_, j_].pointeurUnite]
            List<Unite> ciblesPotentielles = new List<Unite>();
            List<int> porteesPotentielles = new List<int>();

            #region boucleTestCiblesPotentielles
            if (moi_.attaqOrNot)
            {
                for (int k = 0; k < portee_; k++)
                {
                    if (moi_.i + k >= 0 && moi_.i + k < moteurgraphique_.longueur
                        && moi_.j + (portee_ - k) >= 0 && moi_.j + (portee_ - k) < moteurgraphique_.largeur)
                    {
                        if (moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].presence &&
                                gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].camp)
                        {
                            ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].
                                bataillon[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurUnite]);
                            porteesPotentielles.Add(portee_);
                        }
                    }
                    if (moi_.i - k >= 0 && moi_.i - k < moteurgraphique_.longueur
                         && moi_.j - (portee_ - k) >= 0 && moi_.j - (portee_ - k) < moteurgraphique_.largeur)
                    {
                        if (moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].presence &&
                                gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].camp)
                        {
                            ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].
                                bataillon[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurUnite]);
                            porteesPotentielles.Add(portee_);
                        }
                    }
                    if (moi_.i + (portee_ - k) >= 0 && moi_.i + (portee_ - k) < moteurgraphique_.longueur
                         && moi_.j - k >= 0 && moi_.j - k < moteurgraphique_.largeur)
                    {
                        if (moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].presence &&
                                gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].camp)
                        {
                            ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].
                                bataillon[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurUnite]);
                            porteesPotentielles.Add(portee_);
                        }
                    }
                    if (moi_.i - (portee_ - k) >= 0 && moi_.i - (portee_ - k) < moteurgraphique_.longueur
                         && moi_.j + k >= 0 && moi_.j + k < moteurgraphique_.largeur)
                    {
                        if (moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].presence &&
                                gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].camp)
                        {
                            ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].
                                bataillon[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurUnite]);
                            porteesPotentielles.Add(portee_);
                        }
                    }
                }

                for (int i = 0; i < ciblesPotentielles.Count - 1; i++)
                {
                    if (!ciblesPotentielles[i].alive)
                    {
                        ciblesPotentielles.RemoveAt(i);
                        porteesPotentielles.RemoveAt(i);
                    }
                }

            #endregion

                #region attaqueEfficacementUniteAvecLaMeilleurePrecisionEtLeMoinsDePV

                for (int w = ciblesPotentielles.Count - 1; w >= 0; w--)
                {
                    if (moi_.typedAttaque[porteesPotentielles[w]] == true)
                    {
                        if (moi_.attaque + moi_.bonusAttaque <= ciblesPotentielles[w].armure + ciblesPotentielles[w].bonusArmure)
                        {
                            ciblesPotentielles.RemoveAt(w);
                            porteesPotentielles.RemoveAt(w);
                        }
                    }
                    else
                    {
                        if (moi_.attaque + moi_.bonusresistance <= ciblesPotentielles[w].resistance + ciblesPotentielles[w].bonusresistance)
                        {
                            ciblesPotentielles.RemoveAt(w);
                            porteesPotentielles.RemoveAt(w);
                        }
                    }
                }

                while (ciblesPotentielles.Count > 1)
                {
                    for (int j = 0; j < ciblesPotentielles.Count - 1; j++)
                    {
                        if (ciblesPotentielles[j].pvactuel < ciblesPotentielles[j + 1].pvactuel)
                        {
                            ciblesPotentielles.RemoveAt(j + 1);
                            porteesPotentielles.RemoveAt(j + 1);
                        }
                        else
                        {
                            ciblesPotentielles.RemoveAt(j);
                            porteesPotentielles.RemoveAt(j);
                        }
                    }
                }

                if (ciblesPotentielles.Count > 0)
                {
                    moi_.Initiative(ciblesPotentielles[0], porteesPotentielles[0], moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                }
            }
                #endregion
        }
        public void checkContenuDansPorteeFacileTresor(Unite moi_, SystemeDeJeu gameplay_, MoteurGraphique moteurgraphique_, Armee armee_, HUD hud_)
        {
            List<int> porteeeeeeeeeeesValables = new List<int>();

            for (int i = 0; i < 7; i++)
            {
                if (moi_.portee[i] > 0)
                {
                    porteeeeeeeeeeesValables.Add(i);
                }
            }
            if (moteurgraphique_.map[gameplay_.tresor_i, gameplay_.tresor_j].presence == true)
            {
                if (gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[gameplay_.tresor_i, gameplay_.tresor_j].pointeurArmee].camp)
                {
                    if (Math.Abs((moi_.i - gameplay_.tresor_i) + (moi_.j - gameplay_.tresor_j)) < 7)
                    {
                        if (moi_.portee[Math.Abs((moi_.i - gameplay_.tresor_i) + (moi_.j - gameplay_.tresor_j))] > 0)
                        {
                            moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[gameplay_.tresor_i, gameplay_.tresor_j].pointeurArmee].bataillon[moteurgraphique_.map[gameplay_.tresor_i, gameplay_.tresor_j].pointeurUnite], Math.Abs((moi_.i - gameplay_.tresor_i) + (moi_.j - gameplay_.tresor_j)), moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                        }
                        else
                        {
                            foreach (int portee_ in porteeeeeeeeeeesValables)
                            {
                                checkContenuDansPorteeMoyenJoute(moteurgraphique_, portee_, moi_, gameplay_, armee_, hud_);
                            }
                        }
                    }

                    else
                    {
                        foreach (int portee_ in porteeeeeeeeeeesValables)
                        {
                            checkContenuDansPorteeMoyenJoute(moteurgraphique_, portee_, moi_, gameplay_, armee_, hud_);
                        }
                    }
                }
            }
        }
        /* pour la fonction ci-dessous (et toutes les checkContenu) il faut que dans son appel portee_ soit les differentes portées d'attaque de l'unité
           ce qui n'est pas le cas pour l'instant d'ou les "trop loin" qui apparaissent souvent dans les animations */
        public void checkContenuDansPorteeFacileJoute(MoteurGraphique moteurgraphique_, int portee_, Unite moi_, SystemeDeJeu gameplay_, Armee armee_, HUD hud_)
        {
            //cible : gameplay_.armees[moteurgraphique_.map[i_, j_].pointeurArmee].bataillon[moteurgraphique_.map[i_, j_].pointeurUnite]
            List<Unite> ciblesPotentielles = new List<Unite>();
            List<int> porteesPotentielles = new List<int>();

            if (moi_.alive)
            {
                if (moi_.attaqOrNot)
                {
                    #region boucleTestCiblesPotentielles

                    for (int k = 0; k < portee_; k++)
                    {
                        if (moi_.i + k >= 0 && moi_.i + k < moteurgraphique_.longueur
                            && moi_.j + (portee_ - k) >= 0 && moi_.j + (portee_ - k) < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurUnite]);
                                porteesPotentielles.Add(portee_);
                            }
                        }
                        if (moi_.i - k >= 0 && moi_.i - k < moteurgraphique_.longueur
                             && moi_.j - (portee_ - k) >= 0 && moi_.j - (portee_ - k) < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurUnite]);
                                porteesPotentielles.Add(portee_);
                            }
                        }
                        if (moi_.i + (portee_ - k) >= 0 && moi_.i + (portee_ - k) < moteurgraphique_.longueur
                             && moi_.j - k >= 0 && moi_.j - k < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurUnite]);
                                porteesPotentielles.Add(portee_);
                            }
                        }
                        if (moi_.i - (portee_ - k) >= 0 && moi_.i - (portee_ - k) < moteurgraphique_.longueur
                             && moi_.j + k >= 0 && moi_.j + k < moteurgraphique_.largeur)
                        {
                            if (moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].presence &&
                                    gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].camp)
                            {
                                ciblesPotentielles.Add(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee].
                                    bataillon[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurUnite]);
                                porteesPotentielles.Add(portee_);
                            }
                        }
                    }
                    for (int i = 0; i < ciblesPotentielles.Count - 1; i++)
                    {
                        if (!ciblesPotentielles[i].alive)
                        {
                            ciblesPotentielles.RemoveAt(i);
                            porteesPotentielles.RemoveAt(i);
                        }
                    }

                    #endregion

                    #region attaqueEfficacementUniteAvecLeMoinsDePV

                    //for (int w = ciblesPotentielles.Count - 1; w >= 0; w--)
                    //{
                    //    if (moi_.typedAttaque[porteesPotentielles[w]] == true)
                    //    {
                    //        if (moi_.attaque <= ciblesPotentielles[w].armure + ciblesPotentielles[w].bonusArmure)
                    //        {
                    //            ciblesPotentielles.RemoveAt(w);
                    //            porteesPotentielles.RemoveAt(w);
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (moi_.attaque <= ciblesPotentielles[w].resistance + ciblesPotentielles[w].bonusresistance)
                    //        {
                    //            ciblesPotentielles.RemoveAt(w);
                    //            porteesPotentielles.RemoveAt(w);
                    //        }
                    //    }
                    //}

                    for (int galopa = 0; galopa < ciblesPotentielles.Count; galopa++)
                    {
                        if (Math.Abs((moi_.i - ciblesPotentielles[galopa].i) + (moi_.j - ciblesPotentielles[galopa].j)) >= 7)
                        {
                            ciblesPotentielles.RemoveAt(galopa);
                            porteesPotentielles.RemoveAt(galopa);
                        }
                    }

                    for (int ponyta = 0; ponyta < ciblesPotentielles.Count; ponyta++)
                    {
                        if (moi_.portee[Math.Abs((moi_.i - ciblesPotentielles[ponyta].i) + (moi_.j - ciblesPotentielles[ponyta].j))] <= 0)
                        {
                            ciblesPotentielles.RemoveAt(ponyta);
                            porteesPotentielles.RemoveAt(ponyta);
                        }
                    }

                    do
                    {
                        for (int i = 0; i < ciblesPotentielles.Count - 1; i++)
                        {
                            if (ciblesPotentielles[i].pvactuel < ciblesPotentielles[i + 1].pvactuel)
                            {
                                ciblesPotentielles.RemoveAt(i + 1);
                                porteesPotentielles.RemoveAt(i + 1);
                            }
                            else
                            {
                                ciblesPotentielles.RemoveAt(i);
                                porteesPotentielles.RemoveAt(i);
                            }
                        }
                    } while (ciblesPotentielles.Count > 1);

                    if (ciblesPotentielles.Count > 0)
                    {
                        moi_.Initiative(ciblesPotentielles[0], porteesPotentielles[0], moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                    }
                    #endregion
                }
            }
        }
        public void checkContenuDansPorteeFacileColline(MoteurGraphique moteurgraphique_, int portee_, Unite moi_, SystemeDeJeu gameplay_, Armee armee_, HUD hud_)
        {
            int absx = moteurgraphique_.longueur / 2;
            int ordy = moteurgraphique_.largeur / 2;
            if (moi_.alive)
            {
                if (moi_.i != absx || moi_.j != ordy)
                {
                    #region siPersonneOuUnAlliePossedeColline

                    if (moteurgraphique_.map[absx, ordy].pointeurArmee == -1 || gameplay_.listeDesJoueurs[moteurgraphique_.map[absx, ordy].pointeurArmee].camp ==
                            gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp)
                    {
                        checkContenuDansPorteeMoyenJoute(moteurgraphique_, portee_, moi_, gameplay_, armee_, hud_);
                    }

                    #endregion

                    #region siUnEnnemiPossedeLaColline

                    else
                    {
                        for (int p = 1; p < 7; p++) // ici aussi il faut que 7 soit remplacé par la portée d'attaque max de l'unité moi_
                        {
                            for (int k = 0; k < p; k++)
                            {
                                if (moi_.attaqOrNot)
                                {
                                    if (moi_.i + k >= 0 && moi_.i + k < moteurgraphique_.longueur &&
                                        moi_.j + (p - k) >= 0 && moi_.j + (p - k) < moteurgraphique_.largeur)
                                    {
                                        if (moi_.i + k == absx && moi_.j + (p - k) == ordy)
                                        {
                                            moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[absx, ordy].pointeurArmee].bataillon[moteurgraphique_.map[absx, ordy].pointeurUnite], p, moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                        }
                                        else if (moi_.i - k >= 0 && moi_.i - k < moteurgraphique_.longueur &&
                                                 moi_.j - (p - k) >= 0 && moi_.j - (p - k) < moteurgraphique_.largeur)
                                        {
                                            if (moi_.i - k == absx && moi_.j - (p - k) == ordy)
                                            {
                                                moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[absx, ordy].pointeurArmee].bataillon[moteurgraphique_.map[absx, ordy].pointeurUnite], p, moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                            }
                                            else if (moi_.i + (p - k) >= 0 && moi_.i + (p - k) < moteurgraphique_.longueur &&
                                                     moi_.j - k >= 0 && moi_.j - k < moteurgraphique_.largeur)
                                            {
                                                if (moi_.i + (p - k) == absx && moi_.j - k == ordy)
                                                {
                                                    moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[absx, ordy].pointeurArmee].bataillon[moteurgraphique_.map[absx, ordy].pointeurUnite], p, moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                                }
                                                else if (moi_.i - (p - k) >= 0 && moi_.i - (p - k) < moteurgraphique_.longueur &&
                                                         moi_.j + k >= 0 && moi_.j + k < moteurgraphique_.largeur)
                                                {
                                                    if (moi_.i - (p - k) == absx && moi_.j + k == ordy)
                                                    {
                                                        moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[absx, ordy].pointeurArmee].bataillon[moteurgraphique_.map[absx, ordy].pointeurUnite], p, moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    #endregion
                }
            }
        }
 public void checkContenuDansPorteeDebileJoute(MoteurGraphique moteurgraphique_, int portee_, Unite moi_, SystemeDeJeu gameplay_, HUD hud_)
 {
     //cible : gameplay_.armees[moteurgraphique_.map[i_, j_].pointeurArmee].bataillon[moteurgraphique_.map[i_, j_].pointeurUnite]
     cibleAcquise = false;
     for (int k = 0; k < portee_; k++)
     {
         if (moi_.i + k >= 0 && moi_.i + k < moteurgraphique_.longueur
             && moi_.j + (portee_ - k) >= 0 && moi_.j + (portee_ - k) < moteurgraphique_.largeur)
         {
             if (moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].presence && cibleAcquise == false &&
                 moi_.attaqOrNot && moi_.numeroArmee != moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee)
             {
                 moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurArmee]
                     .bataillon[moteurgraphique_.map[moi_.i + k, moi_.j + (portee_ - k)].pointeurUnite], portee_,
                     moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                 cibleAcquise = true;
             }
         }
         if (moi_.i - k >= 0 && moi_.i - k < moteurgraphique_.longueur
              && moi_.j - (portee_ - k) >= 0 && moi_.j - (portee_ - k) < moteurgraphique_.largeur)
         {
             if (moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].presence && cibleAcquise == false &&
                 moi_.attaqOrNot && moi_.numeroArmee != moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee)
             {
                 moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurArmee]
                     .bataillon[moteurgraphique_.map[moi_.i - k, moi_.j - (portee_ - k)].pointeurUnite], portee_,
                     moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                 cibleAcquise = true;
             }
         }
         if (moi_.i + (portee_ - k) >= 0 && moi_.i + (portee_ - k) < moteurgraphique_.longueur
              && moi_.j - k >= 0 && moi_.j - k < moteurgraphique_.largeur)
         {
             if (moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].presence && cibleAcquise == false &&
                 moi_.attaqOrNot && moi_.numeroArmee != moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee)
             {
                 moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurArmee]
                     .bataillon[moteurgraphique_.map[moi_.i + (portee_ - k), moi_.j - k].pointeurUnite], portee_,
                     moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                 cibleAcquise = true;
             }
         }
         if (moi_.i - (portee_ - k) >= 0 && moi_.i - (portee_ - k) < moteurgraphique_.longueur
              && moi_.j + k >= 0 && moi_.j + k < moteurgraphique_.largeur)
         {
             if (moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].presence && cibleAcquise == false &&
                 moi_.attaqOrNot && moi_.numeroArmee != moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee)
             {
                 moi_.Initiative(gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurArmee]
                     .bataillon[moteurgraphique_.map[moi_.i - (portee_ - k), moi_.j + k].pointeurUnite], portee_,
                     moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                 cibleAcquise = true;
             }
         }
     }
 }
        public void deplacementMoyenJoute(MoteurGraphique moteurgraphique_, SystemeDeJeu gameplay_, Unite moi_, Armee armee_, HUD hud_)
        {
            dejaBienPlace = false;
            ilABouger = false;
            List<Unite> unitesEnnemis = new List<Unite>();
            List<int> distanceAvecEnnemis = new List<int>();
            List<Vector2> positionsEnnemies = new List<Vector2>();
            List<int> porteesDeMeilleuresPrecisions = new List<int>();
            int porteeMax = 0;

            if (moi_.alive)
            {
                for (int c = 0; c < 7; c++)
                {
                    if (moi_.portee[c] > 0)
                    {
                        porteeMax = c;
                    }
                }

                #region ajouterToutesLesUnitesEnnemies

                for (int wazaaa = 0; wazaaa < gameplay_.listeDesJoueurs.Count; wazaaa++)
                {
                    if (gameplay_.listeDesJoueurs[wazaaa].camp != gameplay_.listeDesJoueurs[moteurgraphique_.map[moi_.i, moi_.j].pointeurArmee].camp)
                    {
                        foreach (Unite unite in gameplay_.listeDesJoueurs[wazaaa].bataillon)
                        {
                            if (unite.alive && Math.Abs(moi_.i - unite.i) + Math.Abs(moi_.j - unite.j) <= (moi_.mouvement + porteeMax))
                            {
                                unitesEnnemis.Add(unite);
                                distanceAvecEnnemis.Add(Math.Abs(moi_.i - unite.i) + Math.Abs(moi_.j - unite.j));
                                positionsEnnemies.Add(new Vector2(unite.i, unite.j));
                            }
                        }
                    }
                }

                #endregion

                #region obtenirUneListeDesMeilleuresPorteesDePrecision

                for (int f = 10; f > 0; f--)
                {
                    for (int g = porteeMax; g > 0; g--)
                    {
                        if (moi_.portee[g] == f)
                        {
                            porteesDeMeilleuresPrecisions.Add(g);
                        }
                    }
                }
                #endregion

                #region trouverEnnemiLeMieuxPlace

                #region preTestDuLosange
                if (ilABouger == false && dejaBienPlace == false)
                {
                    for (int i = distanceAvecEnnemis.Count - 1; i >= 0; i--)
                    {
                        ilAFaussementBouger = false;

                        for (int n = porteesDeMeilleuresPrecisions.Count - 1; n > 0; n--)
                        {
                            for (int j = 0; j <= porteesDeMeilleuresPrecisions[n] - 1; j++)
                            {
                                if (porteesDeMeilleuresPrecisions[n] == distanceAvecEnnemis[i])
                                {
                                    ilAFaussementBouger = true;
                                }
                                else
                                {
                                    if ((int)positionsEnnemies[i].X + j >= 0 && (int)positionsEnnemies[i].X + j < moteurgraphique_.longueur &&
                                        (int)positionsEnnemies[i].Y + (porteesDeMeilleuresPrecisions[n] - j) >= 0 && (int)positionsEnnemies[i].Y + (porteesDeMeilleuresPrecisions[n] - j) < moteurgraphique_.largeur)
                                    {
                                        if (moteurgraphique_.map[(int)positionsEnnemies[i].X + j, (int)positionsEnnemies[i].Y + (porteesDeMeilleuresPrecisions[n] - j)].cheminValid)
                                        {
                                            ilAFaussementBouger = true;
                                        }
                                        else if ((int)positionsEnnemies[i].X - j >= 0 && (int)positionsEnnemies[i].X - j < moteurgraphique_.longueur &&
                                                 (int)positionsEnnemies[i].Y - (porteesDeMeilleuresPrecisions[n] - j) >= 0 && (int)positionsEnnemies[i].Y - (porteesDeMeilleuresPrecisions[n] - j) < moteurgraphique_.largeur)
                                        {
                                            if (moteurgraphique_.map[(int)positionsEnnemies[i].X - j, (int)positionsEnnemies[i].Y - (porteesDeMeilleuresPrecisions[n] - j)].cheminValid)
                                            {
                                                ilAFaussementBouger = true;
                                            }
                                            else if ((int)positionsEnnemies[i].X + (porteesDeMeilleuresPrecisions[n] - j) >= 0 && (int)positionsEnnemies[i].X + (porteesDeMeilleuresPrecisions[n] - j) < moteurgraphique_.longueur &&
                                                     (int)positionsEnnemies[i].Y - j >= 0 && (int)positionsEnnemies[i].Y - j < moteurgraphique_.largeur)
                                            {
                                                if (moteurgraphique_.map[(int)positionsEnnemies[i].X + (porteesDeMeilleuresPrecisions[n] - j), (int)positionsEnnemies[i].Y - j].cheminValid)
                                                {
                                                    ilAFaussementBouger = true;
                                                }
                                                else if ((int)positionsEnnemies[i].X - (porteesDeMeilleuresPrecisions[n] - j) >= 0 && (int)positionsEnnemies[i].X - (porteesDeMeilleuresPrecisions[n] - j) < moteurgraphique_.longueur &&
                                                         (int)positionsEnnemies[i].Y + j >= 0 && (int)positionsEnnemies[i].Y + j < moteurgraphique_.largeur)
                                                {
                                                    if (moteurgraphique_.map[(int)positionsEnnemies[i].X - (porteesDeMeilleuresPrecisions[n] - j), (int)positionsEnnemies[i].Y + j].cheminValid)
                                                    {
                                                        ilAFaussementBouger = true;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        if (ilAFaussementBouger == false)
                        {
                            distanceAvecEnnemis.RemoveAt(i);
                            unitesEnnemis.RemoveAt(i);
                            positionsEnnemies.RemoveAt(i);
                        }
                    }
                }
                #endregion

                while (distanceAvecEnnemis.Count > 1)
                {
                    for (int i = 0; i < distanceAvecEnnemis.Count - 1; i++)
                    {
                        if (gameplay_.listeDesJoueurs[moteurgraphique_.map[(int)positionsEnnemies[i].X, (int)positionsEnnemies[i].Y].pointeurArmee].bataillon[moteurgraphique_.map[(int)positionsEnnemies[i].X, (int)positionsEnnemies[i].Y].pointeurUnite].pvactuel <
                            gameplay_.listeDesJoueurs[moteurgraphique_.map[(int)positionsEnnemies[i + 1].X, (int)positionsEnnemies[i + 1].Y].pointeurArmee].bataillon[moteurgraphique_.map[(int)positionsEnnemies[i + 1].X, (int)positionsEnnemies[i + 1].Y].pointeurUnite].pvactuel)
                        {
                            unitesEnnemis.RemoveAt(i + 1);
                            positionsEnnemies.RemoveAt(i + 1);
                            distanceAvecEnnemis.RemoveAt(i + 1);
                        }
                        else
                        {
                            unitesEnnemis.RemoveAt(i);
                            positionsEnnemies.RemoveAt(i);
                            distanceAvecEnnemis.RemoveAt(i);
                        }
                    }
                }

                #endregion

                #region deplacementVersEnnemiLePlusPratique

                if (distanceAvecEnnemis.Count > 0)
                {
                    #region seMettreALaMeilleurePortee

                    for (int i = 0; i < porteesDeMeilleuresPrecisions.Count; i++)
                    {
                        for (int j = 0; j <= porteesDeMeilleuresPrecisions[i] - 1; j++)
                        {
                            if (ilABouger == false && dejaBienPlace == false)
                            {
                                if (porteesDeMeilleuresPrecisions[i] == distanceAvecEnnemis[0])
                                {
                                    dejaBienPlace = true;
                                    moi_.Initiative(unitesEnnemis[0], porteesDeMeilleuresPrecisions[i], moteurgraphique_, gameplay_, ref gameplay_.mood, hud_);
                                }
                                else
                                {
                                    if ((int)positionsEnnemies[0].X + j >= 0 && (int)positionsEnnemies[0].X + j < moteurgraphique_.longueur &&
                                        (int)positionsEnnemies[0].Y + (porteesDeMeilleuresPrecisions[i] - j) >= 0 && (int)positionsEnnemies[0].Y + (porteesDeMeilleuresPrecisions[i] - j) < moteurgraphique_.largeur)
                                    {
                                        if (moteurgraphique_.map[(int)positionsEnnemies[0].X + j, (int)positionsEnnemies[0].Y + (porteesDeMeilleuresPrecisions[i] - j)].cheminValid)
                                        {
                                            ilABouger = true;
                                            moi_.PathFindingLoohy(moteurgraphique_, (int)positionsEnnemies[0].X + j, (int)positionsEnnemies[0].Y + (porteesDeMeilleuresPrecisions[i] - j));
                                        }
                                        else if ((int)positionsEnnemies[0].X - j >= 0 && (int)positionsEnnemies[0].X - j < moteurgraphique_.longueur &&
                                                 (int)positionsEnnemies[0].Y - (porteesDeMeilleuresPrecisions[i] - j) >= 0 && (int)positionsEnnemies[0].Y - (porteesDeMeilleuresPrecisions[i] - j) < moteurgraphique_.largeur)
                                        {
                                            if (moteurgraphique_.map[(int)positionsEnnemies[0].X - j, (int)positionsEnnemies[0].Y - (porteesDeMeilleuresPrecisions[i] - j)].cheminValid)
                                            {
                                                ilABouger = true;
                                                moi_.PathFindingLoohy(moteurgraphique_, (int)positionsEnnemies[0].X - j, (int)positionsEnnemies[0].Y - (porteesDeMeilleuresPrecisions[i] - j));
                                            }
                                            else if ((int)positionsEnnemies[0].X + (porteesDeMeilleuresPrecisions[i] - j) >= 0 && (int)positionsEnnemies[0].X + (porteesDeMeilleuresPrecisions[i] - j) < moteurgraphique_.longueur &&
                                                     (int)positionsEnnemies[0].Y - j >= 0 && (int)positionsEnnemies[0].Y - j < moteurgraphique_.largeur)
                                            {
                                                if (moteurgraphique_.map[(int)positionsEnnemies[0].X + (porteesDeMeilleuresPrecisions[i] - j), (int)positionsEnnemies[0].Y - j].cheminValid)
                                                {
                                                    ilABouger = true;
                                                    moi_.PathFindingLoohy(moteurgraphique_, (int)positionsEnnemies[0].X + (porteesDeMeilleuresPrecisions[i] - j), (int)positionsEnnemies[0].Y - j);
                                                }
                                                else if ((int)positionsEnnemies[0].X - (porteesDeMeilleuresPrecisions[i] - j) >= 0 && (int)positionsEnnemies[0].X - (porteesDeMeilleuresPrecisions[i] - j) < moteurgraphique_.longueur &&
                                                         (int)positionsEnnemies[0].Y + j >= 0 && (int)positionsEnnemies[0].Y + j < moteurgraphique_.largeur)
                                                {
                                                    if (moteurgraphique_.map[(int)positionsEnnemies[0].X - (porteesDeMeilleuresPrecisions[i] - j), (int)positionsEnnemies[0].Y + j].cheminValid)
                                                    {
                                                        ilABouger = true;
                                                        moi_.PathFindingLoohy(moteurgraphique_, (int)positionsEnnemies[0].X - (porteesDeMeilleuresPrecisions[i] - j), (int)positionsEnnemies[0].Y + j);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                }
                #endregion

                else
                {
                    deplacementFacileJoute(moteurgraphique_, gameplay_, moi_, armee_);
                }
            }

            if (dejaBienPlace == false && ilABouger == false && moi_.attaqOrNot)
            {
                deplacementFacileJoute(moteurgraphique_, gameplay_, moi_, armee_);
            }
        }