三消

来源:互联网 发布:已备案的域名转让 编辑:程序博客网 时间:2024/04/29 06:55
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class 三消 : MonoBehaviour
{
    GameObject[,] cubeArr = new GameObject[8, 8];//用来存放cube
    List<GameObject> list = new List<GameObject>();//用来存放要交换位置的cube
    List<GameObject> list_DesCube = new List<GameObject>();//用来存放要销毁的cube
    public Text text;
    public float Rote;
    int num = 0;
    bool IsFrist = true;
    bool diaoyong = true;
    float time;
    // Use this for initialization
    void Start()
    {
        text = text.GetComponent<Text>();
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                //克隆对象原始并返回克隆。
                GameObject cube = Instantiate(Resources.Load("Cube" + Random.Range(1, 8))) as GameObject;//资源类允许您查找和访问对象,包括资产    //加载存储在  Resources  文件夹中的路径的资产。
                cube.transform.position = new Vector3(i, j, 0);
                cube.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f);
                cubeArr[i, j] = cube;//把生成的cube放入二维数组
            }
        }
    }


    // Update is called once per frame
    void Update()
    {
        if (list.Count > 0)
        {
            list[0].transform.Rotate(0, Rote * Time.deltaTime, 0);
        }
        time += Time.deltaTime;
       
        if (diaoyong)
        {
            DesCube();
        }
        SwopCube();
    }


    public void AddList(GameObject cube)
    {
        if (list_DesCube.Count == 0)
        {
            list_DesCube.Add(cube);
        }
        else
        {
            foreach (var item in list_DesCube)
            {
                if (item == cube)
                {
                    return;
                }
            }
            list_DesCube.Add(cube);
        }
    }


    public bool IsDesCube()
    {
        for (int i = 0; i < 6; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (cubeArr[i, j].name == cubeArr[i + 1, j].name && cubeArr[i, j].name == cubeArr[i + 2, j].name)
                {
                    AddList(cubeArr[i, j]);
                    AddList(cubeArr[i + 1, j]);
                    AddList(cubeArr[i + 2, j]);
                }
            }
        }
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                if (cubeArr[i, j].name == cubeArr[i, j + 1].name && cubeArr[i, j].name == cubeArr[i, j + 2].name)
                {
                    AddList(cubeArr[i, j]);
                    AddList(cubeArr[i, j + 1]);
                    AddList(cubeArr[i, j + 2]);
                }
            }
        }
        if (list_DesCube.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public void DesCube()
    {
        if (IsDesCube())
        {
            for (int i = 0; i < list_DesCube.Count;)
            {
                Vector3 pos = list_DesCube[0].transform.position;
                int a = (int)pos.x;
                int b = (int)pos.y;
                Destroy(list_DesCube[0]);
                list_DesCube.RemoveAt(0);


                if (time <= 1)
                {
                    num = 0;
                }
                text.text = "得分:" + num + "分";
                num++;


                for (int j = b + 1; j < 8; j++)
                {
                    cubeArr[a, j].transform.position = new Vector3(a, j - 1, 0);
                    cubeArr[a, j - 1] = cubeArr[a, j];
                }
                GameObject cube = Instantiate(Resources.Load("Cube" + Random.Range(1, 8))) as GameObject;
                cube.transform.position = new Vector3(a, 7, 0);
                cube.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f);


                cubeArr[a, 7] = cube;
            }
            //IsOver();
        }
    }


    public void SwopCube()
    {
        //沿着原点创建一条射线
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  //返回一个从相机到屏幕的射线
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))//用ray检测是否存在物理属性
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (IsFrist)
                {
                    list.Add(hit.collider.gameObject);//把第一个元素添加进链表                
                    Rote = 90f;//第一个物体进行旋转
                    IsFrist = false;
                }
                if (hit.collider.gameObject.transform.tag == "cube" && IsFrist == false && hit.collider.gameObject.name != list[0].name)
                {
                    list.Add(hit.collider.gameObject);//添加第二个元素                   
                }
            }
        }
        if (list.Count == 2)
        {
            if (Vector3.Distance(list[0].transform.position, list[1].transform.position) < 1.2f)
            {
                Rote = 0;
                list[0].transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
                IsFrist = true;
                Swop();


                if (!IsDesCube())
                {
                    Swop();
                }
                else
                {


                    //IsOver();
                }
                list.Clear();
            }
            else
            {
                Rote = 0;
                list[0].transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
                list.Clear();
                IsFrist = true;
            }
        }
    }


    public void Swop()
    {
        //交换坐标
        Vector3 pos = list[0].transform.position;
        list[0].transform.position = list[1].transform.position;
        list[1].transform.position = pos;


        //交换索引
        int a = (int)list[0].transform.position.x;
        int b = (int)list[0].transform.position.y;
        cubeArr[a, b] = list[0];
        int c = (int)list[1].transform.position.x;
        int d = (int)list[1].transform.position.y;
        cubeArr[c, d] = list[1];
    }


    public void IsOver()
    {
        diaoyong = false;
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                //交换坐标
                Vector3 pos = cubeArr[i, j].transform.position;


                cubeArr[i, j].transform.position = cubeArr[i, j + 1].transform.position;
                cubeArr[i, j + 1].transform.position = pos;


                //交换索引
                int a = (int)cubeArr[i, j].transform.position.x;
                int b = (int)cubeArr[i, j].transform.position.y;
                cubeArr[a, b] = cubeArr[i, j];
                int c = (int)cubeArr[i, j + 1].transform.position.x;
                int d = (int)cubeArr[i, j + 1].transform.position.y;
                cubeArr[c, d] = cubeArr[i, j + 1];


                if (IsDesCube())
                {
                    cubeArr[i, j].transform.position = cubeArr[i, j + 1].transform.position;
                    cubeArr[i, j + 1].transform.position = pos;


                    //交换索引
                    a = (int)cubeArr[i, j].transform.position.x;
                    b = (int)cubeArr[i, j].transform.position.y;
                    cubeArr[a, b] = cubeArr[i, j];
                    c = (int)cubeArr[i, j + 1].transform.position.x;
                    d = (int)cubeArr[i, j + 1].transform.position.y;
                    cubeArr[c, d] = cubeArr[i, j + 1];


                    diaoyong = true;
                    return;
                }
                else
                {
                    cubeArr[i, j].transform.position = cubeArr[i, j + 1].transform.position;
                    cubeArr[i, j + 1].transform.position = pos;


                    //交换索引
                    a = (int)cubeArr[i, j].transform.position.x;
                    b = (int)cubeArr[i, j].transform.position.y;
                    cubeArr[a, b] = cubeArr[i, j];
                    c = (int)cubeArr[i, j + 1].transform.position.x;
                    d = (int)cubeArr[i, j + 1].transform.position.y;
                    cubeArr[c, d] = cubeArr[i, j + 1];
                }
            }
        }


        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                //交换坐标
                Vector3 pos = cubeArr[i, j].transform.position;


                cubeArr[i, j].transform.position = cubeArr[i + 1, j].transform.position;
                cubeArr[i + 1, j].transform.position = pos;


                //交换索引
                int a = (int)cubeArr[i, j].transform.position.x;
                int b = (int)cubeArr[i, j].transform.position.y;
                cubeArr[a, b] = cubeArr[i, j];
                int c = (int)cubeArr[i + 1, j].transform.position.x;
                int d = (int)cubeArr[i + 1, j].transform.position.y;
                cubeArr[c, d] = cubeArr[i + 1, j];


                if (IsDesCube())
                {
                    cubeArr[i, j].transform.position = cubeArr[i + 1, j].transform.position;
                    cubeArr[i + 1, j].transform.position = pos;


                    //交换索引
                    a = (int)cubeArr[i, j].transform.position.x;
                    b = (int)cubeArr[i, j].transform.position.y;
                    cubeArr[a, b] = cubeArr[i, j];
                    c = (int)cubeArr[i + 1, j].transform.position.x;
                    d = (int)cubeArr[i + 1, j].transform.position.y;
                    cubeArr[c, d] = cubeArr[i + 1, j];


                    diaoyong = true;
                    return;
                }
                else
                {
                    cubeArr[i, j].transform.position = cubeArr[i + 1, j].transform.position;
                    cubeArr[i + 1, j].transform.position = pos;


                    //交换索引
                    a = (int)cubeArr[i, j].transform.position.x;
                    b = (int)cubeArr[i, j].transform.position.y;
                    cubeArr[a, b] = cubeArr[i, j];
                    c = (int)cubeArr[i + 1, j].transform.position.x;
                    d = (int)cubeArr[i + 1, j].transform.position.y;
                    cubeArr[c, d] = cubeArr[i + 1, j];
                }
            }
        }
        text.text = "游戏结束";
    }
}

原创粉丝点击