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_); } }