예제 #1
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="parRoot">Родиельский узел</param>
 /// <param name="parLevel">Уровень</param>
 public SolutionThree(Pipe parCurrentPipe, SolutionThree parRoot, Point parEnter, int parLevel)
 {
     _Root = parRoot;
     _Level = parLevel;
     _Enter = parEnter;
     _ChildNodes = new List<SolutionThree>();
 }
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="parRoot">Родиельский узел</param>
 /// <param name="parLevel">Уровень</param>
 public BreadthMethodSolutionThree(Move parMove, Pipe[,] parField, BreadthMethodSolutionThree parRoot, int parLevel)
 {
     _Root = parRoot;
     _Level = parLevel;
     _Move = parMove;
     _ChildNodes = new List<BreadthMethodSolutionThree>();
     _Field = parField;
 }
예제 #3
0
        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="parField">Поле</param>
        /// <param name="parColCount">количество колонок</param>
        /// <param name="parRowCount">количество строк</param>
        /// <param name="parEnter">точка входа</param>
        /// <param name="parExit">точка выхода</param>
        public Brainteaser(Pipe[,] parField, int parColCount, int parRowCount, Point parEnter, Point parExit)
        {
            _ColCount = parColCount;
            _RowCount = parRowCount;
            _Enter = parEnter;
            _Exit = parExit;

            _Field = parField;
        }
예제 #4
0
 /// <summary>
 /// Добавить дочерний узел в дерево
 /// </summary>
 /// <param name="parCurrentPipe"></param>
 /// <param name="parEneter"></param>
 public void AddChildNode(Pipe parCurrentPipe, Point parEneter)
 {
     _ChildNodes.Add(new SolutionThree(parCurrentPipe, this, parEneter, _Level++));
 }
예제 #5
0
 public void Add(Pipe parNewPipe)
 {
     _Pipes.Add(parNewPipe);
 }
 /// <summary>
 /// Добавить дочерний узел в дерево
 /// </summary>
 /// <param name="parMove"></param>
 public void AddChildNode(Move parMove, Pipe[,] parField)
 {
     _ChildNodes.Add(new BreadthMethodSolutionThree(parMove, parField, this, _Level + 1));
 }
예제 #7
0
        /// <summary>
        /// Нажате по ячейке таблицы шаблонов труб
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridViewTemplate_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //Действие задаем -добавление трубы на поле
            _Action = Actions.AdditionPipe;
            //Создаем новую трубу по образу и подобию той, на которую нажали в табличке шаблонов
            _AddedPipe = Pipe.TemplatePipes[e.ColumnIndex].Clone();
            //видоизменяем курсор...немного магии
            Bitmap img = new Bitmap(_AddedPipe.Image, new Size(FIELD_CELL_WIDTH, FIELD_CELL_HEIGTH));
            Cursor = CreateCursor(img, 2, 2);
            dataGridViewField.Cursor = CreateCursor(img, 2, 2);

            //на всякий случай активируем кнопки "Отметить вход" и "Отметиь выход"
            buttonMarkEnter.Enabled = true;
            buttonMarkExit.Enabled = true;
        }
예제 #8
0
        /// <summary>
        /// Нажате на ячейку в поле с трубами
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridViewField_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //если нажали на бордюр поля
            if (((e.ColumnIndex == 0) || (e.ColumnIndex == dataGridViewField.ColumnCount - 1) ||
                (e.RowIndex == 0) || (e.RowIndex == dataGridViewField.RowCount - 1))&&(e.ColumnIndex != e.RowIndex))
            {
                //если в данный момент действие  - указание выхода,
                if ((_Action == Actions.MarkEnter) && ((_Exit.X != e.ColumnIndex) || (_Exit.Y != e.RowIndex)))
                {
                    //на всякий случай закрашиваем старую точку входа (если она уже была отмечена ранее) в цвет бордюра
                    dataGridViewField.Rows[_Enter.Y].Cells[_Enter.X].Value = Properties.Resources.border;
                    //задаем новую точку входа
                    _Enter = new Point(e.ColumnIndex, e.RowIndex);
                    //и окрашиваем бордюр в нажатой точке цветом точки входа
                    dataGridViewField.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Properties.Resources.enter;
                    //Действие задаем - никакое
                    _Action = Actions.None;
                    //Включаем кнопку "отметить вход"
                    buttonMarkEnter.Enabled = true;
                    //задаем курсор по умолчанию
                    SetDefaultCuror();
                }
                //если дейстиве - указание выхода, то делаем все тоже самое что и со входом
                if ((_Action == Actions.MarkExit) && ((_Enter.X != e.ColumnIndex) || (_Enter.Y != e.RowIndex)))
                {
                    dataGridViewField.Rows[_Exit.Y].Cells[_Exit.X].Value = Properties.Resources.border;
                    _Exit = new Point(e.ColumnIndex, e.RowIndex);
                    dataGridViewField.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Properties.Resources.exit;

                    _Action = Actions.None;
                    buttonMarkExit.Enabled = true;
                    SetDefaultCuror();
                }
            }
            //если мы нажали по ячейке "игровой" области
            else
            {
                try
                {
                    //если текущее действие - добавление трубы, то
                    if (_Action == Actions.AdditionPipe)
                    {
                        //задаем добавляемой трубе положение соответственно тому, по какой ячейке поля мы нажали
                        _AddedPipe.Position = new Point(e.ColumnIndex, e.RowIndex);
                        //задаем картинку в ячейке на поле соответсвующую добавляемой трубе
                        dataGridViewField.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = _AddedPipe.Image;
                        //добавляем новую трубу в массив труб на поле
                        _PipesOnField[e.ColumnIndex, e.RowIndex] = _AddedPipe;
                        //ну и удаляем из памяти добавляемую трубу
                        _AddedPipe = null;
                        //действие задаем - ни какое
                        _Action = Actions.None;
                        //устанавливаем курсор по умолчанию
                        SetDefaultCuror();
                    }
                }
                catch
                {
                }
            }
        }
예제 #9
0
        /// <summary>
        /// Получить копию поля
        /// </summary>
        /// <returns></returns>
        public Pipe[,] GetCopeField()
        {
            Pipe[,] field = new Pipe[_ColCount + 2, _RowCount + 2];
            for (int i = 0; i < _ColCount + 2; i++)
                for (int j = 0; j < _RowCount + 2; j++)
                {
                    if ((object)_PipesOnField[i, j] != null)
                    {
                        field[i, j] = _PipesOnField[i, j].Clone();
                    }
                }

            return field;
        }
예제 #10
0
 /// <summary>
 /// Метод добавления отдельной трубы на поле
 /// </summary>
 /// <param name="parNewPipe">добавляемая труба</param>
 public void AddPipe(Pipe parNewPipe)
 {
     _Field[parNewPipe.Position.X, parNewPipe.Position.Y] = parNewPipe;
 }