Example #1
0
    /// <summary>Déplacement des unités de l'IA lorsqu'il a la main sur les territoires non occupés par un ennemi.</summary>
    public void IAUniteDeploiement()
    {
        Dictionary <int, Territoire> .Enumerator territoiresEnum = coloredTerritories.Territoires.GetEnumerator();
        bool deploye = false;

        // Recherche d'un territoire libre pour le réclamer et y placer une infanterie
        while (!deploye && territoiresEnum.MoveNext())
        {
            if (territoiresEnum.Current.Value.joueur == null)
            {
                deploye = true;
                Territoire newTerritoire = territoiresEnum.Current.Value;

                newTerritoire.joueur = this;
                AddTerritoire(newTerritoire);

                Infanterie newUnit = boutique.CreateUnit(
                    (int)Utils.unitCode.Infanterie,
                    GameObject.Find("Unites").transform,
                    newTerritoire.position, this
                    ).gameObject.GetComponent <Infanterie>();
                newUnit.territoire = newTerritoire;
                newTerritoire.unites.Add(newUnit);
            }
        }
    }
Example #2
0
        public Manche(int nb, IDictionary <int, string> difficulte)
        {
            Infanterie inf   = new Infanterie("soldat", null);
            Char       char1 = new Char("Char", null);


            for (int i = 0; i < computeNbEnemies(nb); i++)
            {
                this.ennemies.Add(computeEnemies(new Random().Next(2)));
            }
        }
Example #3
0
    private IEnumerator Start()
    {
        int nbrJoueurs = 1, nbrIas = 1, i = 0;

        joueurs = new Dictionary <int, Joueur>(nbrJoueurs);
        Transform joueursGameObject            = GameObject.Find("Joueurs").transform;

        // Création des joueurs.
        for (i = 0; i < nbrJoueurs; i++)
        {
            Instantiate(playerPrefabs[0], joueursGameObject);

            Joueur joueur = joueursGameObject.GetChild(joueursGameObject.childCount - 1).GetComponent <Joueur>();
            InitialisePlayer(joueur, "Joueur" + (i + 1), true, (Utils.couleurs)i);

            joueurs.Add(i, joueur);
        }

        for (i = 0; i < nbrIas; i++)
        {
            Instantiate(playerPrefabs[1], joueursGameObject);

            IAEasy iae = joueursGameObject.GetChild(joueursGameObject.childCount - 1).GetComponent <IAEasy>();
            InitialisePlayer(iae, "IA" + (i + 1), false, (Utils.couleurs)nbrJoueurs + i);

            joueurs.Add(nbrJoueurs + i, iae);
        }

        territoires = coloredTerritories.Territoires;
        routes      = coloredTerritories.Routes;
        List <Territoire> territoireAAttribuer = new List <Territoire>(territoires.Count);

        System.Random rand                     = new System.Random();

        for (i = 0; i < territoires.Count; i++)
        {
            territoireAAttribuer.Add(territoires[i]);
        }

        i = 0;
        BoutiqueManager boutique = GameObject.Find("Boutique button").GetComponent <BoutiqueManager>();

        // Ajout de territoires aux joueurs de façon arbitraire.
        while (territoireAAttribuer.Count > 0)
        {
            // Sélection aléatoire du territoire à attribuer.
            int index = rand.Next(0, territoireAAttribuer.Count);

            while (joueurs[i % joueurs.Count].Ready == false)
            {
                yield return(null);
            }

            joueurs[i % joueurs.Count].Territoires.Add(territoireAAttribuer[index].Num, territoireAAttribuer[index]);

            // Ajout d'une infanterie pour marquer quel territoire appartient à qui.
            Infanterie newUnit = boutique.CreateUnit(
                (int)Utils.unitCode.Infanterie,
                GameObject.Find("Unites").transform,
                territoireAAttribuer[index].position,
                joueurs[i % joueurs.Count]
                ).GetComponent <Infanterie>();

            newUnit.territoire = territoireAAttribuer[index];

            territoireAAttribuer[index].unites.Add(newUnit);
            territoireAAttribuer[index].joueur = joueurs[i % joueurs.Count];
            territoireAAttribuer.RemoveAt(index);
            i++;

            // Au cas où ce serait un peu long.
            yield return(null);
        }

        // Application des bonnes couleurs pour chaque unité.
        for (i = 0; i < joueurs.Count; i++)
        {
            foreach (Unite unit in joueurs[i].Unites)
            {
                unit.lightMaterial = joueurs[i].Material;
                unit.darkMaterial  = joueurs[i].DarkMaterial;

                unit.ApplyMaterial(unit.darkMaterial);
            }
        }

        // Initialisation des fonds du premier joueur.
        joueurs[0].AjouterCredits(joueurs[0].EstimatedEarnings());
    }
Example #4
0
    /// <summary>
    /// Détruit les unités terrestres et aériennes en fonction du résultat des dés.
    /// </summary>
    /// <param name="diceAtt">int[] Les dés de l'attaquant.</param>
    /// <param name="diceDef">int[] Les dés du défenseur</param>
    /// <param name="ranged">bool Variable d'état définissant si l'attaque est à distance ou non.</param>
    private void DestroyUnits(int[] diceAtt, int[] diceDef, bool ranged)
    {
        int toDestroyAtt = 0, toDestroyDef = 0;
        int totalAtt = 0, totalDef = 0, i = 0;

        // Tri dans l'ordre croissant
        Array.Sort(diceAtt);
        Array.Sort(diceDef);

        // Comparaison des plus gros chiffres tirés par chaque joueur
        if (diceAtt[diceAtt.Length - 1] > diceDef[diceDef.Length - 1])
        {
            toDestroyDef++;
        }
        else
        {
            toDestroyAtt++;
        }


        // Comparaison des seconds plus gros chiffres tirés par chaque joueur
        if (diceAtt.Length > 1 && diceDef.Length > 1)
        {
            if (diceAtt[diceAtt.Length - 2] > diceDef[diceDef.Length - 2])
            {
                toDestroyDef++;
            }
            else
            {
                toDestroyAtt++;
            }
        }

        // Somme des dés de l'attaque
        for (i = 0; i < diceAtt.Length; i++)
        {
            totalAtt += diceAtt[i];
        }

        // Somme des dés de la défense
        for (i = 0; i < diceDef.Length; i++)
        {
            totalDef += diceDef[i];
        }

        // Si la somme de l'attaquant est supérieure au défenseur, on détruit un tank du défenseur s'il y en a
        if (totalAtt > totalDef)
        {
            unitDef = DestroyTank(unitDef, true);
        }
        else// Autrement, c'est un tank de l'attaquant
        {
            unitAtt = DestroyTank(unitAtt, false);
        }

        List <Dca> dcasInRange = territoireCible.GetDcaInRange();

        if (toDestroyAtt > 0 && unitAtt.Count > 0 && (!ranged || (unitAtt[0].GetType().Name == "Bombardier" && dcasInRange.Count > 0)))
        {
            List <Unite> .Enumerator unitesEnum = unitAtt.GetEnumerator();
            List <Unite>             toDestroy  = new List <Unite>();

            // On ne peut détruire plus de bombardier qu'il n'y a de DCA.
            // Si unitAtt[0] == null alors il s'agissait d'un tank donc la liste ne contient pas de bombardier
            if (unitAtt[0] != null && unitAtt[0].GetType().Name == "Bombardier")
            {
                toDestroyAtt = Math.Min(toDestroyAtt, dcasInRange.Count);
            }

            while (toDestroyAtt > 0 && unitesEnum.MoveNext())
            {
                if (unitesEnum.Current.GetType().Name != "Tank")
                {
                    if (unitesEnum.Current.GetType().Name == "Bombardier")
                    {
                        unitesDetruitesAtt[(int)Utils.unitCode.Bombardier]++;
                    }

                    if (unitesEnum.Current.GetType().Name == "Infanterie")
                    {
                        unitesDetruitesAtt[(int)Utils.unitCode.Infanterie]++;
                    }

                    foreach (Unite unit in unitAtt)
                    {
                        if (!unit.Equals(unitesEnum.Current))
                        {
                            unit.RemoveFromSelection(unitesEnum.Current);
                        }
                    }

                    toDestroy.Add(unitesEnum.Current);

                    --toDestroyAtt;
                }
            }

            foreach (Unite unit in toDestroy)
            {
                if (unit.GetType().Name == "Bombardier")
                {
                    Bombardier bomber = unit as Bombardier;

                    bomber.territoire.unites.Remove(bomber);
                }

                if (unit.GetType().Name == "Infanterie")
                {
                    Infanterie infanterie = unit as Infanterie;

                    infanterie.territoire.unites.Remove(infanterie);
                }

                unit.Joueur.Unites.Remove(unit);
                unitAtt.Remove(unit);
                Destroy(unit.gameObject);
            }
        }

        // Si c'est une attaque à distance, on laisse une unité en vie.
        int minUnitToLeaveAlive = ranged ? 1 : 0;

        if (toDestroyDef > minUnitToLeaveAlive)
        {
            List <Bombardier> bombardiers = new List <Bombardier>();
            List <Dca>        dcas        = new List <Dca>();
            List <Artillerie> artilleries = new List <Artillerie>();
            List <Infanterie> infanteries = new List <Infanterie>();

            foreach (Unite unit in unitDef)
            {
                if (unit.GetType().Name == "Bombardier")
                {
                    bombardiers.Add(unit as Bombardier);
                }

                if (unit.GetType().Name == "Dca")
                {
                    dcas.Add(unit as Dca);
                }

                if (unit.GetType().Name == "Artillerie")
                {
                    artilleries.Add(unit as Artillerie);
                }

                if (unit.GetType().Name == "Infanterie")
                {
                    infanteries.Add(unit as Infanterie);
                }
            }

            List <Bombardier> .Enumerator bombardiersEnum = bombardiers.GetEnumerator();
            List <Dca> .Enumerator        dcasEnum        = dcas.GetEnumerator();
            List <Artillerie> .Enumerator artilleriesEnum = artilleries.GetEnumerator();
            List <Infanterie> .Enumerator infanteriesEnum = infanteries.GetEnumerator();
            List <Unite> toDestroy = new List <Unite>();

            while (toDestroyDef > minUnitToLeaveAlive && bombardiersEnum.MoveNext())
            {
                unitesDetruitesDef[(int)Utils.unitCode.Bombardier]++;
                bombardiersEnum.Current.territoire.unites.Remove(bombardiersEnum.Current);
                toDestroy.Add(bombardiersEnum.Current);

                --toDestroyDef;
            }

            while (toDestroyDef > minUnitToLeaveAlive && dcasEnum.MoveNext())
            {
                unitesDetruitesDef[(int)Utils.unitCode.DCA]++;
                dcasEnum.Current.territoire.unites.Remove(dcasEnum.Current);
                toDestroy.Add(dcasEnum.Current);

                --toDestroyDef;
            }

            while (toDestroyDef > minUnitToLeaveAlive && artilleriesEnum.MoveNext())
            {
                unitesDetruitesDef[(int)Utils.unitCode.Artillerie]++;
                artilleriesEnum.Current.territoire.unites.Remove(artilleriesEnum.Current);
                toDestroy.Add(artilleriesEnum.Current);

                --toDestroyDef;
            }

            while (toDestroyDef > minUnitToLeaveAlive && infanteriesEnum.MoveNext())
            {
                unitesDetruitesDef[(int)Utils.unitCode.Infanterie]++;
                infanteriesEnum.Current.territoire.unites.Remove(infanteriesEnum.Current);
                toDestroy.Add(infanteriesEnum.Current);

                --toDestroyDef;
            }

            foreach (Unite unit in toDestroy)
            {
                unit.Joueur.Unites.Remove(unit);
                unitDef.Remove(unit);
                Destroy(unit.gameObject);
            }
        }
    }