示例#1
0
    public SweetInfo Init(SweetsType _sweetsType, Transform itemRoot, int _x, int _y, float _time)
    {
        MoveComponent  = GetComponent <SweetMove>();
        ColorComponent = GetComponent <SweetColor>();
        SwapComponent  = GetComponent <SweetSwap>();
        ClearComponent = GetComponent <SweetClear>();
        SweetType      = _sweetsType;
        transform.SetParent(itemRoot);
        if (CanSwap())
        {
            SwapComponent.Init(this);
        }

        if (CanMove())
        {
            Move(_x, _y, _time);
        }
        else
        {
            X = _x;
            Y = _y;
        }

        if (_sweetsType == SweetsType.Normal)
        {
            SetColor();
        }
        return(this);
    }
示例#2
0
    /// <summary>
    /// 清除规则里物品的方法
    /// </summary>
    /// <returns></returns>
    private bool ClearAllMatchedSweet()
    {
        bool needRefill = false;         //是否需要填充

        for (int y = 0; y < yHang; y++)
        {
            for (int x = 0; x < xLie; x++)
            {
                if (sweets[x, y].CanClear())                 //如果可以清除
                {
                    List <GameSweet> matchList = MatchSweets(sweets[x, y], x, y);

                    if (matchList != null)                                                     //需要消除
                    {
                        SweetsType specialSweetsType = SweetsType.COUNT;                       //定义一个枚举类型:COUNT——是否产生特殊甜品:默认是Count类型

                        GameSweet randomSweet   = matchList[Random.Range(0, matchList.Count)]; //随机产生位置
                        int       specialSweetX = randomSweet.X;
                        int       specialSweetY = randomSweet.Y;


                        if (matchList.Count == 4)                                                                                    //消除的4个物品
                        {
                            specialSweetsType = (SweetsType)Random.Range((int)SweetsType.HANG_CLEAR, (int)SweetsType.LIE_CLEAR + 1); //特殊类型赋值:取左不取右,所以+1
                        }
                        else if (matchList.Count >= 5)
                        {
                            specialSweetsType = SweetsType.RAINBOWCANDY;
                        }
                        //5个

                        for (int i = 0; i < matchList.Count; i++)                         //遍历数组
                        {
                            if (ClearSweet(matchList[i].X, matchList[i].Y))
                            {
                                needRefill = true;                                 //填充
                            }
                        }

                        if (specialSweetsType != SweetsType.COUNT)                                                //有特殊类型
                        {
                            Destroy(sweets[specialSweetX, specialSweetY]);                                        //删除空白物品
                            GameSweet newSweet = CreateNewSweet(specialSweetX, specialSweetY, specialSweetsType); //生成特殊甜品
                            if (specialSweetsType == SweetsType.HANG_CLEAR || specialSweetsType == SweetsType.LIE_CLEAR &&
                                newSweet.CanColor() &&
                                matchList[0].CanColor())                                                  //种类的确定
                            {
                                newSweet.ColorComponet.SetColor(matchList[0].ColorComponet.Color);        //给特殊物品,着色:第一个物品的颜色
                            }
                            else if (specialSweetsType == SweetsType.RAINBOWCANDY && newSweet.CanColor()) //如果是彩虹堂
                            {
                                newSweet.ColorComponet.SetColor(ColorSweet.ColorType.ANY);
                            }
                        }
                    }
                }
            }
        }
        return(needRefill);
    }
示例#3
0
    public SweetInfo CreateNewSweet(SweetsType _sweetsType, int _x, int _y, SweetsSpawnPos posEnum = SweetsSpawnPos.Current, Transform _itemRoot = null)
    {
        Vector2 spawnPos = Vector2.zero;;

        switch (posEnum)
        {
        case SweetsSpawnPos.Zero:
            spawnPos = Vector2.zero;
            break;

        case SweetsSpawnPos.Up:
            spawnPos = CorrectPosition(_x, _y - 1);
            break;

        case SweetsSpawnPos.Current:
            spawnPos = CorrectPosition(_x, _y);
            break;

        default:
            break;
        }
        return(Instantiate(SweetsPrefabDic[_sweetsType].prefab
                           , spawnPos, Quaternion.identity, _itemRoot ? _itemRoot : itemRoot)
               .Init(_sweetsType, itemRoot, _x, _y, fillTime));
    }
示例#4
0
        public bool UseSweets(int deck_id, SweetsType type)
        {
            if (!IsValidUseSweets(deck_id))
            {
                return(false);
            }
            HashSet <int> useitem_id;

            if (type == SweetsType.Both)
            {
                HashSet <int> hashSet = new HashSet <int>();
                hashSet.Add(54);
                hashSet.Add(59);
                useitem_id = hashSet;
            }
            else
            {
                HashSet <int> hashSet = new HashSet <int>();
                hashSet.Add((int)type);
                useitem_id = hashSet;
            }
            Api_Result <bool> api_Result = new Api_req_Member().itemuse_cond(deck_id, useitem_id);

            return(api_Result.state == Api_Result_State.Success);
        }
示例#5
0
 /// <summary>
 /// 初始化属性
 /// </summary>
 /// <param name="_x">x坐标</param>
 /// <param name="_y">y坐标</param>
 /// <param name="_gameManager"></param>
 /// <param name="_type">类型</param>
 public void Init(int _x, int _y, GameManager _gameManager, SweetsType _type)
 {
     X           = _x;
     Y           = _y;
     gameManager = _gameManager;
     Type        = _type;
 }
示例#6
0
        public void SetSweetsType(SweetsType type)
        {
            _type = type;
            _SweetCon.SetSelectedIndex((int)type);
            switch (type)
            {
            case SweetsType.EMPTY:
            {
                IsMove  = false;
                IsClear = false;
                _color  = ColorType.COUNT;
            }
            break;

            case SweetsType.NORMAL:
            {
                IsMove        = true;
                IsClear       = true;
                _loader.alpha = 1;
                Color         = PlayerInfo.Instance.GetSweetColor();
            }
            break;

            case SweetsType.ROW_CLEAR:
            {
                IsMove  = true;
                IsClear = true;
            }
            break;

            case SweetsType.COLUMN_CLEAR:
            {
                IsMove  = true;
                IsClear = true;
            }
            break;

            case SweetsType.EXPLOSION:
            {
                IsMove  = true;
                IsClear = true;
            }
            break;

            case SweetsType.RAINBOWCANDY:
            {
                IsMove  = true;
                IsClear = true;
            }
            break;

            case SweetsType.BARRIER:
            {
                IsMove = false;
                _color = ColorType.COUNT;
            }
            break;
            }
        }
示例#7
0
    private bool ClearAllMatchedSweet()
    {
        bool needRefill = false;//默认不需要重新填充

        for (int y = 0; y < yRow; y++)
        {
            for (int x = 0; x < xColumn; x++)
            {
                if (sweets[x, y].CanClear())
                {
                    List <GameSweet> matchList = MatchSweets(sweets[x, y], x, y);
                    if (matchList != null)
                    {
                        SweetsType specialSweetsType = SweetsType.COUNT;//决定是否产生特殊甜品

                        GameSweet randomSweet   = matchList[Random.Range(0, matchList.Count)];
                        int       specialSweetX = randomSweet.X;
                        int       specialSweetY = randomSweet.Y;
                        //四个产生行列消除
                        if (matchList.Count == 4)
                        {
                            specialSweetsType = (SweetsType)Random.Range((int)SweetsType.ROW_CLEAR, (int)SweetsType.COLUMN_CLEAR);
                        }
                        //五个产生彩虹糖
                        else if (matchList.Count >= 5)
                        {
                            specialSweetsType = SweetsType.RAINBOWCANDY;
                        }

                        for (int i = 0; i < matchList.Count; i++)
                        {
                            if (ClearSweet(matchList[i].X, matchList[i].Y))
                            {
                                needRefill = true;
                            }
                        }

                        if (specialSweetsType != SweetsType.COUNT)
                        {
                            Destroy(sweets[specialSweetX, specialSweetY]);
                            GameSweet newSweet = CreatNewSweet(specialSweetX, specialSweetY, specialSweetsType);

                            if ((specialSweetsType == SweetsType.ROW_CLEAR || specialSweetsType == SweetsType.COLUMN_CLEAR) &&
                                newSweet.CanColor() && matchList[0].CanColor())
                            {
                                newSweet.ColoredComponent.SetColor(matchList[0].ColoredComponent.Color);
                            }
                            //加上彩虹糖特殊类型的产生
                            else if (specialSweetsType == SweetsType.RAINBOWCANDY && newSweet.CanColor())
                            {
                                newSweet.ColoredComponent.SetColor(ColorSweet.ColorType.ANY);
                            }
                        }
                    }
                }
            }
        }
        return(needRefill);
    }
示例#8
0
 public void InitSweet(GComponent parents)
 {
     _parents       = parents;
     _sweet.visible = true;
     _type          = SweetsType.EMPTY;
     parents.AddChild(_sweet);
     SetSweetsType(_type);
 }
 //安全检验。如果包含这个类型,就用这个类型对应的sprite来渲染
 public void SetType(SweetsType newType)
 {
     type = newType;
     if (typeSpriteDict.ContainsKey(newType))
     {
         sprite.sprite = typeSpriteDict[newType];
     }
 }
示例#10
0
 public bool UseSweets(SweetsType type)
 {
     if (!IsValidUseSweets())
     {
         return(false);
     }
     return(false);
 }
示例#11
0
 public bool UseSweets(int deck_id, SweetsType type)
 {
     if (deck_id != _edit_deck.Id)
     {
         return(false);
     }
     return(UseSweets(type));
 }
示例#12
0
    private bool ClearAllMatchedSweet()//清除所有块方法
    {
        if (isGameOver)
        {
            return(false);
        }
        print("清除所有块方法");
        bool needRefill = false;

        for (int y = 0; y < yRows; y++)
        {
            for (int x = 0; x < xColumns; x++)
            {
                if (sweetsarray[y, x].CanClear())
                {
                    List <GameSweet> matchlist = MatchSweets(sweetsarray[y, x], x, y);
                    if (matchlist != null)
                    {
                        SweetsType specialSweetsType = SweetsType.COUNT;//特殊类甜品产生flag;
                        GameSweet  randomSweet       = matchlist[Random.Range(0, matchlist.Count)];
                        int        specialSweetX     = randomSweet.X;
                        int        specialSweetY     = randomSweet.Y;
                        if (matchlist.Count == 4)
                        {
                            specialSweetsType = (SweetsType)Random.Range((int)SweetsType.ROW_CLEAR, (int)SweetsType.COLUMN_CLEAR);
                        }
                        //5个同样块消除时判定是行还是列  RainbowSweet产生条件
                        else if (matchlist.Count > 4)
                        {
                            specialSweetsType = SweetsType.RAINBOWCANDY;
                        }
                        for (int i = 0; i < matchlist.Count; i++)//---清除符合条件的所有块
                        {
                            if (ClearSweet(matchlist[i].X, matchlist[i].Y))
                            {
                                needRefill = true;
                            }
                        }

                        if (specialSweetsType != SweetsType.COUNT)
                        {
                            Destroy(sweetsarray[specialSweetY, specialSweetX]);
                            GameSweet newsweet = CreateSweet(specialSweetX, specialSweetY, specialSweetsType);
                            if (newsweet.CanColor() && specialSweetsType == SweetsType.ROW_CLEAR || specialSweetsType == SweetsType.COLUMN_CLEAR)
                            {
                                newsweet.ColorComponent.SetColor(matchlist[0].ColorComponent.Color);
                            }
                            else if (specialSweetsType == SweetsType.RAINBOWCANDY && newsweet.CanColor())
                            {
                                newsweet.ColorComponent.SetColor(ColorSweet.ColorEnum.ANYCOLORS);
                            }
                        }
                    }
                }
            }
        }
        return(needRefill);
    }
示例#13
0
    //Eliminate sweets in all range.
    private bool EliminateAllMatchedSweets()
    {
        bool needFill = false;

        for (int y = 0; y < rows; y++)
        {
            for (int x = 0; x < columns; x++)
            {
                if (sweets[x, y].Eliminable())
                {
                    List <SweetsController> matchList = MatchSweets(sweets[x, y], x, y);

                    if (matchList != null)
                    {
                        SweetsType       superSweets    = SweetsType.COUNT;
                        SweetsController superSweetsPos = matchList[Random.Range(0, matchList.Count)];

                        if (matchList.Count == 4)
                        {
                            superSweets = (SweetsType)Random.Range(3, 5);
                        }

                        //matchList.Count >= 5 ... Rainbow Sweets
                        if (matchList.Count >= 5)
                        {
                            superSweets = SweetsType.RAINBOW_CANDY;
                        }

                        for (int i = 0; i < matchList.Count; i++)
                        {
                            if (EliminateSweet(matchList[i].X, matchList[i].Y))
                            {
                                needFill = true;
                            }
                        }

                        //Generate super sweets.
                        if (superSweets != SweetsType.COUNT)
                        {
                            Destroy(sweets[superSweetsPos.X, superSweetsPos.Y]);
                            SweetsController newSweets = CreateNewSweet(superSweetsPos.X, superSweetsPos.Y, superSweets);

                            if (matchList.Count == 4 && newSweets.ColorAble() && matchList[0].ColorAble())
                            {
                                newSweets.ColoredComponent.SetThisType(matchList[0].ColoredComponent.ThisType);
                            }
                            else if (superSweets == SweetsType.RAINBOW_CANDY && newSweets.ColorAble())
                            {
                                //Generate Rainbow Sweets
                                newSweets.ColoredComponent.SetThisType(SweetsColorType.ColorType.UNIVERSAL);
                            }
                        }
                    }
                }
            }
        }
        return(needFill);
    }
示例#14
0
    //产生甜品的方法
    public GameSweet CreateNewSweet(int x, int y, SweetsType type)
    {
        GameObject newSweet = Instantiate(sweetPrefabDict[type], CorrectPositon(x, y), Quaternion.identity);

        newSweet.transform.SetParent(sweetsTransform);
        sweets[x, y] = newSweet.GetComponent <GameSweet>();
        sweets[x, y].Init(x, y, this, type);
        return(sweets[x, y]);
    }
示例#15
0
    /// <summary>
    /// 清除全部完成匹配的甜品
    /// </summary>
    /// <returns></returns>
    private bool ClearAllMatchedSweet()
    {
        bool needRefill = false;

        for (int y = 0; y < yRow; y++)
        {
            for (int x = 0; x < xCol; x++)
            {
                if (sweetArr[x, y].CanClear())
                {
                    List <GameSweet> matchList = MatchSweets(sweetArr[x, y], x, y);

                    if (matchList != null)
                    {
                        //确认是否产生特殊甜品
                        SweetsType sweetsType = SweetsType.Count;
                        //随机获取消除列表中的坐标
                        GameSweet randomSweet = matchList[Random.Range(0, matchList.Count)];
                        //消除4个生成行或列消除甜品
                        if (matchList.Count == 4)
                        {
                            sweetsType = (SweetsType)Random.Range((int)SweetsType.Row_Clear, (int)SweetsType.Column_Clear);
                        }
                        //消除5个生成彩虹糖
                        else if (matchList.Count >= 5)
                        {
                            sweetsType = SweetsType.RainbowCandy;
                        }

                        for (int i = 0; i < matchList.Count; i++)
                        {
                            if (ClearSweet(matchList[i].X, matchList[i].Y))
                            {
                                needRefill = true;
                            }
                        }
                        //创建行列消除特殊甜品
                        if (sweetsType != SweetsType.Count)
                        {
                            Destroy(sweetArr[randomSweet.X, randomSweet.Y]);
                            GameSweet newSweet = CreateNewSweet(randomSweet.X, randomSweet.Y, sweetsType);
                            if (sweetsType == SweetsType.Row_Clear || sweetsType == SweetsType.Column_Clear && newSweet.CanColor() && matchList[0].CanColor())
                            {
                                newSweet.colorSweet.SetSprite(matchList[0].colorSweet.colorType);
                            }
                            else if (sweetsType == SweetsType.RainbowCandy & newSweet.CanColor())
                            {
                                newSweet.colorSweet.SetSprite(ColorType.Any);
                            }
                        }
                    }
                }
            }
        }
        return(needRefill);
    }
示例#16
0
    private bool ClearMatchedSweet()
    {
        bool isNeedFill = false;

        for (int x = 0; x < xColumn; x++)
        {
            for (int y = 0; y < yRow; y++)
            {
                if (sweets[x, y].CanClear())
                {
                    List <GameSweet> matchList = MatchSweets(sweets[x, y], x, y);
                    if (matchList != null)
                    {
                        SweetsType specialType = SweetsType.COUNT;

                        GameSweet randomSweet = matchList[Random.Range(0, matchList.Count)];
                        int       specialX    = randomSweet.X;
                        int       specialY    = randomSweet.Y;

                        if (matchList.Count == 4)
                        {
                            specialType = (SweetsType)Random.Range((int)SweetsType.ROW_CLEAR, (int)SweetsType.COLUMN_CLEAR);
                        }

                        if (matchList.Count == 5)
                        {
                            specialType = SweetsType.RAINBOWCANDY;
                        }

                        for (int i = 0; i < matchList.Count; i++)
                        {
                            ClearSweet(matchList[i].X, matchList[i].Y);
                            isNeedFill = true;
                        }

                        if (specialType != SweetsType.COUNT)
                        {
                            Destroy(sweets[specialX, specialY]);
                            GameSweet gameSweet = CreateNewSweet(specialX, specialY, specialType);
                            if ((gameSweet.Type == SweetsType.ROW_CLEAR || gameSweet.Type == SweetsType.COLUMN_CLEAR) &&
                                gameSweet.CanColor() && matchList[0].CanColor())
                            {
                                gameSweet.ColorCommpont.SetColor(matchList[0].ColorCommpont.Color);
                            }
                            else if (gameSweet.Type == SweetsType.RAINBOWCANDY)
                            {
                                gameSweet.ColorCommpont.SetColor(ColorSweet.ColorType.ANY);
                            }
                        }
                    }
                }
            }
        }

        return(isNeedFill);
    }
示例#17
0
    public GameSweet CreateSweet(int x, int y, SweetsType type)
    {
        print(x + "x,y" + y);
        GameSweet go = Instantiate(sweetPrefabDict[type], CorrectPosition(x, y), Quaternion.identity);

        go.transform.parent = transform;
        sweetsarray[y, x]   = go;
        sweetsarray[y, x].Init(x, y, Instance, type);
        return(sweetsarray[y, x]);
    }
示例#18
0
    //Create new Sweets Object.
    public SweetsController CreateNewSweet(int x, int y, SweetsType type)
    {
        GameObject newSweet =
            Instantiate(sweetsPrefabDic[type], CalibratePosition(x, y), Quaternion.identity);

        newSweet.transform.parent = transform;

        sweets[x, y] = newSweet.GetComponent <SweetsController>();
        sweets[x, y].Init(x, y, this, type);
        return(sweets[x, y]);
    }
示例#19
0
    /// <summary>
    /// 创建新甜品
    /// </summary>
    /// <param name="x">x坐标</param>
    /// <param name="y">y坐标</param>
    /// <param name="type">类型</param>
    /// <returns></returns>
    public GameSweet CreateNewSweet(int x, int y, SweetsType type)
    {
        //在当前x、y位置实例化甜品
        GameObject newSweet = Instantiate(prefabDic[type], CorrectPos(x, y), Quaternion.identity);

        //设置父对象
        newSweet.transform.SetParent(transform);
        //获取脚本并初始化属性
        sweetArr[x, y] = newSweet.GetComponent <GameSweet>();;
        sweetArr[x, y].Init(x, y, this, type);

        return(sweetArr[x, y]);
    }
    public List <GameSweet> GetSweetsOfType(SweetsType type)
    {
        List <GameSweet> sweetsOfType = new List <GameSweet>();

        for (int x = 0; x < xColumn; x++)
        {
            for (int y = 0; y < yRow; y++)
            {
                if (sweets[x, y].Type == type)
                {
                    sweetsOfType.Add(sweets[x, y]);
                }
            }
        }

        return(sweetsOfType);
    }
示例#21
0
    //创建一个甜品
    private GameSweet CreateNewSweet(int x, int y, SweetsType type)
    {
        GameObject newObj = Instantiate(sweetPrefabDict[type], CorrectPosition(x, y), Quaternion.identity);

        newObj.transform.SetParent(transform);

        GameSweet gameSweet = newObj.GetComponent <GameSweet>();

        gameSweet.Init(x, y, this, type);

        //如果是普通类型就创建一个随机的颜色的甜品
        if (type == SweetsType.NORMAL)
        {
            gameSweet.ColorComponent.SetColor((ColorSweet.ColorType)Random.Range(0, gameSweet.ColorComponent.numColors));
        }
        //数组赋值
        sweets[x, y] = gameSweet;

        return(gameSweet);
    }
示例#22
0
        public void Clear()
        {
            if (!IsClear)
            {
                return;
            }
            switch (_type)
            {
            case SweetsType.NORMAL:
            {
                _normalClearTra.Play();
            }
            break;

            case SweetsType.ROW_CLEAR:
            {
                _normalClearTra.Play();
            }
            break;

            case SweetsType.COLUMN_CLEAR:
            {
                _normalClearTra.Play();
            }
            break;

            case SweetsType.EXPLOSION:
            {
                _normalClearTra.Play();
            }
            break;

            case SweetsType.RAINBOWCANDY:
            {
                _normalClearTra.Play();
            }
            break;
            }
            _type = SweetsType.EMPTY;
        }
    private bool ClearAllMatchedSweet()
    {
        bool needRefill = false;

        for (int y = 0; y < yRow; y++)
        {
            for (int x = 0; x < xColumn; x++)
            {
                if (sweets[x, y].CanClear())
                {
                    List <GameSweet> matchList = MatchSweets(sweets[x, y], x, y);

                    if (matchList != null)
                    {
                        SweetsType specialSweetsType = SweetsType.COUNT;
                        GameSweet  randomSweet       = matchList[Random.Range(0, matchList.Count)];
                        int        specialSweetX     = randomSweet.X;
                        int        specialSweetY     = randomSweet.Y;

                        if (matchList.Count == 4)
                        {
                            if (pressedSweet == null || enteredSweet == null)
                            {
                                specialSweetsType = (SweetsType)Random.Range((int)SweetsType.ROW_CLEAR, (int)SweetsType.COLUMN_CLEAR);
                            }
                            else if (pressedSweet.Y == enteredSweet.Y)
                            {
                                specialSweetsType = SweetsType.ROW_CLEAR;
                            }
                            else
                            {
                                specialSweetsType = SweetsType.COLUMN_CLEAR;
                            }
                        }
                        else if (matchList.Count >= 5)
                        {
                            specialSweetsType = SweetsType.RAINBOWCANDY;
                        }

                        for (int i = 0; i < matchList.Count; i++)
                        {
                            if (ClearSweet(matchList[i].X, matchList[i].Y))
                            {
                                needRefill = true;

                                if (matchList[i] == pressedSweet || matchList[i] == enteredSweet)
                                {
                                    specialSweetX = matchList[i].X;
                                    specialSweetY = matchList[i].Y;
                                }
                            }
                        }

                        if (specialSweetsType != SweetsType.COUNT)
                        {
                            Destroy(sweets[specialSweetX, specialSweetY]);
                            GameSweet newSweet = CreateNewSweet(specialSweetX, specialSweetY, specialSweetsType);

                            if (specialSweetsType == SweetsType.ROW_CLEAR || specialSweetsType == SweetsType.COLUMN_CLEAR && newSweet.CanColor() && matchList[0].CanColor())
                            {
                                newSweet.ColoredComponent.SetColor(matchList[0].ColoredComponent.Color);
                            }
                            else if (specialSweetsType == SweetsType.RAINBOWCANDY && newSweet.CanColor())
                            {
                                newSweet.ColoredComponent.SetColor(ColorSweet.ColorType.ANY);
                            }
                        }
                    }
                }
            }
        }
        return(needRefill);
    }
示例#24
0
 public bool UseSweets(SweetsType type)
 {
     return(!this.IsValidUseSweets() && false);
 }
示例#25
0
 public bool UseSweets(int deck_id, SweetsType type)
 {
     return(deck_id == this._edit_deck.Id && this.UseSweets(type));
 }