Exemple #1
0
        public void CheckColor(List <Point> listXYposition, Directions where, MCLog log)
        {
            listXYposition.Add(_coord); log.WriteToLog($"\r\nadd ->search in [{_coord}] dir{where} pos{_cellPosBord}\r\n");
            if (_celRel.CanGo(where))
            {
                switch (where)
                {
                case Directions.Right:
                    if (_cellCurrentColor != _celRel.nR._cellCurrentColor)
                    {
                        log.WriteToLog($"other color rihgt "); return;
                    }
                    log.WriteToLog($"go rihgt ");
                    _celRel.nR.CheckColor(listXYposition, where, log);
                    break;

                case Directions.Left:
                    if (_cellCurrentColor != _celRel.nL._cellCurrentColor)
                    {
                        log.WriteToLog($"other color left "); return;
                    }
                    log.WriteToLog($"go left ");
                    _celRel.nL.CheckColor(listXYposition, where, log);
                    break;

                case Directions.Top:
                    if (_cellCurrentColor != _celRel.nT._cellCurrentColor)
                    {
                        log.WriteToLog($"other color top "); return;
                    }
                    log.WriteToLog($"go top ");
                    _celRel.nT.CheckColor(listXYposition, where, log);
                    break;

                case Directions.Down:
                    if (_cellCurrentColor != _celRel.nD._cellCurrentColor)
                    {
                        log.WriteToLog($"other color down "); return;
                    }
                    ;
                    log.WriteToLog($"go down ");
                    _celRel.nD.CheckColor(listXYposition, where, log);
                    break;

                case Directions.RightTop:
                    if (_cellCurrentColor != _celRel.nTR._cellCurrentColor)
                    {
                        log.WriteToLog($"other color righttop "); return;
                    }
                    log.WriteToLog($"go righttop ");
                    _celRel.nTR.CheckColor(listXYposition, where, log);
                    break;

                case Directions.LeftTop:
                    if (_cellCurrentColor != _celRel.nTL._cellCurrentColor)
                    {
                        log.WriteToLog($"other color lefttop "); return;
                    }
                    log.WriteToLog($"go lefttop ");
                    _celRel.nTL.CheckColor(listXYposition, where, log);
                    break;

                case Directions.RightDown:
                    if (_cellCurrentColor != _celRel.nDR._cellCurrentColor)
                    {
                        log.WriteToLog($"other color rightdown "); return;
                    }
                    log.WriteToLog($"go rightdown ");
                    _celRel.nDR.CheckColor(listXYposition, where, log);
                    break;

                case Directions.LeftDown:
                    if (_cellCurrentColor != _celRel.nDL._cellCurrentColor)
                    {
                        log.WriteToLog($"other color leftdown "); return;
                    }
                    log.WriteToLog($"go leftdown ");
                    _celRel.nDL.CheckColor(listXYposition, where, log);
                    break;

                default:
                    break;
                }
            }
            else
            {
                log.WriteToLog($"\r\ncan't go {where} \r\n---"); return;
            }
        }
Exemple #2
0
        void CheckLine(Point P)
        {
            log.WriteToLog($"Start search [{P.Y},{P.X}]\r\n-------------");
            if (P.X == -1)
            {
                return;
            }
            List <Point> line0 = new List <Point>(); //right
            List <Point> line1 = new List <Point>(); //left
            List <Point> line2 = new List <Point>(); //top
            List <Point> line3 = new List <Point>(); //down
            List <Point> line4 = new List <Point>(); //RightTop
            List <Point> line5 = new List <Point>(); //LeftTop
            List <Point> line6 = new List <Point>(); //RightDown
            List <Point> line7 = new List <Point>(); //LeftDown
            int          i     = 7;

            while (i != -1)
            {
                switch ((Directions)i)
                {
                case Directions.Right:

                    _grid[(int)P.Y, (int)P.X].CheckColor(line0, Directions.Right, log);
                    break;

                case Directions.Left:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line1, Directions.Left, log);
                    break;

                case Directions.Top:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line2, Directions.Top, log);
                    break;

                case Directions.Down:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line3, Directions.Down, log);
                    break;

                case Directions.RightTop:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line4, Directions.RightTop, log);
                    break;

                case Directions.LeftTop:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line5, Directions.LeftTop, log);
                    break;

                case Directions.RightDown:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line6, Directions.RightDown, log);
                    break;

                case Directions.LeftDown:
                    _grid[(int)P.Y, (int)P.X].CheckColor(line7, Directions.LeftDown, log);
                    break;

                default:
                    break;
                }
                i--;
            }

            log.WriteToLog($"\r\n--------\r\n");
            if (line0.Count > 0 && line1.Count > 0)
            {
                LinesMerge(line0, line1); line1.Clear(); log.WriteToLog($"++ balls left and right\r\n");
            }
            if (line2.Count > 0 && line3.Count > 0)
            {
                LinesMerge(line2, line3); line3.Clear(); log.WriteToLog($"++ balls top and down\r\n");
            }
            if (line4.Count > 0 && line7.Count > 0)
            {
                LinesMerge(line4, line7); line7.Clear(); log.WriteToLog($"++ balls rightTop and leftDown\r\n");
            }
            if (line5.Count > 0 && line6.Count > 0)
            {
                LinesMerge(line5, line6); line6.Clear(); log.WriteToLog($"++ balls leftTop and rightDown\r\n");
            }

            log.WriteToLog($"\r\n--------\r\n");
            if (line0.Count >= 5)
            {
                _listReBuild.AddRange(line0); log.WriteToLog($"L0 -{line0.Count}  addLR \r\n");
            }
            if (line1.Count >= 5)
            {
                _listReBuild.AddRange(line1); log.WriteToLog($"L1 -{line1.Count}  addLR \r\n");
            }
            if (line2.Count >= 5)
            {
                _listReBuild.AddRange(line2); log.WriteToLog($"L2 -{line2.Count}  addLR \r\n");
            }
            if (line3.Count >= 5)
            {
                _listReBuild.AddRange(line3); log.WriteToLog($"L3 -{line3.Count}  addLR \r\n");
            }
            if (line4.Count >= 5)
            {
                _listReBuild.AddRange(line4); log.WriteToLog($"L4 -{line4.Count}  addLR \r\n");
            }
            if (line5.Count >= 5)
            {
                _listReBuild.AddRange(line5); log.WriteToLog($"L5 -{line5.Count}  addLR \r\n");
            }
            if (line6.Count >= 5)
            {
                _listReBuild.AddRange(line6); log.WriteToLog($"L6 -{line6.Count}  addLR \r\n");
            }
            if (line7.Count >= 5)
            {
                _listReBuild.AddRange(line7); log.WriteToLog($"L7 -{line7.Count}  addLR \r\n");
            }

            log.WriteToLog($"List rebuild added: {_listReBuild.Count} balls\r\n--------\r\n");
        }