Пример #1
0
        // 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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        // 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();
            }
        }
Пример #4
0
 // 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));
             }
         }
     }
 }
Пример #5
0
        // 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);
            }
        }