Exemplo n.º 1
0
    public Block.PATTERN selectBlockColor()
    {
        Block.PATTERN color = Block.PATTERN.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;                           // 루프를 빠져나온다.
            }
        }
        color = (Block.PATTERN)i; // i번째 색을 반환한다.
        return(color);
    }
Exemplo n.º 2
0
    // 낙하했을 때 위아래 블록을 교체한다.
    public void fallBlock(BlockControl block0, Block.DIR4 dir, BlockControl block1)
    {
        // block0과 block1의 색, 크기, 사라질 때까지 걸리는 시간, 표시, 비표시, 상태
        // 를 기록.
        Block.PATTERN color0        = block0.pattern;
        Block.PATTERN color1        = block1.pattern;
        Vector3       scale0        = block0.transform.localScale;
        Vector3       scale1        = block1.transform.localScale;
        float         vanish_timer0 = block0.vanish_timer;
        float         vanish_timer1 = block1.vanish_timer;
        bool          visible0      = block0.isVisible();
        bool          visible1      = block1.isVisible();

        Block.STEP step0 = block0.step;
        Block.STEP step1 = block1.step;
        // block0과 block1의 각종 속성을 교체한다.
        block0.setColor(color1);
        block1.setColor(color0);
        block0.transform.localScale = scale1;
        block1.transform.localScale = scale0;
        block0.vanish_timer         = vanish_timer1;
        block1.vanish_timer         = vanish_timer0;
        block0.setVisible(visible1);
        block1.setVisible(visible0);
        block0.step = step1;
        block1.step = step0;
        block0.beginFall(block1);
    }
Exemplo n.º 3
0
    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); // 이동할 위치의 블록 이동을 시작한다.
    }
Exemplo n.º 4
0
    // 인수 color의 색으로 블록을 칠한다.
    public void setColor(Block.PATTERN _pattern)
    {
        this.pattern = _pattern;
        Sprite pattern_value;

        switch (this.pattern)
        { // 칠할 색에 따라서 갈라진다.
        default:
        case Block.PATTERN.SPADE:
            pattern_value = block_root.Spade;
            break;

        case Block.PATTERN.DIAMOND:
            pattern_value = block_root.Diamond;
            break;

        case Block.PATTERN.HEART:
            pattern_value = block_root.Heart;
            break;

        case Block.PATTERN.CLOVER:
            pattern_value = block_root.Clover;
            break;
        }
        // 이 게임 오브젝트의 머티리얼 색상을 변경한다.
        SpriteRenderer cardPattern = GetComponentInChildren <SpriteRenderer>();

        cardPattern.sprite = pattern_value;
    }
Exemplo n.º 5
0
    // 블록을 만들어 내고 가로 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);
            }
        }
    }
Exemplo n.º 6
0
 // 색이 바꿔 낙하 상태로 하고 지정한 위치에 재배치한다.
 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);
 }