// ステージのブロックを作成 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; } } } }
// 手数を消費してアルファベットブロックを落とす 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"); }