public Block.NUMBER selectBlockNum() //수정필요 { Block.NUMBER _number = Block.NUMBER.FIRST; // 이번 레벨의 레벨 데이터를 가져온다. LevelData level_data = this.level_control.getCurrentLevelData(); float rand = Random.Range(0.0f, 1.0f); // 0.0~1.0 사이의 난수. float sum = 0.0f; // 출현 확률의 합계. int i = 0; // 블록의 종류 전체를 처리하는 루프. for (i = 0; i < level_data.patternPercent.Length - 1; i++) { if (level_data.patternPercent[i] == 0.0f) { continue; // 출현 확률이 0이면 루프의 처음으로 점프. } sum += level_data.patternPercent[i]; // 출현 확률을 더한다. if (rand < sum) { // 합계가 난숫값을 웃돌면. break; // 루프를 빠져나온다. } } _number = (Block.NUMBER)i; // i번째 색을 반환한다. return(_number); }
public void swapBlock(BlockControl block0, Block.DIR4 dir, BlockControl block1) { // 각각의 블록 패턴을 기억해 둔다. Block.PATTERN color0 = block0.pattern; Block.PATTERN color1 = block1.pattern; // 각각의 블록 숫자를 기억해 둔다. Block.NUMBER number0 = block0.num; Block.NUMBER number1 = block1.num; // 각각의 블록의 확대율을 기억해 둔다. Vector3 scale0 = block0.transform.localScale; Vector3 scale1 = block1.transform.localScale; // 각각의 블록의 '사라지는 시간'을 기억해 둔다. float vanish_timer0 = block0.vanish_timer; float vanish_timer1 = block1.vanish_timer; // 각각의 블록의 이동할 곳을 구한다. Vector3 offset0 = BlockRoot.getDirVector(dir); Vector3 offset1 = BlockRoot.getDirVector(BlockRoot.getOppositDir(dir)); // 패턴을 교체한다. block0.setColor(color1); block1.setColor(color0); // 숫자를 교체한다. block0.setNumber(number1); block1.setNumber(number0); // 확대율을 교체한다. block0.transform.localScale = scale1; block1.transform.localScale = scale0; // '사라지는 시간'을 교체한다. block0.vanish_timer = vanish_timer1; block1.vanish_timer = vanish_timer0; block0.beginSlide(offset0); // 원래 블록 이동을 시작한다. block1.beginSlide(offset1); // 이동할 위치의 블록 이동을 시작한다. }
// 블록을 만들어 내고 가로 9칸, 세로 9칸에 배치한다. public void initialSetUp() { // 그리드의 크기를 9×9로 한다. this.blocks = new BlockControl[Block.BLOCK_NUM_X, Block.BLOCK_NUM_Y]; // 블록의 색 번호. int color_index = 0; Block.PATTERN color = Block.PATTERN.FIRST; Block.NUMBER number = Block.NUMBER.FIRST; for (int y = 0; y < Block.BLOCK_NUM_Y; y++) { // 처음~마지막행 for (int x = 0; x < Block.BLOCK_NUM_X; x++) { // 왼쪽~오른쪽 // BlockPrefab의 인스턴스를 씬에 만든다. GameObject game_object = Instantiate(this.BlockPrefab) as GameObject; // 위에서 만든 블록의 BlockControl 클래스를 가져온다. BlockControl block = game_object.GetComponent <BlockControl>(); // 블록을 그리드에 저장한다. this.blocks[x, y] = block; // 블록의 위치 정보(그리드 좌표)를 설정한다. block.i_pos.x = x; block.i_pos.y = y; // 각 BlockControl이 연계할 GameRoot는 자신이라고 설정한다. block.block_root = this; // 그리드 좌표를 실제 위치(씬의 좌표)로 변환한다. Vector3 position = BlockRoot.calcBlockPosition(block.i_pos); // 씬의 블록 위치를 이동한다. block.transform.position = position; // 블록의 색을 변경한다. //block.setColor((Block.COLOR)color_index); // 현재 출현 확률을 바탕으로 색을 결정한다. color = this.selectBlockColor(); block.setColor(color); // 현재 출현 확률을 바탕으로 색을 결정한다. //number = this.selectBlockNum(); //block.setNumber(number); //수정필요 // 블록의 이름을 설정(후술)한다. 나중에 블록 정보 확인때 필요. block.name = "block(" + block.i_pos.x.ToString() + "," + block.i_pos.y.ToString() + ")"; // 전체 색 중에서 임의로 하나의 색을 선택한다. color_index = Random.Range(0, (int)Block.PATTERN.NORMAL_COLOR_NUM); } } }
// 색이 바꿔 낙하 상태로 하고 지정한 위치에 재배치한다. public void beginRespawn(int start_ipos_y) { // 지정 위치까지 y좌표를 이동. this.position_offset.y = (float)(start_ipos_y - this.i_pos.y) * Block.COLLISION_SIZE; this.next_step = Block.STEP.FALL; //int color_index = //Random.Range((int)Block.COLOR.FIRST, (int)Block.COLOR.LAST + 1); //this.setColor((Block.COLOR)color_index); // 현재 레벨의 출현 확률을 바탕으로 블록의 색을 결정한다. Block.PATTERN color = this.block_root.selectBlockColor(); this.setColor(color); Block.NUMBER number = this.block_root.selectBlockNum(); this.setNumber(number); }
public void setNumber(Block.NUMBER _num) { this.num = _num; string text_value; switch (this.num) { default: case Block.NUMBER.NUM_A: text_value = "A"; break; case Block.NUMBER.NUM_2: text_value = "2"; break; case Block.NUMBER.NUM_3: text_value = "3"; break; case Block.NUMBER.NUM_4: text_value = "4"; break; case Block.NUMBER.NUM_5: text_value = "5"; break; case Block.NUMBER.NUM_6: text_value = "6"; break; case Block.NUMBER.NUM_7: text_value = "7"; break; case Block.NUMBER.NUM_8: text_value = "8"; break; case Block.NUMBER.NUM_9: text_value = "9"; break; case Block.NUMBER.NUM_10: text_value = "10"; break; case Block.NUMBER.NUM_J: text_value = "j"; break; case Block.NUMBER.NUM_Q: text_value = "Q"; break; case Block.NUMBER.NUM_K: text_value = "K"; break; } TextMesh cardNumber = GetComponentInChildren <TextMesh>(); cardNumber.text = text_value; }