Ejemplo n.º 1
0
    public IEnumerator Block_Swap(InGame_Block from, InGame_Block to, bool notchange = false, float duration = 0.2f)
    {
        var time = System.DateTime.Now;

        from.transform.DOMove(to.Img_Block.transform.position, duration);
        to.transform.DOMove(from.Img_Block.transform.position, duration);

        var nameTemp = from.name;

        from.name = to.name;
        to.name   = nameTemp;

        //to.GetComponent<Button>().targetGraphic = to.Img_Block;
        //from.GetComponent<Button>().targetGraphic = from.Img_Block;

        yield return(new WaitForSeconds(duration));

        if (notchange)
        {
            yield break;
        }

        GameUtils.Log(new System.TimeSpan(System.DateTime.Now.Ticks - time.Ticks).TotalSeconds.ToString());

        StartCoroutine(Check_BlockAsync(from, to));
    }
Ejemplo n.º 2
0
    public IEnumerator shake(InGame_Block block, float sec = 0.5f)
    {
        block.Img_Block.transform.DOShakePosition(sec, 10);
        yield return(new WaitForSeconds(sec));


        block.Img_Block.sprite = null;
        block.gameObject.SetActive(false);
        InGame_Block up = null, left = null, right = null;

        for (int i = 0; i < blocks.Count; i++)
        {
            if (block.GetPos().y + 1 != blocks[i].GetPos().y)
            {
                continue;
            }

            if (block.GetPos().x == blocks[i].GetPos().x)
            {
                up = blocks[i];
            }
            if (block.GetPos().x == blocks[i].GetPos().x + 1)
            {
                left = blocks[i];
            }
            if (block.GetPos().x == blocks[i].GetPos().x - 1)
            {
                right = blocks[i];
            }
        }
    }
Ejemplo n.º 3
0
    public IEnumerator Check_BlockAsync(InGame_Block block_1, InGame_Block block_2)
    {
        bool second = Check_BlockAsync(block_2);
        bool first  = Check_BlockAsync(block_1);

        if (first == false && second == false)
        {
            GameUtils.Log("Fail to made");
            StartCoroutine(Block_Swap(block_1, block_2, true));
        }
        else
        {
            yield return(new WaitForSeconds(0.5f));

            Drop_Down();
        }
    }
Ejemplo n.º 4
0
    public async Task Select_BlockAsync(Image block)
    {
        GameUtils.Log($"{block.GetComponent<InGame_Block>().GetPos()} is selected");

        //취소
        if (block == selectedBlock)
        {
            selectedBlock = null;

            return;
        }

        //변경
        if (selectedBlock != null)
        {
            var Clicked_Block_pos  = block.GetComponent <InGame_Block>().GetPos();
            var Selected_Block_pos = selectedBlock.GetComponent <InGame_Block>().GetPos();

            bool canChange = Mathf.Abs(Clicked_Block_pos.x - Selected_Block_pos.x) <= 0 || Mathf.Abs(Clicked_Block_pos.y - Selected_Block_pos.y) <= 0;


            if (canChange)
            {
                InGame_Block block_1 = selectedBlock.GetComponent <InGame_Block>();
                InGame_Block block_2 = block.GetComponent <InGame_Block>();

                StartCoroutine(Block_Swap(block_1, block_2));

                //Check_BlockAsync(block_1, block_2);


                selectedBlock = null;

                return;
            }
        }

        //선택
        selectedBlock = block;
    }
Ejemplo n.º 5
0
    public bool Check_BlockAsync(InGame_Block block)
    {
        bool result = false;

        #region 가로 체크

        InGame_Block[] horizon_arr = new InGame_Block[stage.Width];

        foreach (var tile in blocks)
        {
            if (tile.GetPos().y != block.GetPos().y)
            {
                continue;
            }

            int index = (int)tile.GetPos().x + (int)(stage.Width / 2);
            horizon_arr[index] = tile;
        }


        List <InGame_Block> H_clearBlock = new List <InGame_Block>();
        for (int i = 0; i < stage.Width; i++)
        {
            if (horizon_arr[i].GetIndex() != block.GetIndex())
            {
                if (H_clearBlock.Count < 3)
                {
                    H_clearBlock.Clear();
                }

                continue;
            }

            H_clearBlock.Add(horizon_arr[i]);
        }

        if (H_clearBlock.Count < 3)
        {
            H_clearBlock.Clear();
        }

        else
        {
            GameUtils.Log($"[{block.GetPos()}] 가로 완성 ({H_clearBlock.Count })개 / {block.Img_Block.sprite.name}");

            foreach (var img in H_clearBlock)
            {
                StartCoroutine(shake(img));
            }

            result = true;
        }



        #endregion

        #region 세로 체크

        InGame_Block[] vertical_arr = new InGame_Block[stage.Height];

        foreach (var tile in blocks)
        {
            if (tile.GetPos().x != block.GetPos().x)
            {
                continue;
            }

            int index = (int)tile.GetPos().y + (int)(stage.Height / 2);
            vertical_arr[index] = tile;
        }


        List <InGame_Block> V_clearBlock = new List <InGame_Block>();
        for (int i = 0; i < stage.Height; i++)
        {
            if (vertical_arr[i].GetIndex() != block.GetIndex())
            {
                if (V_clearBlock.Count < 3)
                {
                    V_clearBlock.Clear();
                }

                continue;
            }

            V_clearBlock.Add(vertical_arr[i]);
        }

        if (V_clearBlock.Count < 3)
        {
            V_clearBlock.Clear();
        }

        else
        {
            GameUtils.Log($"[{block.GetPos()}] 세로 완성 ({V_clearBlock.Count })개 / {block.Img_Block.sprite.name}");

            foreach (var img in V_clearBlock)
            {
                StartCoroutine(shake(img));
            }

            result = true;
        }

        #endregion


        #region 사각형



        #endregion

        return(result);
    }
Ejemplo n.º 6
0
    public void CheckMap()
    {
        bool bcheckmap = false;

        do
        {
            bcheckmap = false;
            foreach (var block in blocks)
            {
                #region 가로 체크

                InGame_Block[] horizon_arr = new InGame_Block[stage.Width];

                foreach (var tile in blocks)
                {
                    if (tile.GetPos().y != block.GetPos().y)
                    {
                        continue;
                    }

                    int index = (int)tile.GetPos().x + (int)(stage.Width / 2);
                    horizon_arr[index] = tile;
                }


                List <InGame_Block> H_clearBlock = new List <InGame_Block>();
                for (int i = 0; i < stage.Width; i++)
                {
                    if (horizon_arr[i].GetIndex() != block.GetIndex())
                    {
                        if (H_clearBlock.Count < 3)
                        {
                            H_clearBlock.Clear();
                        }

                        continue;
                    }

                    H_clearBlock.Add(horizon_arr[i]);
                }

                if (H_clearBlock.Count < 3)
                {
                    H_clearBlock.Clear();
                }
                else
                {
                    GameUtils.Log("가로 찾음");
                    block.SetNormalBlock();
                    bcheckmap = true;
                }


                #endregion

                #region 세로 체크

                InGame_Block[] vertical_arr = new InGame_Block[stage.Height];

                foreach (var tile in blocks)
                {
                    if (tile.GetPos().x != block.GetPos().x)
                    {
                        continue;
                    }

                    int index = (int)tile.GetPos().y + (int)(stage.Height / 2);
                    vertical_arr[index] = tile;
                }


                List <InGame_Block> V_clearBlock = new List <InGame_Block>();
                for (int i = 0; i < stage.Height; i++)
                {
                    if (vertical_arr[i].GetIndex() != block.GetIndex())
                    {
                        if (V_clearBlock.Count < 3)
                        {
                            V_clearBlock.Clear();
                        }

                        continue;
                    }

                    V_clearBlock.Add(vertical_arr[i]);
                }

                if (V_clearBlock.Count < 3)
                {
                    V_clearBlock.Clear();
                }

                else
                {
                    GameUtils.Log("세로 찾음");
                    block.SetNormalBlock();
                    bcheckmap = true;
                }

                #endregion
            }
        } while (bcheckmap);
    }