Example #1
0
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (lg == null)
            {
                return;
            }
            GraphicsPath GP = new GraphicsPath();

            e.Graphics.FillRectangle(b, 0, 0, lg.w * cellWidth, lg.h * cellWidth);
            if (selectedCell != null)
            {
                e.Graphics.FillRectangle(selCellBr, selectedCell.GetC() * cellWidth + lineWidth
                                         , selectedCell.GetR() * cellWidth + lineWidth,
                                         cellWidth - lineWidth * 2, cellWidth - lineWidth * 2);
            }
            if (finCell != null)
            {
                e.Graphics.FillRectangle(finCellBr, finCell.GetC() * cellWidth + lineWidth
                                         , finCell.GetR() * cellWidth + lineWidth,
                                         cellWidth - lineWidth * 2, cellWidth - lineWidth * 2);
            }

            for (int i = 0; i < lg.h; i++)
            {
                for (int j = 0; j < lg.w; j++)
                {
                    GP.StartFigure();
                    if (!EmumMedods.HasFlag(lg.map[i][j], CellOptions.EXIT_NORTH))
                    {
                        GP.AddLine(j * cellWidth, i * cellWidth,
                                   (j + 1) * cellWidth, i * cellWidth);
                    }
                    GP.StartFigure();
                    if (!EmumMedods.HasFlag(lg.map[i][j], CellOptions.EXIT_EAST))
                    {
                        GP.AddLine((j + 1) * cellWidth, i * cellWidth,
                                   (j + 1) * cellWidth, (i + 1) * cellWidth);
                    }
                    GP.StartFigure();
                    if (!EmumMedods.HasFlag(lg.map[i][j], CellOptions.EXIT_SOUTH))
                    {
                        GP.AddLine((j + 1) * cellWidth, (i + 1) * cellWidth,
                                   j * cellWidth, (i + 1) * cellWidth);
                    }
                    GP.StartFigure();
                    if (!EmumMedods.HasFlag(lg.map[i][j], CellOptions.EXIT_WEST))
                    {
                        GP.AddLine(j * cellWidth, i * cellWidth,
                                   j * cellWidth, (i + 1) * cellWidth);
                    }
                }
            }

            e.Graphics.DrawPath(p, GP);

            if (selectedCell != null && finCell != null)
            {
                DrawWay(e);
            }
        }
Example #2
0
        public static int[][] Converct(LabGen lg)
        {
            int[][] mass;
            int     n    = lg.h * lg.w;
            Rcv     rcv  = new Rcv(lg.w);
            Rcv     rcv2 = new Rcv(lg.w);

            mass = new int[n][];
            for (int i = 0; i < n; i++)
            {
                mass[i] = new int[n];
                for (int j = 0; j < n; j++)
                {
                    if (i != j)
                    {
                        mass[i][j] = int.MaxValue;
                    }
                    else
                    {
                        mass[i][j] = 0; // каждый связан с самим собой
                    }
                }
            }

            for (int i = 0; i < n; i++)
            {
                rcv.Val = i;

                for (int j = 0; j < n; j++)
                {
                    if (EmumMedods.HasFlag(lg.map[rcv.Row][rcv.Col], CellOptions.EXIT_NORTH) &&
                        LabGen.InMazeBorders(rcv.Row - 1, rcv.Col, lg.h, lg.w))
                    {
                        rcv2.SetRC(rcv.Row - 1, rcv.Col);
                        mass[i][rcv2.Val] = 1;
                    }

                    if (EmumMedods.HasFlag(lg.map[rcv.Row][rcv.Col], CellOptions.EXIT_SOUTH) &&
                        LabGen.InMazeBorders(rcv.Row + 1, rcv.Col, lg.h, lg.w))
                    {
                        rcv2.SetRC(rcv.Row + 1, rcv.Col);
                        mass[i][rcv2.Val] = 1;
                    }

                    if (EmumMedods.HasFlag(lg.map[rcv.Row][rcv.Col], CellOptions.EXIT_EAST) &&
                        LabGen.InMazeBorders(rcv.Row, rcv.Col + 1, lg.h, lg.w))
                    {
                        rcv2.SetRC(rcv.Row, rcv.Col + 1);
                        mass[i][rcv2.Val] = 1;
                    }

                    if (EmumMedods.HasFlag(lg.map[rcv.Row][rcv.Col], CellOptions.EXIT_WEST) &&
                        LabGen.InMazeBorders(rcv.Row, rcv.Col - 1, lg.h, lg.w))
                    {
                        rcv2.SetRC(rcv.Row, rcv.Col - 1);
                        mass[i][rcv2.Val] = 1;
                    }
                }
            }

            return(mass);
        }