private void CreateMap() //permet de créer une carte { list.Clear(); arrayBoue.Clear(); arrayPiege.Clear(); arraymur.Clear(); arraydepart.Clear(); arrayfin.Clear(); emp = new map { nom_map = "Sans Titre", createurId = frmLogin.iduser, createurName = frmLogin.username }; txtBxNom.Text = emp.nom_map; int wid = 15; int hgt = 10; makemap(wid, hgt); }
private void frmEditeur_Load(object sender, EventArgs e) { if (frmJouer.idmap != 0) { idmap = frmJouer.idmap; map map = new map(); map = testcontext.map.Where(p => p.id == idmap).First <map>(); setEmp(map); loadMap(); txtBxNom.Text = map.nom_map; txtBxCreateur.Text = map.createurName; } else { CreateMap(); iduser = frmLogin.iduser; user user = new user(); user = testcontext.user.Where(p => p.id == iduser).First <user>(); setUtilisateur(user); txtBxNom.Text = "Sans Titre"; txtBxCreateur.Text = frmLogin.username; } }
private void loadMap() // permet le chargement de la carte a partir de la base de données { //taille du labyrinthe int wid = 10; int hgt = 15; CellWid = picMaze.ClientSize.Width / (wid + 2); CellHgt = picMaze.ClientSize.Height / (hgt + 2); if (CellWid > CellHgt) { CellWid = CellHgt; } else { CellHgt = CellWid; } Xmin = (picMaze.ClientSize.Width - wid * CellWid) / 2; Ymin = (picMaze.ClientSize.Height - hgt * CellHgt) / 2; arrayBoue.Clear(); arraydepart.Clear(); arrayfin.Clear(); arrayPiege.Clear(); arraymur.Clear(); nodes = new Cell[hgt, wid]; casemap casemap = new casemap(); var products = testcontext.casemap.Where(p => p.id_map == idmap); map emp = new map(); var map = testcontext.map.Where(p => p.id == idmap).First <map>(); setEmp(map); txtBxNom.Text = map.nom_map; int cal = 0; int cal2 = 0; foreach (var produit in products) //Défini le type des cases et ses coordonnées { Cell cell = new Cell(produit.x, produit.y); cell.setId(produit.id); cell.setTraversable(produit.mur); cell.setBoue(produit.boue); cell.setCellDep(produit.depart); cell.setCellEnd(produit.fin); cell.setPiege(produit.piege); if (produit.piege == true) { arrayPiege.Add(cell); } if (produit.boue == true) { arrayBoue.Add(cell); } if (produit.depart == true) { startCell = cell; arraydepart.Add(cell); } if (produit.fin == true) { endCell = cell; arrayfin.Add(cell); } if (produit.mur == false) { arraymur.Add(cell); } if (cal == wid - 1) { cal = 0; cal2 = cal2 + 1; } else { cal = cal + 1; } if (cal2 == hgt) { cal2 = 0; } nodes[cal2, cal] = cell; } setCells(nodes); for (int r = 0; r < hgt; r++) //Défini les voisins de chaque cases { for (int c = 0; c < wid; c++) { if (r > 0) { if (nodes[r - 1, c].getTraversable()) { nodes[r, c].Neighbors[Cell.North] = nodes[r - 1, c]; nodes[r, c].setVoisinNord(nodes[r - 1, c]); } else { nodes[r, c].Neighbors[Cell.North] = null; nodes[r, c].setVoisinNord(null); } } if (r < hgt - 1) { if (nodes[r + 1, c].getTraversable()) { nodes[r, c].Neighbors[Cell.South] = nodes[r + 1, c]; nodes[r, c].setVoisiSud(nodes[r + 1, c]); } else { nodes[r, c].Neighbors[Cell.South] = null; nodes[r, c].setVoisiSud(null); } if (c < wid - 1) { if (nodes[r + 1, c + 1].getTraversable()) { nodes[r, c].setVoisinSudEst(nodes[r + 1, c + 1]); } else { nodes[r, c].setVoisinSudEst(null); } if (r > 0) { if (nodes[r - 1, c + 1].getTraversable()) { nodes[r, c].setVoisinNordEst(nodes[r - 1, c + 1]); } else { nodes[r, c].setVoisinNordEst(null); } } } if (c > 0) { if (nodes[r + 1, c - 1].getTraversable()) { nodes[r, c].setVoisinSudOuest(nodes[r + 1, c - 1]); } else { nodes[r, c].setVoisinSudOuest(null); } if (r > 0) { if (nodes[r - 1, c - 1].getTraversable()) { nodes[r, c].setVoisinNordOuest(nodes[r - 1, c - 1]); } else { nodes[r, c].setVoisinNordOuest(null); } } } } if (c > 0) { if (nodes[r, c - 1].getTraversable()) { nodes[r, c].Neighbors[Cell.West] = nodes[r, c - 1]; nodes[r, c].setVoisinOuest(nodes[r, c - 1]); } else { nodes[r, c].Neighbors[Cell.West] = null; nodes[r, c].setVoisinOuest(null); } } if (c < wid - 1) { if (nodes[r, c + 1].getTraversable()) { nodes[r, c].Neighbors[Cell.East] = nodes[r, c + 1]; nodes[r, c].setVoisinEst(nodes[r, c + 1]); } else { nodes[r, c].Neighbors[Cell.East] = null; nodes[r, c].setVoisinEst(null); } } } } DisplayMaze(nodes); }
private void btnTester_Click(object sender, EventArgs e) // trouve le chemin le plus cours { list.Clear(); // DisplayMaze(getCells()); // permet l'affichage dans un picturebox makemap(15, 10); if (startCell != null && endCell != null) { var astar = new AStarSearch(getCells(), startCell, endCell); // Trouve le chemin le plus court Cell current_cell = endCell; while (current_cell != startCell) { list.Add(current_cell);//contient la liste définie par astar if (astar.cameFrom.ContainsKey(current_cell)) { current_cell = astar.cameFrom[current_cell]; if (current_cell.getPiege()) { resultat = "piégé"; list.Clear(); current_cell = astar.cameFrom[current_cell]; } } else { resultat = "non passé"; break; } } using (Graphics gr = Graphics.FromImage(bm)) { gr.SmoothingMode = SmoothingMode.AntiAlias; int u = 0; foreach (Cell i in list) //affiche le chemin le plus court { u = u + 1; i.FillRectangleWithImage(gr, chemin); } SolidBrush brushend = new SolidBrush(Color.Red); endCell.FillRectangle(gr, brushend); endCell.FillRectangleWithImage(gr, fin); } picMaze.Image = bm; //bm.Save("ez.bmp"); Bitmap image1 = bm; int x, y; int count = 0; for (x = 0; x < image1.Width; x++) { for (y = 0; y < image1.Height; y++) { Color pixelColor = image1.GetPixel(x, y); // Console.WriteLine(x + " " + y + " " +pixelColor); if (pixelColor.ToArgb() == Color.Red.ToArgb()) { count = count + 1; // Console.WriteLine(x + " " + y); } } } emp = getEmp(); if (emp.id != 0) { test test = new test { id_map = emp.id, resultat = resultat, date = DateTime.Now }; testcontext.test.Add(test); testcontext.SaveChanges(); nbCaseParcours = list.Count(); foreach (Cell cell in list) { if (cell.getBoue() == true) { nbBoueinParcours = nbBoueinParcours + 1; } } frmResultat frmResultat = new frmResultat(); frmResultat.Show(); nbBoueinParcours = 0; nbCaseParcours = 0; } else { nbCaseParcours = list.Count(); foreach (Cell cell in list) { if (cell.getBoue() == true) { nbBoueinParcours = nbBoueinParcours + 1; } } frmResultat frmResultat = new frmResultat(); frmResultat.Show(); nbBoueinParcours = 0; nbCaseParcours = 0; } } }
public void setEmp(map map) { emp = map; }
public void btn_load_Click(object sender, EventArgs e) // gère le chargement depuis la base de données { //taille du labyrinthe int wid = Int16.Parse(txtWidth.Text); int hgt = Int16.Parse(txtHeight.Text); CellWid = picMaze.ClientSize.Width / (wid + 2); CellHgt = picMaze.ClientSize.Height / (hgt + 2); if (CellWid > CellHgt) { CellWid = CellHgt; } else { CellHgt = CellWid; } Xmin = (picMaze.ClientSize.Width - wid * CellWid) / 2; Ymin = (picMaze.ClientSize.Height - hgt * CellHgt) / 2; arrayBoue.Clear(); arraydepart.Clear(); arrayfin.Clear(); arrayPiege.Clear(); arraymur.Clear(); nodes = new Cell[hgt, wid]; casemap casemap = new casemap(); /* var products = testcontext.casemap.Where(p => p.id_map == 35); * map emp = new map(); * var map = testcontext.map.Where(p => p.id == 35).First<map>();*/ int idmap; String idmapstring; idmapstring = comboBox1.SelectedValue.ToString(); idmap = Convert.ToInt32(idmapstring); var products = testcontext.casemap.Where(p => p.id_map == idmap); map emp = new map(); var map = testcontext.map.Where(p => p.id == idmap).First <map>(); setEmp(map); int cal = 0; int cal2 = 0; foreach (var produit in products) { Cell cell = new Cell(produit.x, produit.y); cell.setId(produit.id); Console.WriteLine(produit.id); Console.WriteLine(cell.getId()); cell.setTraversable(produit.mur); cell.setBoue(produit.boue); cell.setCellDep(produit.depart); cell.setCellEnd(produit.fin); cell.setPiege(produit.piege); if (produit.piege == true) { arrayPiege.Add(cell); } if (produit.boue == true) { arrayBoue.Add(cell); } if (produit.depart == true) { startCell = cell; arraydepart.Add(cell); } if (produit.fin == true) { endCell = cell; arrayfin.Add(cell); } if (produit.mur == false) { arraymur.Add(cell); } if (cal == wid - 1) { cal = 0; cal2 = cal2 + 1; } else { cal = cal + 1; } if (cal2 == hgt) { cal2 = 0; } nodes[cal2, cal] = cell; } setCells(nodes); for (int r = 0; r < hgt; r++) { for (int c = 0; c < wid; c++) { if (r > 0) { if (nodes[r - 1, c].getTraversable()) { nodes[r, c].Neighbors[Cell.North] = nodes[r - 1, c]; nodes[r, c].setVoisinNord(nodes[r - 1, c]); } else { nodes[r, c].Neighbors[Cell.North] = null; nodes[r, c].setVoisinNord(null); } } if (r < hgt - 1) { if (nodes[r + 1, c].getTraversable()) { nodes[r, c].Neighbors[Cell.South] = nodes[r + 1, c]; nodes[r, c].setVoisiSud(nodes[r + 1, c]); } else { nodes[r, c].Neighbors[Cell.South] = null; nodes[r, c].setVoisiSud(null); } if (c < wid - 1) { if (nodes[r + 1, c + 1].getTraversable()) { nodes[r, c].setVoisinSudEst(nodes[r + 1, c + 1]); } else { nodes[r, c].setVoisinSudEst(null); } if (r > 0) { if (nodes[r - 1, c + 1].getTraversable()) { nodes[r, c].setVoisinNordEst(nodes[r - 1, c + 1]); } else { nodes[r, c].setVoisinNordEst(null); } } } if (c > 0) { if (nodes[r + 1, c - 1].getTraversable()) { nodes[r, c].setVoisinSudOuest(nodes[r + 1, c - 1]); } else { nodes[r, c].setVoisinSudOuest(null); } if (r > 0) { if (nodes[r - 1, c - 1].getTraversable()) { nodes[r, c].setVoisinNordOuest(nodes[r - 1, c - 1]); } else { nodes[r, c].setVoisinNordOuest(null); } } } } if (c > 0) { if (nodes[r, c - 1].getTraversable()) { nodes[r, c].Neighbors[Cell.West] = nodes[r, c - 1]; nodes[r, c].setVoisinOuest(nodes[r, c - 1]); } else { nodes[r, c].Neighbors[Cell.West] = null; nodes[r, c].setVoisinOuest(null); } } if (c < wid - 1) { if (nodes[r, c + 1].getTraversable()) { nodes[r, c].Neighbors[Cell.East] = nodes[r, c + 1]; nodes[r, c].setVoisinEst(nodes[r, c + 1]); } else { nodes[r, c].Neighbors[Cell.East] = null; nodes[r, c].setVoisinEst(null); } } } } DisplayMaze(nodes); }