// 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)); } } } }
// Génère l'ensemble des unités public void createUnits(int nbUnits) { UnitFactory unitFct = new UnitFactory(); var posPlayers = new int[2]; IntPtr algo = ApiUtil.MapAlgo_new(); ApiUtil.MapAlgo_placePlayers(algo, Map.Width, posPlayers); foreach (KeyValuePair <int, Player> kvp in PlayersDictionary) { int idPlayer = kvp.Key; Player player = kvp.Value; UnitType race = player.Race; List <Unit> unitsList = new List <Unit>(); Position positionDepart = new Position(posPlayers[idPlayer - 1] / Map.Width, posPlayers[idPlayer - 1] % Map.Width); for (int i = 1; i <= nbUnits; i++) { unitsList.Add(unitFct.createUnit(positionDepart, player.Race, i)); } UnitsDictionary.Add(idPlayer, unitsList); } }