示例#1
0
    /// <summary>
    /// 交换水果位置
    /// </summary>
    /// <param name="fruit1"></param>
    /// <param name="fruit2"></param>
    void SwapFruitPosition(GameObject fruit1, GameObject fruit2)
    {
        FruitObj tmp1 = fruit1.GetComponent <FruitObj>();
        FruitObj tmp2 = fruit2.GetComponent <FruitObj>();

        Vector2 tmp = tmp1.Fruit.FruitPosition;

        tmp1.Fruit.FruitPosition = tmp2.Fruit.FruitPosition;
        tmp2.Fruit.FruitPosition = tmp;

        GameObject Objtmp = FruitSpawner.spawn.FruitGrid[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y];

        FruitSpawner.spawn.FruitGrid[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y] = fruit2;
        FruitSpawner.spawn.FruitGrid[(int)tmp2.Fruit.FruitPosition.x, (int)tmp2.Fruit.FruitPosition.y
        ] = Objtmp;

        FruitObj scriptObj = tmp1;

        FruitSpawner.spawn.FruitGridScript[(int)tmp2.Fruit.FruitPosition.x, (int)tmp2.Fruit.FruitPosition.y] = tmp2;
        FruitSpawner.spawn.FruitGridScript[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y] = scriptObj;
        if (tmp1.Fruit.FruitType == 99 || tmp2.Fruit.FruitType == 99)
        {
            WinChecker();
        }
    }
示例#2
0
    public void DestroyRandom()
    {
        dropFruit();
        if (PlayerInfo.MODE == 1)
        {
            if (!IsStar)
            {
                List <CellObj> listeff = getListCellEffect();

                if (listeff.Count > 0)
                {
                    CellObj tmp = listeff[Random.Range(0, listeff.Count)];
                    tmp.RemoveEffect();
                    EffectSpawner.effect.Thunder(GridManager.grid.GridCell[(int)tmp.Cell.CellPosition.x, (int)tmp.Cell.CellPosition.y].transform.position);
                }
                else
                {
                    destroyNotEmpty();
                }
            }
            else
            {
                Vector2  vtmp = posUnderStar();
                FruitObj tmp  = FruitSpawner.spawn.FruitGridScript[(int)vtmp.x, (int)vtmp.y];
                if (tmp != null && tmp != FruitStar)
                {
                    tmp.Destroy();
                    EffectSpawner.effect.Thunder(GridManager.grid.GridCell[(int)tmp.Fruit.FruitPosition.x, (int)tmp.Fruit.FruitPosition.y].transform.position);
                }
            }
        }
    }
示例#3
0
    /// <summary>
    /// 判断当前地图是否还有可以移动的格子
    /// </summary>
    /// <returns></returns>
    public bool IsNoMoreMove()
    {
        StopSuggesttionAnim();
        AvaiableMove = new Vector2[2];
        AvailableObj = new FruitObj[2];

        for (int x = 0; x < 7; x++)
        {
            for (int y = 0; y < 9; y++)
            {
                if (FruitSpawner.spawn.FruitGridScript[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 0)
                {
                    fruit = FruitSpawner.spawn.FruitGridScript[x, y];

                    FruitObj obj = MoveChecker(x, y, fruit);

                    if (obj != null)
                    {
                        AvaiableMove[0] = fruit.Fruit.FruitPosition;
                        AvailableObj[0] = FruitSpawner.spawn.FruitGridScript[(int)AvaiableMove[0].x, (int)AvaiableMove[0].y];
                        AvaiableMove[1] = obj.Fruit.FruitPosition;
                        AvailableObj[1] = FruitSpawner.spawn.FruitGridScript[(int)AvaiableMove[1].x, (int)AvaiableMove[1].y];
                        isNoMove        = false;
                        return(true);
                    }
                }
            }
        }

        isNoMove = true;
        return(false);
    }
示例#4
0
    public void RuleChecker(GameObject obj1, GameObject obj2)
    {
        FruitObj        fruit1     = obj1.GetComponent <FruitObj>();
        FruitObj        fruit2     = obj2.GetComponent <FruitObj>();
        List <FruitObj> fruitObjs1 = Ulti.ListPlus(fruit1.GetCollumn(fruit2.Fruit.FruitPosition, fruit1.Fruit.FruitType, null), fruit1.GetRow(fruit2.Fruit.FruitPosition, fruit1.Fruit.FruitType, null), fruit1);

        List <FruitObj> fruitObjs2 = Ulti.ListPlus(fruit2.GetCollumn(fruit1.Fruit.FruitPosition, fruit2.Fruit.FruitType, null), fruit2.GetRow(fruit1.Fruit.FruitPosition, fruit2.Fruit.FruitType, null), fruit2);


        if (fruit1.Fruit.FruitType == 99 || fruit2.Fruit.FruitType == 99)
        {
            if (fruit1.Fruit.FruitType == 8 || fruit2.Fruit.FruitType == 8)
            {
                fruit1.SetBackAnimation(obj2);
                fruit2.SetBackAnimation(obj1);
                return;
            }
        }

        if (fruitObjs1.Count >= 3 || fruitObjs2.Count >= 3 || fruit1.Fruit.FruitType == 8 || fruit2.Fruit.FruitType == 8)
        {
            Ulti.MoveTo(obj1, obj2.transform.localPosition, 0.2f);
            Ulti.MoveTo(obj2, obj1.transform.localPosition, 0.2f);
            SwapFruitPosition(obj1, obj2);
            FruitProcess(fruitObjs1, fruitObjs2, obj1, obj2);
        }
        else
        {
            fruit1.SetBackAnimation(obj2);
            fruit2.SetBackAnimation(obj1);
        }
    }
示例#5
0
    public void FruitMapCreate(int[,] Map)
    {
        FruitGrid = new GameObject[7, 9];

        FruitGridScript = new FruitObj[7, 9];

        for (int x = 0; x < 7; x++)
        {
            int s = 0;
            for (int y = 0; y < 9; y++)
            {
                if (GridManager.grid.GridCellObj[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 4)
                {
                    s = y;
                }
            }
            for (int y = s; y < 9; y++)
            {
                if (Map[x, y] > 0)
                {
                    G_FruitInstaniate(x, y);
                }
            }
        }
        while (!Supporter.supporter.IsNoMoreMove() && index < 20)
        {
            Debug.Log("Hello");
            index++;
            RemakeGrid();
            FruitMapCreate(Map);
        }
        SpawnController.isSpawned = true;
    }
示例#6
0
    public GameObject FruitInstantiate(int x, int y)
    {
        ObjTmp      = Instantiate(FruitObject) as GameObject;
        FruitScript = ObjTmp.GetComponent <FruitObj>();
        ObjTmp.transform.SetParent(FruitParent.transform, false);
        ObjTmp.transform.localPosition = new Vector3(ObjTmp.transform.localPosition.x + x * BaseDistance, ObjTmp.transform.localPosition.y + y * BaseDistance);

        FruitGrid[x, y]       = ObjTmp;
        FruitGridScript[x, y] = FruitScript;

        int r = 0;

        if (PlayerInfo.MODE == 1)
        {
            r = Random.Range(0, 6);
        }
        else
        {
            r = Random.Range(0, 7);
        }


        FruitScript.Render.sprite       = FruitSprite[r];
        FruitScript.Fruit.FruitPosition = new Vector2(x, y);
        FruitScript.Fruit.FruitType     = r;

        return(ObjTmp);
    }
示例#7
0
    /// <summary>
    /// 下落动画
    /// </summary>
    /// <param name="obj">下落的物体</param>
    /// <param name="NewPos">下落的目标位置</param>
    /// <param name="speed">下落速度</param>
    /// <returns></returns>
    public static IEnumerator IEDrop(GameObject obj, Vector2 NewPos, float speed)
    {
        FruitObj   script = obj.GetComponent <FruitObj>();
        Collider2D coll   = obj.GetComponent <Collider2D>();

        if (obj != null)
        {
            Transform _tranform = obj.transform;
            coll.enabled  = false;
            script.isMove = true;
            while (_tranform != null && _tranform.localPosition.y - NewPos.y > 0.1f)
            {
                _tranform.localPosition -= new Vector3(0, Time.smoothDeltaTime * speed);
                yield return(null);
            }
            if (_tranform != null)
            {
                _tranform.localPosition = new Vector3(NewPos.x, NewPos.y);

                script.Bounce();
                script.RuleChecker();
                yield return(new WaitForSeconds(0.2f));

                if (coll != null)
                {
                    coll.enabled  = true;
                    script.isMove = false;
                }
            }
        }
    }
示例#8
0
    /// <summary>
    /// 获取同行相连
    /// </summary>
    /// <param name="Pos"></param>
    /// <param name="type"></param>
    /// <param name="bonus"></param>
    /// <returns></returns>
    public List <FruitObj> GetRow(Vector2 Pos, int type, FruitObj bonus)
    {
        List <FruitObj> tmp1 = GetLeft(Pos, type);
        List <FruitObj> tmp2 = GetRight(Pos, type);

        if (tmp1.Count + tmp2.Count > 1)
        {
            return(Ulti.ListPlus(tmp1, tmp2, bonus));
        }
        else
        {
            return(new List <FruitObj>());
        }
    }
示例#9
0
    GameObject RFruitInstantiate(int x, int y)
    {
        ObjTmp      = Instantiate(FruitObject) as GameObject;
        FruitScript = ObjTmp.GetComponent <FruitObj>();
        ObjTmp.transform.SetParent(FruitParent.transform, false);
        ObjTmp.transform.localPosition = new Vector3(x, y);
        ObjTmp.transform.GetChild(0).gameObject.transform.localScale = new Vector3(0, 0, 1);
        FruitGrid[x, y]       = ObjTmp;
        FruitGridScript[x, y] = FruitScript;

        int r = RandomFruit(x, y);

        FruitScript.Render.sprite       = FruitSprite[r];
        FruitScript.Fruit.FruitPosition = new Vector2(x, y);
        FruitScript.Fruit.FruitType     = r;

        return(ObjTmp);
    }
示例#10
0
    public static List <FruitObj> ListPlus(List <FruitObj> l1, List <FruitObj> l2, FruitObj bonus)
    {
        List <FruitObj> tmp = new List <FruitObj>();

        for (int i = l1.Count - 1; i >= 0; i--)
        {
            tmp.Add(l1[i]);
        }
        if (bonus != null)
        {
            tmp.Add(bonus);
        }
        for (int i = 0; i < l2.Count; i++)
        {
            tmp.Add(l2[i]);
        }
        return(tmp);
    }
示例#11
0
    IEnumerator DestroyType(int type, Vector3 pos)
    {
        NoSelector.SetActive(true);
        dropFruit();
        for (int x = 0; x < 7; x++)
        {
            for (int y = 0; y < 9; y++)
            {
                FruitObj tmp = FruitSpawner.spawn.FruitGridScript[x, y];
                if (tmp != null && tmp.Fruit.FruitType == type)
                {
                    //生成特效
                    tmp.Destroy();
                }
            }
        }
        yield return(new WaitForSeconds(0.2f));

        NoSelector.SetActive(false);
    }
示例#12
0
 /// <summary>
 /// 返回可移动的物体
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="fruit"></param>
 /// <returns></returns>
 private FruitObj MoveChecker(int x, int y, FruitObj fruit)
 {
     vtmpList = getListPos(x, y);
     foreach (Vector2 item in vtmpList)
     {
         if (FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y] != null && FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y].Fruit.FruitType == 8)
         {
             return(FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y]);
         }
         else
         {
             List <FruitObj> objs = Ulti.ListPlus(fruit.GetCollumn(item, fruit.Fruit.FruitType, null), fruit.GetRow(item, fruit.Fruit.FruitType, null), fruit);
             if (objs.Count >= 3)
             {
                 return(FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y]);
             }
         }
     }
     return(null);
 }
示例#13
0
    public GameObject SpawnFruitPower(int type, int power, Vector3 pos)
    {
        GameObject tmp;
        int        x = (int)pos.x;
        int        y = (int)pos.y;

        if (FruitGrid[x, y] != null)
        {
            Destroy(FruitGrid[x, y]);
        }
        if (type == 8)
        {
            tmp = Instantiate(FruitColor) as GameObject;
        }
        else
        {
            tmp = Instantiate(FruitObject) as GameObject;
        }
        FruitScript = tmp.GetComponent <FruitObj>();
        FruitScript.Render.enabled = true;
        tmp.transform.SetParent(FruitParent.transform, false);
        tmp.transform.localPosition = new Vector3(x, y, pos.z);
        FruitGrid[x, y]             = tmp;
        FruitGridScript[x, y]       = FruitScript;
        if (type != 8)
        {
            FruitScript.Render.sprite = FruitSprite[type];
        }
        FruitScript.Fruit.FruitPosition         = new Vector2(x, y);
        FruitScript.Fruit.FruitType             = type;
        FruitScript.Fruit.FruitPower            = power;
        tmp.GetComponent <Collider2D>().enabled = false;
        if (power == (int)GameController.Power.BOOM)
        {
            EffectSpawner.effect.Enchant(tmp.transform.GetChild(0).gameObject);
        }


        return(tmp);
    }
示例#14
0
    public void SpawnStar(Vector2 pos)
    {
        if (FruitGridScript[(int)pos.x, (int)pos.y] != null)
        {
            Destroy(FruitGrid[(int)pos.x, (int)pos.y]);
        }

        GameObject tmp = Instantiate(Star) as GameObject;

        tmp.name = "FruitStar";
        tmp.transform.SetParent(FruitParent.transform, false);
        tmp.transform.localPosition = new Vector3(pos.x, pos.y);
        tmp.transform.GetChild(0).gameObject.SetActive(false);

        FruitScript = tmp.GetComponent <FruitObj>();
        FruitScript.Fruit.FruitPosition         = pos;
        FruitGridScript[(int)pos.x, (int)pos.y] = FruitScript;
        FruitGrid[(int)pos.x, (int)pos.y]       = tmp;
        GameController.gameController.FruitStar = FruitScript;

        StarEffect.SetActive(true);
    }
示例#15
0
    /// <summary>
    /// 随机奖励
    /// </summary>
    public void AddBonusPower()
    {
        int dem = 0;

        while (true)
        {
            dem++;
            if (dem >= 63)
            {
                return;
            }
            int      x   = Random.Range(0, 7);
            int      y   = Random.Range(0, 9);
            FruitObj tmp = FruitSpawner.spawn.FruitGridScript[x, y];
            if (tmp != null && tmp.Fruit.FruitType != 8 && tmp.Fruit.fruitPower == 0 && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 0)
            {
                int r = Random.Range(2, 4);
                tmp.Fruit.FruitPower = r;
                EffectSpawner.effect.ThunderRow(FruitSpawner.spawn.FruitGrid[x, y], r);
                return;
            }
        }
    }
示例#16
0
    void Spawn()
    {
        int[] h = new int[7];

        for (int x = 0; x < 7; x++)
        {
            int s = 0;
            for (int y = 0; y < 9; y++)
            {
                if (GridManager.grid.GridCellObj[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 4)
                {
                    s = y + 1;
                }
            }
            for (int y = s; y < 9; y++)
            {
                if (GameController.gameController.GameState == (int)Timer.GameState.PLAYING)
                {
                    if (GridManager.grid.GridCellObj[x, y] != null && FruitSpawner.spawn.FruitGridScript[x, y] == null)
                    {
                        GameObject tmp = FruitSpawner.spawn.FruitInstantiate(x, y);
                        if (PlayerInfo.MODE == 1 && Random.value > 0.99f)
                        {
                            tmp.GetComponent <FruitObj>().Fruit.FruitType = 4;
                        }
                        tmp.transform.localPosition = new Vector3(tmp.transform.localPosition.x, 10 + h[x]);
                        h[x]++;
                        StartCoroutine(Ulti.IEDrop(tmp, new Vector2(x, y), GameController.DROP_SPEED));
                        FruitObj script = tmp.GetComponent <FruitObj>();
                        script.Render.enabled = true;
                    }
                }
            }
        }

        StartCoroutine(checkNoMoreMove());
    }