Esempio n. 1
0
    // ステージのブロックを作成
    public void stageMaker(string filename)
    {
        // テキストファイルからデータを読み込む
        TextAsset textasset = new TextAsset();                                //テキストファイルのデータを取得するインスタンスを作成

        textasset = Resources.Load(filename, typeof(TextAsset)) as TextAsset; //Resourcesフォルダから対象テキストを取得
        string TextLines = textasset.text;                                    //テキスト全体をstring型で入れる変数を用意して入れる

        //Splitで一行づつを代入した1次配列を作成
        textMessage = TextLines.Split('\n'); //

        //行数と列数を取得
        string[] columstr = textMessage[0].Split(',');
        columnLength = columstr.Length - 1;
        rowLength    = textMessage.Length;

        // 画面に出すブロックの縦数は最大7にする
        if (rowLength > 7)
        {
            DefaultBlockHeight = 7;
        }
        else
        {
            DefaultBlockHeight = rowLength;
        }

        // ステージ用のテキストファイルを2次元配列データに格納する用の2次元配列を作成
        stageData = new string[columnLength, rowLength];

        // stageDataから空き枠以外をMaskDataに格納する用の2次元配列を作成
        MaskData = new GameObject[columnLength, rowLength + 1];

        // stageDataから英語ブロック、猫などを格納する用の2次元配列を作成
        PuzzleData = new GameObject[columnLength, rowLength];


        //2次配列を定義
        textWords = new string[rowLength, columnLength];

        for (int i = 0; i < rowLength; i++)
        {
            string[] tempWords = textMessage[i].Split(','); //textMessageをカンマごとに分けたものを一時的にtempWordsに代入

            for (int n = 0; n < columnLength; n++)
            {
                textWords[i, n] = tempWords[n]; //2次配列textWordsにカンマごとに分けたtempWordsを代入していく
            }
        }

        //char[] eigochar = "AAAAAABBCCCDDDEEEEEEFFGGGHHHIIIIIJKKKLLLMMMNNNOOOOPPQRRRSSSTTTUUUUVWWXYYYZ".ToCharArray();

        int k = rowLength - 1;

        for (int i = 0; i < rowLength; i++)
        {
            for (int n = 0; n < columnLength; n++)
            {
                string str = textWords[i, n];

                //neko
                if (str == "*")
                {
                    stageData[n, k] = "cat";
                }
                //maskなし
                else if (str == "-")
                {
                    stageData[n, k] = "";
                }
                //アルファベットランダム
                else if (str == "#")
                {
                    stageData[n, k] = RandomMake.alphabet();
                }
                //アルファベット
                else
                {
                    stageData[n, k] = str;
                }
            }
            k--;
        }

        // stageDataからMaskDataを作成する
        for (int i = 0; i < columnLength; i++)
        {
            for (int j = 0; j < rowLength; j++)
            {
                //空白の時
                if (stageData[i, j] != "")
                {
                    Vector2 pos = new Vector2(i * BlockSize - (BlockSize * columnLength) / 2 + BlockSize / 2, j * BlockSize + BlockGroundHeight - (rowLength - DefaultBlockHeight) * BlockSize);

                    // スクリプトからインスタンス(動的にゲームオブジェクトを指定数だけ作る
                    MaskData[i, j] = Instantiate(MaskPrefab, pos, Quaternion.identity);

                    MaskData[i, j].name = "Mask";
                    MaskData[i, j].transform.SetParent(puzzleTransform);
                    MaskData[i, j].transform.localPosition = pos;
                    MaskData[i, j].transform.localScale    = MaskPrefab.transform.localScale;
                }
            }
        }

        // stageDataからPuzzleDataを作成する
        for (int i = 0; i < columnLength; i++)
        {
            for (int j = 0; j < rowLength; j++)
            {
                //空白の時
                if (stageData[i, j] != "")
                {
                    Vector2 pos = new Vector2(i * BlockSize - (BlockSize * columnLength) / 2 + BlockSize / 2, j * BlockSize + BlockGroundHeight - (rowLength - DefaultBlockHeight) * BlockSize);

                    //Vector2 pos = new Vector2(i * BlockSize - 320 + 45 + margin, j * BlockSize - 270);

                    // スクリプトからインスタンス(動的にゲームオブジェクトを指定数だけ作る
                    PuzzleData[i, j] = Instantiate(puzzlePrefab, pos, Quaternion.identity);
                    if (stageData[i, j] == "cat")
                    {
                        PuzzleData[i, j].GetComponent <BlockData>().setup(BlockType.CAT, stageData[i, j], false, i, j);
                        PuzzleData[i, j].name = "Cat"; // GameObjectの名前を決めている
                    }
                    else
                    {
                        PuzzleData[i, j].GetComponent <BlockData>().setup(BlockType.ALPHABET, stageData[i, j], false, i, j);
                        PuzzleData[i, j].name = "Block"; // GameObjectの名前を決めている
                    }

                    // 生成したGameObjectをヒエラルキーに表示
                    PuzzleData[i, j].transform.SetParent(puzzleTransform);
                    PuzzleData[i, j].transform.localPosition = pos;
                    PuzzleData[i, j].transform.localScale    = puzzlePrefab.transform.localScale;
                }
            }
        }
    }
Esempio n. 2
0
    // 手数を消費してアルファベットブロックを落とす
    public void DropBlockButton()
    {
        bool search = true;



        // Maskと英語ブロックを参照して空きスペースを探す
        for (int j = ActiveBlockHeight - UnderArrowHeight; j < rowLength; j++)
        {
            // Maskと英語ブロックを参照して空きスペースを探す
            for (int i = 0; i < columnLength; i++)
            {
                //PuzzleDataが空白の時
                if (PuzzleData[i, j] == null && MaskData[i, j] != null)
                {
                    Debug.Log("sssssss");
                    search = false;

                    // パズルを落とす位置をセット
                    //Vector2 pos = new Vector2(i * BlockSize - (BlockSize * columnLength) / 2 + BlockSize / 2, 1500);
                    Vector2 pos = new Vector2(i * BlockSize - (BlockSize * columnLength) / 2 + BlockSize / 2, rowLength * BlockSize + BlockGroundHeight - (rowLength - DefaultBlockHeight) * BlockSize);

                    // スクリプトからインスタンス(動的にゲームオブジェクトを指定数だけ作る
                    PuzzleData[i, j] = Instantiate(puzzlePrefab, pos, Quaternion.identity);

                    // アルファベットブロックにする
                    PuzzleData[i, j].GetComponent <BlockData>().setup(BlockType.ALPHABET, RandomMake.alphabet(), false, i, j);
                    PuzzleData[i, j].name = "Block"; // GameObjectの名前を決めている
                    PuzzleData[i, j].transform.SetParent(puzzleTransform);
                    PuzzleData[i, j].transform.localPosition = pos;

                    Debug.Log("columnLength" + (columnLength) + "j" + j);
                    //アルフェベットブロックの位置をセット
                    pos = new Vector2(i * BlockSize - (BlockSize * columnLength) / 2 + BlockSize / 2, j * BlockSize + BlockGroundHeight - (rowLength - DefaultBlockHeight) * BlockSize);
                    PuzzleData[i, j].GetComponent <Liner>().OnUpper(pos, rowLength - j + 1);
                    //PuzzleData[i, j].GetComponent<Liner>().OnStart(pos, k);
                    //PuzzleData[i, j].transform.position = pos;
                    //PuzzleData[i, j].transform.localScale = puzzlePrefab.transform.localScale;

                    //アルファベットブロックを落としたので手数を1つ減らす
                    StatusData.Hand--;
                    StatusData.StatusUpdate();

                    //パズルエリアの英語ブロック数を更新
                    CheckPotentialPuzzle();
                }

                if (!search)
                {
                    break;
                }
            }
            if (!search)
            {
                break;
            }
        }


        // ActiveBlockHeightから上DefaultBlockHeight(7段)までPuzzleData[,]を参照して空き配列を見る
        // 空き配列にMaskData[,]を確認しMaskが存在する
        //アルファベットブロックを落とす

        //空きスペースがない returnする
        return;

        //
        Debug.Log("DropBlock");
    }