_3D_Madness.Board.CheckIfModel C# (CSharp) Méthode

CheckIfModel() private méthode

private CheckIfModel ( Point node, int szukanaKrawedz ) : bool
node Point
szukanaKrawedz int
Résultat bool
        private bool CheckIfModel(Point node, int szukanaKrawedz)
        {
            Element target;
            bool first = true;
            Queue<Point> Q = new Queue<Point>();
            List<Point> policzone = new List<Point>();
            Element tmp = _board[node.X][node.Y];
            if (szukanaKrawedz == (int)Element.Edges.EndRoad) szukanaKrawedz = (int)Element.Edges.Road;
            if (szukanaKrawedz == (int)Element.Edges.EndTown) szukanaKrawedz = (int)Element.Edges.Town;

            Q.Enqueue(node);
            while (Q.Count != 0)
            {
                if (first)
                {
                    Point n = Q.Dequeue();
                    if (n.X < _board.Length - 1 && n.Y < _board[0].Length - 1 && n.X >= 1 && n.Y >= 1)
                    {
                        policzone.Add(n);
                        target = _board[n.X][n.Y];

                        if (!policzone.Contains(new Point(n.X - 1, n.Y)) && (target.leftEdge == szukanaKrawedz || target.leftEdge == szukanaKrawedz + 1))
                        {

                            //if (target.stoneLeftEdge == 1) return true;
                              if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X - 1, n.Y));
                        }

                        if (!policzone.Contains(new Point(n.X + 1, n.Y)) && (target.rightEdge == szukanaKrawedz || target.rightEdge == szukanaKrawedz + 1))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                            //if (target.stoneRightEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X + 1, n.Y));
                        }

                        if (!policzone.Contains(new Point(n.X, n.Y + 1)) && (target.upEdge == szukanaKrawedz || target.upEdge == szukanaKrawedz + 1))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                          //  if (target.stoneUpEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X, n.Y + 1));
                        }

                        if (!policzone.Contains(new Point(n.X, n.Y - 1)) && (target.bottomEdge == szukanaKrawedz || target.bottomEdge == szukanaKrawedz + 1))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                           // if (target.stoneBottomEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X, n.Y - 1));
                        }
                        first = false;
                    }
                }
                else
                {
                    Point n = Q.Dequeue();
                    if (n.X < _board.Length - 1 && n.Y < _board[0].Length - 1 && n.X >= 1 && n.Y >= 1)
                    {
                        policzone.Add(n);
                        target = _board[n.X][n.Y];
                        if (!policzone.Contains(new Point(n.X - 1, n.Y)) && (target.leftEdge == szukanaKrawedz))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                            //if (target.stoneLeftEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X - 1, n.Y));
                        }

                        if (!policzone.Contains(new Point(n.X + 1, n.Y)) && (target.rightEdge == szukanaKrawedz))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                           // if (target.stoneRightEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X + 1, n.Y));
                        }

                        if (!policzone.Contains(new Point(n.X, n.Y + 1)) && (target.upEdge == szukanaKrawedz))
                        {
                            //if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                            //if (target.stoneUpEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X, n.Y + 1));
                        }

                        if (!policzone.Contains(new Point(n.X, n.Y - 1)) && (target.bottomEdge == szukanaKrawedz))
                        {
                           // if ((target.stoneLeftEdge == 1) || (target.stoneRightEdge == 1) || (target.stoneUpEdge == 1) || (target.stoneBottomEdge == 1)) return true;
                           // if (target.stoneBottomEdge == 1) return true;
                            if (((target.stoneLeftEdge == 1) && (target.leftEdge == szukanaKrawedz)) ||
                                ((target.stoneRightEdge == 1) && (target.rightEdge == szukanaKrawedz)) ||
                                ((target.stoneUpEdge == 1) && (target.upEdge == szukanaKrawedz)) ||
                                ((target.stoneBottomEdge == 1) && (target.bottomEdge == szukanaKrawedz))) return true;
                            Q.Enqueue(new Point(n.X, n.Y - 1));
                        }
                    }
                }
            }
            return false;
        }