Exemplo n.º 1
0
        private CaseDeLaby choixCaseSuivanteEtModificationTableau(ref CaseDeLaby[,] tableauCase, List <CaseDeLaby> caseSuivantePotentiel, Stack <CaseDeLaby> LIFO)
        {
            CaseDeLaby nextCase = caseSuivantePotentiel[random.Next(0, caseSuivantePotentiel.Count)];

            if (nextCase.Abscisse == (LIFO.Peek().Abscisse - 1 + tailleCoteLaby) % tailleCoteLaby)
            {
                TableauCase[nextCase.Abscisse, nextCase.Ordonne].Sud        = true;
                TableauCase[LIFO.Peek().Abscisse, LIFO.Peek().Ordonne].Nord = true;
            }
            if (nextCase.Ordonne == (LIFO.Peek().Ordonne - 1 + tailleHauteurLaby) % tailleHauteurLaby)
            {
                TableauCase[nextCase.Abscisse, nextCase.Ordonne].Est         = true;
                TableauCase[LIFO.Peek().Abscisse, LIFO.Peek().Ordonne].Ouest = true;
            }
            if (nextCase.Abscisse == (LIFO.Peek().Abscisse + 1) % tailleCoteLaby)
            {
                TableauCase[nextCase.Abscisse, nextCase.Ordonne].Nord      = true;
                TableauCase[LIFO.Peek().Abscisse, LIFO.Peek().Ordonne].Sud = true;
            }
            if (nextCase.Ordonne == (LIFO.Peek().Ordonne + 1) % tailleHauteurLaby)
            {
                TableauCase[nextCase.Abscisse, nextCase.Ordonne].Ouest     = true;
                TableauCase[LIFO.Peek().Abscisse, LIFO.Peek().Ordonne].Est = true;
            }
            return(nextCase);
        }
Exemplo n.º 2
0
        private void generationTableauCase()
        {
            Stack <CaseDeLaby> LIFO = new Stack <CaseDeLaby>();

            for (int k = 0; k < tailleCoteLaby; k++)
            {
                for (int l = 0; l < tailleHauteurLaby; l++)
                {
                    TableauCase[k, l] = new CaseDeLaby(k, l);
                }
            }
            int i = random.Next(0, tailleCoteLaby);
            int j = random.Next(0, tailleHauteurLaby);

            LIFO.Push(TableauCase[i, j]);
            int NbCell  = 1;
            int MaxCell = tailleCoteLaby * tailleHauteurLaby;

            while (NbCell < MaxCell)
            {
                List <CaseDeLaby> caseSuivantePotentiel = generationListCaseSuivantePotentiel(i, j);
                if (caseSuivantePotentiel.Count > 0)
                {
                    CaseDeLaby nextCase = choixCaseSuivanteEtModificationTableau(ref tableauCase, caseSuivantePotentiel, LIFO);
                    LIFO.Push(nextCase);
                    NbCell++;
                }
                else
                {
                    LIFO.Pop();
                }
                i = LIFO.Peek().Abscisse;
                j = LIFO.Peek().Ordonne;
            }
        }
Exemplo n.º 3
0
        public Plateau RecupLaby(string tailleTableau, string tailleTableau2)
        {
            Labyrinthe      p       = new Labyrinthe(Convert.ToInt32(tailleTableau), Convert.ToInt32(tailleTableau2));
            Plateau         pRen    = new Plateau();
            List <Caselaby> tabCase = new List <Caselaby>();

            for (int i = 0; i < Convert.ToInt32(tailleTableau); i++)
            {
                pRen.tableaucase.Add(new LigneTab());
                for (int j = 0; j < Convert.ToInt32(tailleTableau2); j++)
                {
                    Caselaby   tempC    = new Caselaby();
                    CaseDeLaby tempCase = p.TableauCase[i, j];
                    if (tempCase.Nord)
                    {
                        tempC.info.Nord = 1;
                    }
                    if (tempCase.Sud)
                    {
                        tempC.info.Sud = 1;
                    }
                    if (tempCase.Est)
                    {
                        tempC.info.Est = 1;
                    }
                    if (tempCase.Ouest)
                    {
                        tempC.info.Ouest = 1;
                    }
                    if (tempCase.CaseDepart)
                    {
                        tempC.info.CaseDep = 1;
                    }
                    if (tempCase.CaseArrive)
                    {
                        tempC.info.CaseArr = 1;
                    }
                    if (tempCase.Perso)
                    {
                        tempC.info.Perso = 1;
                    }
                    if (tempCase.Solution)
                    {
                        tempC.info.Solution = 1;
                    }
                    if (tempCase.Piece)
                    {
                        tempC.info.Piece = 1;
                    }
                    if (tempCase.Monstre)
                    {
                        tempC.info.Monstre = 1;
                    }
                    tempC.info.Abscisse = tempCase.Abscisse;
                    tempC.info.Ordonne  = tempCase.Ordonne;
                    pRen.tableaucase[i].listecase.Add(tempC);
                }
            }
            return(pRen);
        }
Exemplo n.º 4
0
        private void generationSolution()
        {
            CaseDeLaby dep = tableauCase[random.Next(0, tailleCoteLaby), random.Next(0, tailleHauteurLaby)];
            CaseDeLaby arr = tableauCase[random.Next(0, tailleCoteLaby), random.Next(0, tailleHauteurLaby)];

            while (arr.Abscisse == dep.Abscisse && arr.Ordonne == dep.Ordonne)
            {
                dep = tableauCase[random.Next(0, tailleCoteLaby), random.Next(0, tailleHauteurLaby)];
                arr = tableauCase[random.Next(0, tailleCoteLaby), random.Next(0, tailleHauteurLaby)];
            }
            tableauCase[dep.Abscisse, dep.Ordonne].CaseDepart   = true;
            tableauCase[dep.Abscisse, dep.Ordonne].VisiteSoluce = true;
            tableauCase[dep.Abscisse, dep.Ordonne].Perso        = true;
            tableauCase[arr.Abscisse, arr.Ordonne].CaseArrive   = true;
            int i = dep.Abscisse;
            int j = dep.Ordonne;
            Stack <CaseDeLaby> LIFO = new Stack <CaseDeLaby>();

            LIFO.Push(TableauCase[i, j]);
            while (i != arr.Abscisse || j != arr.Ordonne)
            {
                List <CaseDeLaby> listCase = generationListCaseDeRechercheSuivantePotentiel(i, j);
                if (listCase.Count > 0)
                {
                    CaseDeLaby nextCase = listCase[random.Next(0, listCase.Count)];
                    tableauCase[nextCase.Abscisse, nextCase.Ordonne].VisiteSoluce = true;
                    LIFO.Push(nextCase);
                }
                else
                {
                    LIFO.Pop();
                }
                i = LIFO.Peek().Abscisse;
                j = LIFO.Peek().Ordonne;
            }
            tracerLeChemin(LIFO);
            List <CaseDeLaby> casePrise = new List <CaseDeLaby>();

            casePrise.Add(dep);
            casePrise.Add(arr);
            generationDesEntites(casePrise);
        }
Exemplo n.º 5
0
        private int generationDesMonstres(int i, ref List <CaseDeLaby> casePrise)
        {
            CaseDeLaby caseMonstre = tableauCase[random.Next(0, tailleCoteLaby), random.Next(0, tailleHauteurLaby)];
            bool       monstre     = true;

            foreach (CaseDeLaby c in casePrise)
            {
                if (c.Ordonne == caseMonstre.Ordonne && c.Abscisse == caseMonstre.Abscisse)
                {
                    monstre = false;
                }
            }
            if (monstre)
            {
                casePrise.Add(caseMonstre);
                tableauCase[caseMonstre.Abscisse, caseMonstre.Ordonne].Monstre = true;
                i++;
            }
            return(i);
        }