示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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;
                }
            }
        }
示例#5
0
 public void setEmp(map map)
 {
     emp = map;
 }
示例#6
0
        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);
        }