Exemple #1
0
    public static Tetromino createTetromino(GameField field)
    {
        Tetromino newTetromino = TetrominoControls.ttm_create_new(field);

        TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_draw, newTetromino);
        return(newTetromino);
    }
Exemple #2
0
    public static void bn_map_forEachTrue(Action <BlockGroup, int, int> fn, BlockGroup blkG, List <string> bin = null)
    {
        if (bin == null)
        {
            bin = TetrominoControls.mapTetromino(blkG.GetPiece());
        }

        bool read_row(int curr)
        {
            if (curr < bin.Count)
            {
                return(read_col(bin[curr], curr, 0));
            }
            return(true);
        }

        bool read_col(string s, int r, int curr) //read all columns of a row
        {
            if (curr < s.Length)
            {
                if (s[curr] == '1')
                {
                    fn(blkG, curr, r);
                }
                return(read_col(s, r, curr + 1));
            }
            return(read_row(r + 1));
        }

        read_row(0);
    }
 void Start()
 {
     field         = createField(new GameField((10, 20), gamePanel));
     hold          = createField(new GameField((5, 4), holdPanel));
     next          = createField(new GameField((5, 4), nextPanel));
     nextTetromino = TetrominoControls.createTetromino(next);
     score         = scoreCounter;
     score.text    = 0.ToString();
 }
Exemple #4
0
    public static Tetromino cloneTetromino(Tetromino ttm, GameField field)
    {
        if (ttm == null)
        {
            return(null);
        }
        Tetromino clone = TetrominoControls.ttm_create_copy(ttm, field);

        TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_draw, clone);
        return(clone);
    }
Exemple #5
0
    public static void CreateGhost(Tetromino ttm)
    {
        if (ttm.ghost != null)
        {
            blockControl.blk_cnj_clear(ttm.ghost.GetBlocks());
        }
        Ghost ghost = new Ghost(ttm);

        TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_drawGhost, ghost, TetrominoControls.mapTetromino(ttm.GetPiece()));
        TetrominoControls.fitPiece(ghost, ghost.GetField());
        ttm.ghost = ghost;
    }
    void Update()
    {
        if (currentTetromino == null) //the tetromino is never generated on its own, it is cloned from the next tetromino
        {
            StopAllCoroutines();
            currentTetromino = TetrominoControls.cloneTetromino(nextTetromino, field);
            TetrominoControls.CreateGhost(currentTetromino);

            blockControl.blk_cnj_clear(nextTetromino.GetBlocks());
            nextTetromino = TetrominoControls.createTetromino(next);

            StartCoroutine(goDown());
            changeColor(currentTetromino.GetBlocks());
        }
        if (Input.GetKeyDown("d")) // Moves to the right
        {
            if (blockControl.blk_cnj_foreach(blockControl.blk_solo_checkRight, currentTetromino.GetBlocks(), 0))
            {
                blockControl.blk_cnj_foreach(blockControl.blk_solo_moveRight, currentTetromino.GetBlocks(), 0);
                currentTetromino.SetLocation(new Vector2Int(1, 0));
                TetrominoControls.CreateGhost(currentTetromino);
            }
        }
        if (Input.GetKeyDown("a"))// Moves to the left
        {
            if (blockControl.blk_cnj_foreach(blockControl.blk_solo_checkLeft, currentTetromino.GetBlocks(), 0))
            {
                blockControl.blk_cnj_foreach(blockControl.blk_solo_moveLeft, currentTetromino.GetBlocks(), 0);
                currentTetromino.SetLocation(new Vector2Int(-1, 0));
                TetrominoControls.CreateGhost(currentTetromino);
            }
        }
        if (Input.GetKeyDown("s"))// Moves Down
        {
            if (currentTetromino != null)
            {
                StopAllCoroutines();
                tick = 0.05f;
                StartCoroutine(goDown());
            }
        }
        if (Input.GetKeyUp("s"))// Moves Down
        {
            StopAllCoroutines();
            tick = 1f;
            StartCoroutine(goDown());
        }
        if (Input.GetKeyDown("w"))
        {
            rotation();
            TetrominoControls.CreateGhost(currentTetromino);
        }
        if (Input.GetKeyDown("f"))
        {
            TetrominoControls.fitPiece(currentTetromino, currentTetromino.GetField());
            UiControl.scr_add(score, 36);
            checkDown(currentTetromino);
        }
        if (Input.GetKeyDown("c") && recentlyChanged == false)
        {
            Tetromino cloneAux = null;

            if (holdTetromino != null)
            {
                cloneAux = holdTetromino;
                blockControl.blk_cnj_clear(holdTetromino.GetBlocks());
            }

            holdTetromino = TetrominoControls.cloneTetromino(currentTetromino, hold);
            blockControl.blk_cnj_clear(currentTetromino.GetBlocks());
            blockControl.blk_cnj_clear(currentTetromino.GetGhost().GetBlocks());
            currentTetromino = TetrominoControls.cloneTetromino(cloneAux, field);
            TetrominoControls.CreateGhost(currentTetromino);
            recentlyChanged = true;
        }
    }