Пример #1
0
    private IEnumerator findAllMatchesCo()
    {
        yield return(new WaitForSeconds(.2f));

        for (int i = 0; i < board.width; i++)
        {
            for (int j = 0; j < board.height; j++)
            {
                GameObject currFruit = board.allFruits[i, j];

                if (currFruit)
                {
                    if (i > 0 && i < board.width - 1)
                    {
                        GameObject left1  = board.allFruits[i - 1, j];
                        GameObject right1 = board.allFruits[i + 1, j];

                        if (left1 && right1 && left1.tag == currFruit.tag && right1.tag == currFruit.tag)
                        {
                            MatchedState state = MatchedState.three;

                            if (i > 1 && i < board.width - 2)
                            {
                                GameObject left2  = board.allFruits[i - 2, j];
                                GameObject right2 = board.allFruits[i + 2, j];

                                if (left2 && right2)
                                {
                                    if (left2.tag == currFruit.tag && right2.tag == currFruit.tag)
                                    {
                                        state = MatchedState.five;

                                        if (i > 2 && i < board.width - 2)
                                        {
                                            for (int k = i + 3; k < board.width; k++)
                                            {
                                                GameObject nextRight = board.allFruits[k, j];

                                                if (nextRight && nextRight.tag == currFruit.tag)
                                                {
                                                    if (!currMatches.Contains(nextRight))
                                                    {
                                                        currMatches.Add(nextRight);
                                                    }

                                                    nextRight.GetComponent <Fruit>().setMatch(state);
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                        }

                                        if (!currMatches.Contains(left2))
                                        {
                                            currMatches.Add(left2);
                                        }

                                        if (!currMatches.Contains(right2))
                                        {
                                            currMatches.Add(right2);
                                        }

                                        left2.GetComponent <Fruit>().setMatch(state);
                                        right2.GetComponent <Fruit>().setMatch(state);
                                    }
                                    else if (right2.tag == currFruit.tag)
                                    {
                                        state = MatchedState.four;
                                        if (!currMatches.Contains(right2))
                                        {
                                            currMatches.Add(right2);
                                        }

                                        right2.GetComponent <Fruit>().setMatch(state);
                                    }
                                }
                            }

                            if (state == MatchedState.five)
                            {
                                currFruit.tag = "bomb";
                            }
                            else if (state == MatchedState.four && !right1.CompareTag("bomb"))
                            {
                                right1.tag = "rainbow";
                            }

                            if (!currMatches.Contains(left1))
                            {
                                currMatches.Add(left1);
                            }
                            left1.GetComponent <Fruit>().setMatch(state);

                            if (!currMatches.Contains(currFruit))
                            {
                                currMatches.Add(currFruit);
                            }
                            currFruit.GetComponent <Fruit>().setMatch(state);

                            if (!currMatches.Contains(right1))
                            {
                                currMatches.Add(right1);
                            }
                            right1.GetComponent <Fruit>().setMatch(state);
                        }
                    }

                    if (j > 0 && j < board.height - 1)
                    {
                        GameObject below1 = board.allFruits[i, j - 1];
                        GameObject above1 = board.allFruits[i, j + 1];

                        if (below1 && above1 && below1.tag == currFruit.tag && above1.tag == currFruit.tag)
                        {
                            MatchedState state = MatchedState.three;

                            if (j > 1 && j < board.height - 2)
                            {
                                GameObject below2 = board.allFruits[i, j - 2];
                                GameObject above2 = board.allFruits[i, j + 2];

                                if (below2 && above2)
                                {
                                    if (below2.tag == currFruit.tag && above2.tag == currFruit.tag)
                                    {
                                        state = MatchedState.five;

                                        if (j > 2 && j < board.height - 2)
                                        {
                                            for (int k = j + 3; k < board.height; k++)
                                            {
                                                GameObject nextAbove = board.allFruits[i, k];

                                                if (nextAbove && nextAbove.tag == currFruit.tag)
                                                {
                                                    if (!currMatches.Contains(nextAbove))
                                                    {
                                                        currMatches.Add(nextAbove);
                                                    }

                                                    nextAbove.GetComponent <Fruit>().setMatch(state);
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                        }

                                        if (!currMatches.Contains(below2))
                                        {
                                            currMatches.Add(below2);
                                        }

                                        if (!currMatches.Contains(above2))
                                        {
                                            currMatches.Add(above2);
                                        }

                                        below2.GetComponent <Fruit>().setMatch(state);
                                        above2.GetComponent <Fruit>().setMatch(state);
                                    }
                                    else if (above2.tag == currFruit.tag)
                                    {
                                        state = MatchedState.four;
                                        if (!currMatches.Contains(above2))
                                        {
                                            currMatches.Add(above2);
                                        }

                                        above2.GetComponent <Fruit>().setMatch(state);
                                    }
                                }
                            }

                            if (state == MatchedState.five)
                            {
                                currFruit.tag = "bomb";
                            }
                            else if (state == MatchedState.four && !above1.CompareTag("bomb"))
                            {
                                above1.tag = "rainbow";
                            }

                            if (!currMatches.Contains(below1))
                            {
                                currMatches.Add(below1);
                            }
                            below1.GetComponent <Fruit>().setMatch(state);

                            if (!currMatches.Contains(currFruit))
                            {
                                currMatches.Add(currFruit);
                            }
                            currFruit.GetComponent <Fruit>().setMatch(state);

                            if (!currMatches.Contains(above1))
                            {
                                currMatches.Add(above1);
                            }
                            above1.GetComponent <Fruit>().setMatch(state);
                        }
                    }
                }
            }
        }
    }
Пример #2
0
 public void setMatch(MatchedState state)
 {
     setHint();
     matchedState = state;
 }