// Retourne le meilleur défenseur pour une position donnée public Unit choseDefender(Position position) { List <Unit> unitsListDef; Unit defender = null; float bestRatio = 0; float ratio = 0; int playerDef = (1 + 2) - CurrentPlayer; UnitsDictionary.TryGetValue(playerDef, out unitsListDef); // Retourne une liste des unités présentes à la position passée en paramètre List <Unit> unitsListAtPos = unitsListDef.FindAll(u => u.Position.Equals(position)); // Recherche l'unité disposant du meilleur ratio ptsvierestants/ptsviemax foreach (Unit u in unitsListAtPos) { ratio = (float)u.Health / (float)u.MaxHealth; if (ratio == 1) { return(u); } if (ratio > bestRatio) { bestRatio = ratio; defender = u; } } return(defender); }
public void nextUnit() { List <Unit> unitsList; UnitsDictionary.TryGetValue(CurrentPlayer, out unitsList); // On a parcouru toutes les unités if (UnitCounterTurn == UnitCount) { // Si le joueur actuel est le 1, on passe au joueur 2 if (CurrentPlayer == 1) { CurrentPlayer = 2; UnitCounterTurn = 0; nextUnit(); } // Si le joueur actuel est le 2, on passe au tour suivant else { nextTurn(); } return; } UnitCounterTurn++; Unit unit = unitsList.Find(u => u.IdUnit.Equals(UnitCounterTurn)); if (unit == null) { nextUnit(); return; } SelectedUnit = unit; }
// Retire une unité du jeu public void deleteUnit(int idPlayer, Unit unit) { List <Unit> unitsList; UnitsDictionary.TryGetValue(idPlayer, out unitsList); unitsList.Remove(unit); if (unitsList.Count == 0) { // On met fin à la partie EndTurnCommand etd = new EndTurnCommand(true); etd.execute(); } }
// Calcule le nombre de VictoryPoints génerés par l'ensemble des unités public void computeVictoryPoints() { foreach (KeyValuePair <int, Player> kvp in PlayersDictionary) { int IdPlayer = kvp.Key; Player p = kvp.Value; List <Unit> unitsList; List <Position> alreadyCounted = new List <Position>(); p.Points = 0; UnitsDictionary.TryGetValue(IdPlayer, out unitsList); foreach (Unit u in unitsList) { if (alreadyCounted.Find(pos => pos.X == u.Position.X && pos.Y == u.Position.Y) == null) { alreadyCounted.Add(u.Position); p.Points += u.computeVictoryPoint(Map.getTileAt(u.Position)); } } } }