public Simulateur CréerSimulateur() { Simulateur unSimulateur = new Simulateur(); DonnéesInitialeSimulateurs donnéesXML = DonnéesXML.Réccupérer(); Random rand = new Random(); int longueur = donnéesXML.Fourmiliere.Carte.Longeur; int largeur = donnéesXML.Fourmiliere.Carte.Largeur; int i; Parcelle[,] parcelles = new Parcelle[longueur, largeur]; for (i = 0; i < longueur; i++) { for (int j = 0; j < largeur; j++) { parcelles[i, j] = new Parcelle(unSimulateur); unSimulateur.AjouterZone(parcelles[i, j]); if (i > 0) { unSimulateur.AjouterAccès(new Tunnel(parcelles[i, j], parcelles[i - 1, j])); } if (j > 0) { unSimulateur.AjouterAccès(new Tunnel(parcelles[i, j], parcelles[i, j - 1])); } } } Parcelle uneParcelleDeDépart = (unSimulateur.Zones[rand.Next(0, unSimulateur.Zones.Count)] as Parcelle); uneParcelleDeDépart.AjouterObjet(new Fourmiliere(unSimulateur, uneParcelleDeDépart)); for (i = 0; i < donnéesXML.Fourmiliere.Fourmis.Nombre; i++) { unSimulateur.AjouterPersonnage(new Fourmi(donnéesXML.Fourmiliere.Pheromones.Poids)); } i = 0; while (i < donnéesXML.Fourmiliere.Objectif.Nombre) { Parcelle uneParcelle = (unSimulateur.Zones[rand.Next(0, unSimulateur.Zones.Count)] as Parcelle); if (uneParcelle.estVide()) { uneParcelle.AjouterObjet(new Objectif(donnéesXML.Fourmiliere.Pheromones.Poids)); i++; } } unSimulateur.Interfaces.Add(new InterfaceGraphiqueFourmiliere(unSimulateur, largeur)); unSimulateur.Play(); return(unSimulateur); }
public void Déplacer(Fourmi uneFourmi) { if (uneFourmi.Position == null || uneFourmi.Position.PrendreObjet() is Fourmiliere) { return; } if (uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null) == 0) { return; } Parcelle uneParcelle = uneFourmi.Position.Chemins.Cast <Tunnel>().Where(x => x.autreBout(uneFourmi.Position).Occupant == null) .ElementAt(rand.Next(0, uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null))) .autreBout(uneFourmi.Position) as Parcelle; uneFourmi.Position = uneParcelle; if (uneFourmi.Position.PrendreObjet() is Objectif) { // Ne devrait pas arriver si les déplacements n'étaient pas aléatoires return; } if (uneFourmi.Position.PrendreObjet() is Fourmiliere) { uneFourmi.Etat = EtatRentrée.GetInstance; } else if (uneFourmi.DeposerPheromone() > 0) { if (uneFourmi.Position.estVide()) { uneFourmi.Position.AjouterObjet(new Pheromone(uneFourmi.Position)); (uneFourmi.Position.PrendreObjet() as Pheromone).poids += uneFourmi.DeposerPheromone(); } else if (uneFourmi.Position.PrendreObjet() is Pheromone) { (uneFourmi.Position.PrendreObjet() as Pheromone).poids += uneFourmi.DeposerPheromone(); } } }
public void Déplacer(Fourmi uneFourmi) { if (uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null) == 0) { return; } Parcelle uneParcelle = uneFourmi.Position.Chemins.Cast <Tunnel>().Where(x => x.autreBout(uneFourmi.Position).Occupant == null) .ElementAt(rand.Next(0, uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null))) .autreBout(uneFourmi.Position) as Parcelle; uneFourmi.Position = uneParcelle; if (uneFourmi.Position.PrendreObjet() is Fourmiliere) { // Ne devrait pas arriver si les déplacements n'étaient pas aléatoires return; } if (uneFourmi.Position.PrendreObjet() is Objectif) { uneFourmi.Strategie = DéplacementRetour.GetInstance; } }
public Fourmiliere(Simulateur unSimulateur, Parcelle uneParcelle) { simulateur = unSimulateur; parcelle = uneParcelle; }
public Pheromone(Parcelle uneParcelle) { parcelle = uneParcelle; poids = 0; }