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); }
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; } }
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); }
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); }
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); }