// 次のブロックの色を取得する(ゲームスタート時に、全部を埋めるとき用). public Block.COLOR_TYPE getNextColorStart(int x, int y) { #if false Block.COLOR_TYPE color_type; color_type = (Block.COLOR_TYPE)Random.Range((int)Block.NORMAL_COLOR_FIRST, (int)Block.NORMAL_COLOR_LAST + 1); return(color_type); #else StackBlock[,] blocks = this.control.blocks; ConnectChecker connect_checker = this.control.connect_checker; Block.COLOR_TYPE org_color; int sel; // org_color = blocks[x, y].color_type; // 『出現する色の候補のリスト』を初期化する. // (リストにすべての色が含まれるようにする). this.init_candidates(); // 各色を置いたとき、同じ色が何個並ぶかを調べておく. for (int i = 0; i < (int)Block.NORMAL_COLOR_NUM; i++) { // i 番目のカラーのブロックを置く blocks[x, y].setColorType((Block.COLOR_TYPE)i); connect_checker.clearAll(); // 連結数をカウント this.connect_num[i] = connect_checker.checkConnect(x, y); } if (this.connect_arrow_num > 0) { // まだあがり目ができてもいい場合. // connect_num[] の中の最大値(最大で max_num 個同じ色のブロックが並ぶ). int max_num = this.get_max_connect_num(); // max_num じゃないものを削除する(最大値をとるものだけを候補に残す). this.erase_candidate_if_not(max_num); sel = Random.Range(0, candidates.Count); // 同じ色が4つ並んだら、あがり目の残り数を減らしておく if (this.connect_num[(int)candidates[sel]] >= 4) { this.connect_arrow_num--; } } else { // もうあがり目を作れない場合. // 同じ色が4つならんでしまう色を候補から外す. for (int i = candidates.Count - 1; i >= 0; i--) { if (this.connect_num[(int)candidates[i]] >= 4) { candidates.RemoveAt(i); } } if (candidates.Count == 0) { this.init_candidates(); Debug.Log("give up"); } // connect_num[] の中の最大値(最大で max_num 個同じ色のブロックが並ぶ). int max_num = this.get_max_connect_num(); // max_num じゃないものを削除する(最大値をとるものだけを候補に残す). this.erase_candidate_if_not(max_num); sel = Random.Range(0, candidates.Count); } // blocks[x, y].setColorType(org_color); return((Block.COLOR_TYPE)candidates[sel]); #endif }
// 取得下一个方块的颜色(游戏开始时,全部设置后) public Block.COLOR_TYPE getNextColorStart(int x, int y) { #if false Block.COLOR_TYPE color_type; color_type = (Block.COLOR_TYPE)Random.Range((int)Block.NORMAL_COLOR_FIRST, (int)Block.NORMAL_COLOR_LAST + 1); return(color_type); #else StackBlock[,] blocks = this.control.blocks; ConnectChecker connect_checker = this.control.connect_checker; Block.COLOR_TYPE org_color; int sel; // org_color = blocks[x, y].color_type; // 初始化“出现时颜色的候选值列表” // (使列表包含所有的颜色) this.init_candidates(); // 设置各个方块的颜色时,探测已经排列了几个同种颜色的方块 for (int i = 0; i < (int)Block.NORMAL_COLOR_NUM; i++) { // 放置第i项颜色的方块 blocks[x, y].setColorType((Block.COLOR_TYPE)i); connect_checker.clearAll(); // 计算连结数 this.connect_num[i] = connect_checker.checkConnect(x, y); } if (this.connect_arrow_num > 0) { // 生成好了初始的同色4方块组 // connect_num[] 中的最大值(最大允许max_num 个同色方块排列) int max_num = this.get_max_connect_num(); // 如果数量不是max_num 则删除(只保留适当对象作为候补) this.erase_candidate_if_not(max_num); sel = Random.Range(0, candidates.Count); // 如果同色4个方块排列后,初始连结好的4方块组的数量将减少1 if (this.connect_num[(int)candidates[sel]] >= 4) { this.connect_arrow_num--; } } else { // 还没有生成初始的同色4方块组 // 如果同种颜色已经有4个方块排列好了则从候补值中剔除 for (int i = candidates.Count - 1; i >= 0; i--) { if (this.connect_num[(int)candidates[i]] >= 4) { candidates.RemoveAt(i); } } if (candidates.Count == 0) { this.init_candidates(); Debug.Log("give up"); } // connect_num[] 中的最大值(最大允许max_num 个同色方块排列) int max_num = this.get_max_connect_num(); // 如果数量不是max_num 则删除(只保留适当对象作为候补) this.erase_candidate_if_not(max_num); sel = Random.Range(0, candidates.Count); } // blocks[x, y].setColorType(org_color); return((Block.COLOR_TYPE)candidates[sel]); #endif }
// ---------------------------------------------------------------- // public void create() { // this.blocks = new StackBlock[BLOCK_NUM_X, BLOCK_NUM_Y]; for (int y = 0; y < BLOCK_NUM_Y; y++) { for (int x = 0; x < BLOCK_NUM_X; x++) { GameObject game_object = GameObject.Instantiate(this.StackBlockPrefab) as GameObject; StackBlock block = game_object.GetComponent <StackBlock>(); block.place.x = x; block.place.y = y; this.blocks[x, y] = block; block.setUnused(); block.stack_control = this; } } // this.is_color_enable = new bool[Block.NORMAL_COLOR_NUM]; for (int i = 0; i < this.is_color_enable.Length; i++) { this.is_color_enable[i] = true; } // ピンクは封印 this.is_color_enable[(int)Block.COLOR_TYPE.PINK] = false; // this.connect_checker = new ConnectChecker(); this.connect_checker.stack_control = this; this.connect_checker.blocks = this.blocks; this.connect_checker.create(); this.block_feeder = new BlockFeeder(); this.block_feeder.control = this; this.block_feeder.create(); // this.setColorToAllBlock(); // this.combo.is_now_combo = false; this.combo.combo_count_last = 0; this.combo.combo_count_current = 0; this.eliminate_count = 0; this.eliminate_to_fall = ELIMINATE_TO_FALL_INIT; this.eliminate_to_cake = ELIMINATE_TO_CAKE_INIT; this.is_scroll_enable = true; this.is_connect_check_enable = true; }