Exemple #1
0
        public static GameStateMCTS GameStateConverter(GameState g)
        {
            //Cette méthode sert à convertir un GameState traditionel,
            //à un GameStateMCTS
            var l = new List <JoueurMCTS>();

            foreach (Player x in g.ListeDesJoueurs)
            {
                var joueur = new JoueurMCTS(x.ID);
                foreach (Planète q in x.ListeDePlanètesControllées)
                {
                    joueur.AjouterPlanète(q.Id);
                }
                joueur.NbSoldats = x.NbSoldats;
                l.Add(joueur);
            }
            var p = new List <PlanèteMCTS>();

            foreach (Planète x in g.ListeDesPlanètes)
            {
                var plan = new PlanèteMCTS(x.Id);
                plan.JoueurEnControlle = x.idDuPropriétaire;
                if (x.NiveauActuel == 0)
                {
                    plan.NbPts = 25;
                }
                else if (x.NiveauActuel == 1)
                {
                    plan.NbPts = 75;
                }
                else
                {
                    plan.NbPts = 151;
                }

                p.Add(plan);
            }
            return(new GameStateMCTS(l, p));
        }
        public static GameStateMCTS NextGameState(GameStateMCTS gs, AttackInfo a)
        {
            var lplanète         = gs.ListeDesPlanètes;
            var lplayer          = gs.ListeDesJoueurs;
            var listeDesPlanètes = new List <PlanèteMCTS>();
            var listeDesJoueurs  = new List <JoueurMCTS>();


            foreach (JoueurMCTS j in lplayer)
            {
                var playerToAdd = new JoueurMCTS(j.Id);
                playerToAdd.NbSoldats           = j.NbSoldats;
                playerToAdd.PlanètesControllées = new List <string>();
                foreach (string s in j.PlanètesControllées)
                {
                    playerToAdd.PlanètesControllées.Add(s);
                }

                listeDesJoueurs.Add(playerToAdd);
            }
            foreach (PlanèteMCTS p in lplanète)
            {
                var planetToAdd = new PlanèteMCTS(p.Id);
                planetToAdd.JoueurEnControlle = p.JoueurEnControlle;
                planetToAdd.NbPts             = p.NbPts;
                listeDesPlanètes.Add(planetToAdd);
            }

            if (a.PlanèteCible != null)              //Aucune atq
            {
                var planète   = listeDesPlanètes.Find(p => p.Id == a.PlanèteCible);
                var attaquant = listeDesJoueurs.Find(j => j.Id == a.JoueurLancantAtq);


                if (a.JoueurLancantAtq == a.JoueurSeDéfendant)                  //Atq à sois même
                {
                    planète.NbPts += a.NombreDeUnits;
                }
                else
                {
                    planète.JoueurEnControlle = a.JoueurLancantAtq;
                    attaquant.AjouterPlanète(a.PlanèteCible);
                    if (!listeDesPlanètes.Find(p => p.Id == a.PlanèteCible).EstNeutre)                     //Atq à une pNeutre
                    {
                        listeDesJoueurs.Find(j => j.Id == a.JoueurSeDéfendant).EnleverPlanète(a.PlanèteCible);
                    }
                }
            }

            //Le code pour spawn les nouveaux soldats
            foreach (JoueurMCTS j in listeDesJoueurs)
            {
                foreach (string s in j.PlanètesControllées)
                {
                    var p = listeDesPlanètes.Find(b => b.Id == s);
                    j.NbSoldats += p.NbUnitPerGen;
                }
                j.NbSoldats -= a.NombreDeUnits;
            }

            return(new GameStateMCTS(listeDesJoueurs, listeDesPlanètes));
        }