Beispiel #1
0
    public void Init()
    {
        blocks  = new Block[Data.Columns * Data.Rows];
        time    = 0.0f;
        oldTime = Time.time;
        player  = MonoBehaviour.FindObjectOfType <Player>();

        // Tetriminoの生成
        current = CreateTetrimino();
        next    = CreateTetrimino();

        // 各Tetriminoの初期化
        current.Launch();
        next.Standby();

        player.OnRotated = (dir) =>
        {
            if (current == null)
            {
                return;
            }

            current.Rotate(dir);
        };

        player.OnTranslated = (dir) =>
        {
            if (current == null)
            {
                return;
            }

            current.Translate(dir);
        };

        player.OnWarped = () =>
        {
            if (current == null)
            {
                return;
            }

            current.Warp();
        };
    }
Beispiel #2
0
    private void Next()
    {
        var bitboard  = StoreManager.Instance.BoardStore.BitBoard;
        var typeboard = StoreManager.Instance.BoardStore.TypeBoard;

        // 置かれたBlockのビットを立てる
        foreach (var block in current.Blocks)
        {
            TetrisBitBoard.SetPositionFlag(ref bitboard, block);
            TetrisBitBoard.SetTypeFlag(ref typeboard, block);

            // 置いたブロックを保存
            blocks[block.Position.y * Data.Columns + block.Position.x] = block;
        }

        var removeRow = TetrisBitBoard.CheckLine(bitboard, typeboard);

        // Lineの更新
        UpdateScoreAndLine(removeRow.Count);

        // ブロックの状態を更新
        UpdateView(removeRow);

        // ゲームが終了したか判定
        if (IsFinished(bitboard))
        {
            current = next = null;

            OnFinished();
            return;
        }

        // 現在,次のテトリミノの更新
        current = next;
        next    = CreateTetrimino();

        // 現在の状態を保存
        TetrisBitBoard.SaveCurrentData(current, next, bitboard, typeboard);

        // 次の操作へ
        current.Launch();
        next.Standby();
    }