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; } }
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"); }