Exemplo n.º 1
0
    private void NextLevel()
    {
        currentLevel += 1;
        Dictionary <int, SquareLevelModel> levels = levelModels[currentSide];
        //if (!levels.ContainsKey(currentLevel))
        //{
        //    return;
        //}
        SquareLevelModel levelModel = levels[currentLevel];

        Messenger <SquareLevelModel> .Broadcast(MessageDefines.OnStartNewLevel, levelModel);
    }
Exemplo n.º 2
0
    public void BuildLevelFromFile2(string fileName)
    {
        //Application.targetFrameRate = 60;
        TextAsset text = Resources.Load <TextAsset>(fileName);

        string[] allString = text.text.Split(Environment.NewLine.ToCharArray());
        foreach (string str in allString)
        {
            if (string.IsNullOrEmpty(str))
            {
                continue;
            }
            string[]           totalStr = str.Split(';');
            string[]           str1     = totalStr[0].Split(',');
            int                pair     = int.Parse(str1[3]);
            List <List <int> > dataList = new List <List <int> >();
            for (int i = 1; i <= pair; i++)
            {
                string[]   tempStr = totalStr[i].Split(',');
                List <int> list    = new List <int>();
                for (int j = 0; j < tempStr.Length; j++)
                {
                    list.Add(int.Parse(tempStr[j]));
                }
                dataList.Add(list);
            }
            SquareLevelModel levelModel = new SquareLevelModel()
            {
                level    = int.Parse(str1[2]),
                side     = int.Parse(str1[0]),
                linePair = pair,
                data     = dataList,
            };
            if (!levelModels.ContainsKey(levelModel.side))
            {
                levelModels.Add(levelModel.side, new Dictionary <int, SquareLevelModel>());
            }
            levelModels[levelModel.side].Add(levelModel.level, levelModel);
        }
    }
Exemplo n.º 3
0
    public void BuildLevelFromFile(string fileName)
    {
        if (!File.Exists(fileName))
        {
            Debug.Log(fileName + " not exist!");
            return;
        }
        FileStream fileStream = File.OpenRead(fileName);

        foreach (string str in File.ReadAllLines(fileName))
        {
            string[]           totalStr = str.Split(';');
            string[]           str1     = totalStr[0].Split(',');
            int                pair     = int.Parse(str1[3]);
            List <List <int> > dataList = new List <List <int> >();
            for (int i = 1; i <= pair; i++)
            {
                string[]   tempStr = totalStr[i].Split(',');
                List <int> list    = new List <int>();
                for (int j = 0; j < tempStr.Length; j++)
                {
                    list.Add(int.Parse(tempStr[j]));
                }
                dataList.Add(list);
            }
            SquareLevelModel levelModel = new SquareLevelModel()
            {
                level    = int.Parse(str1[2]),
                side     = int.Parse(str1[0]),
                linePair = pair,
                data     = dataList,
            };
            if (!levelModels.ContainsKey(levelModel.side))
            {
                levelModels.Add(levelModel.side, new Dictionary <int, SquareLevelModel>());
            }
            levelModels[levelModel.side].Add(levelModel.level, levelModel);
        }
    }
Exemplo n.º 4
0
    public override void InitBlock(SquareLevelModel levelModel)
    {
        blockDictionary.Clear();
        backPaths.Clear();
        targetImage.Clear();
        targetPair.Clear();
        paths.Clear();
        sideNum = levelModel.side;
        RectTransform rectTransform = gameObject.GetComponent <RectTransform>();
        float         blockWidth    = (rectTransform.sizeDelta.x) / levelModel.side;
        float         blockHeight   = (rectTransform.sizeDelta.y) / levelModel.side;//图片有底边 不是正方形1025*1045
        float         widthScale    = blockWidth / block.rectTransform.sizeDelta.x;
        float         heightScale   = blockHeight / block.rectTransform.sizeDelta.y;
        Vector2       origin        = new Vector2(-rectTransform.sizeDelta.x * 0.5f + blockWidth * 0.5f, rectTransform.sizeDelta.y * 0.5f - blockHeight * 0.5f);

        for (int i = 0; i < levelModel.data.Count; i++)
        {
            List <int> points = levelModel.data[i];
            int        length = points.Count;
            if (length < 2)
            {
                continue;
            }
            int start = points[0];
            int last  = points[length - 1];
            targetPair.Add(start, last);
            targetPair.Add(last, start);
            targetImage.Add(start, i);
            targetImage.Add(last, i);
        }
        int childCount = rectTransform.childCount;
        int needCount  = levelModel.side * levelModel.side;

        if (childCount < needCount)
        {
            for (int i = 0; i < (needCount - childCount); i++)
            {
                if (blockPoolDisable.Count > 0)
                {
                    GameObject obj = blockPoolDisable.Dequeue();
                    obj.SetActive(true);
                    blockPoolEnable.Enqueue(obj);
                }
                else
                {
                    GameObject obj = GameObject.Instantiate <GameObject>(block.gameObject, transform);
                    obj.SetActive(true);
                    blockPoolEnable.Enqueue(obj);
                }
            }
        }
        else if (childCount > needCount)
        {
            List <GameObject> deleteList = new List <GameObject>();
            for (int i = 0; i < (needCount - childCount); i++)
            {
                GameObject obj = blockPoolDisable.Dequeue();
                obj.SetActive(false);
                blockPoolDisable.Enqueue(obj);
            }
        }
        GameObject[] objArray = blockPoolEnable.ToArray();
        for (int i = 0; i < needCount; i++)
        {
            int        h   = i % levelModel.side;
            int        v   = i / levelModel.side;
            GameObject obj = objArray[i];
            obj.name = i.ToString();
            RectTransform rect           = obj.GetComponent <RectTransform>();
            BaseBlock     blockComponent = obj.GetComponent <BaseBlock>();
            Vector3       localScale     = new Vector3(widthScale, heightScale, 1);
            Vector2       localPosition  = new Vector2(origin.x + h * blockWidth, origin.y - v * blockHeight);
            if (!targetImage.ContainsKey(i))
            {
                blockComponent.Init(i, localPosition, localScale, -1, GetAroundBlock(i, sideNum));
            }
            else
            {
                blockComponent.Init(i, localPosition, localScale, targetImage[i], GetAroundBlock(i, sideNum));
            }
            blockDictionary.Add(i, blockComponent);
        }
        scoreData.totalStep  = levelModel.linePair;
        scoreData.totalBlock = sideNum * sideNum;
        scoreData.best       = levelModel.linePair;
        scoreData.moves      = 0;
        scoreData.paint      = 0;
        Messenger <SquareLevelScoreData> .Broadcast(MessageDefines.OnScoreChange, scoreData);

        Messenger <InputState> .RemoveAllListener(MessageDefines.OnPostSquareInput);

        Messenger <InputState, int> .AddListener(MessageDefines.OnPostSquareInput, OnPostSquareInput);

        paths.Clear();
    }
Exemplo n.º 5
0
 public abstract void InitBlock(SquareLevelModel levelModel);