Ejemplo n.º 1
0
        public Tetromino GetRandomTetromino()
        {
            int       index         = random.Next(7);
            Tetromino nextTetromino = defaultTetromonos[index];

            return(nextTetromino.GetCopy());
        }
Ejemplo n.º 2
0
        public Tetromino GetCopy()
        {
            Tetromino copy = new Tetromino();

            copy.Kind = this.Kind;
            for (int i = 0; i < units.Length; i++)
            {
                copy.units[i] = this.units[i];
            }
            return(copy);
        }
Ejemplo n.º 3
0
        private Tetromino RotateByMatrix(Tetromino tetromino)
        {
            Tetromino rotated = new Tetromino();

            for (int i = 0; i < rotated.units.Length; i++)
            {
                rotated.units[i] = Rotate(tetromino.units[i], tetromino.units[2]);
            }
            rotated.Kind = tetromino.Kind;
            return(rotated);
        }
Ejemplo n.º 4
0
        public void MoveTetromino(MoveDirection direction)
        {
            HideTetromino();
            switch (direction)
            {
            case MoveDirection.Down:
                if (!CanMoveDown(1))
                {
                    PlaceTetramino(instantly: false);
                }
                else
                {
                    for (int i = 0; i < currentTetramino.units.Length; i++)
                    {
                        currentTetramino.units[i].Row += 1;
                    }
                }
                break;

            case MoveDirection.InstantlyDown:
                PlaceTetramino(instantly: true);
                break;

            case MoveDirection.Right:
            case MoveDirection.Left:
                bool right  = direction == MoveDirection.Right;
                int  offset = right ? 1 : -1;

                if (ClashWithBloskOrBorders(currentTetramino, offset))
                {
                    break;
                }

                for (int i = 0; i < currentTetramino.units.Length; i++)
                {
                    currentTetramino.units[i].Column = currentTetramino.units[i].Column + offset;
                }
                break;

            case MoveDirection.Rotate:
                if (currentTetramino.Kind == TetrominoKind.O)
                {
                    break;
                }
                Tetromino rotated = manager.Rotate(currentTetramino);

                if (!ClashWithBloskOrBorders(rotated))
                {
                    currentTetramino = rotated;
                }
                break;
            }
            AddTetraminoToBoard();
        }
Ejemplo n.º 5
0
        public Board()
        {
            boardHeight = 24;
            boardWidth  = 10;

            cells = new Cell[boardHeight][];

            InitFreeSpaces();
            InitBoarders();

            manager          = new TetrominoManager();
            currentTetramino = manager.GetRandomTetromino();

            ShowLines();
            ShowPoints();

            AddTetraminoToBoard();
        }
Ejemplo n.º 6
0
 private bool ClashWithBloskOrBorders(Tetromino tetromino, int offset = 0)
 {
     foreach (Unit i in tetromino.units)
     {
         if (i.Column + offset < 0)
         {
             return(true);
         }
         if (i.Column + offset > 9)
         {
             return(true);
         }
         if (cells[i.Row][i.Column + offset].IsblockOrBorder)
         {
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 7
0
        private void PlaceTetramino(bool instantly)
        {
            if (instantly)
            {
                MoveDownInstantly();
            }

            foreach (Unit i in currentTetramino.units)
            {
                cells[i.Row][i.Column].TransformToBlock();
            }

            if (EndGame())
            {
                Game.EndGame();
                return;
            }

            RemoveBlocks();
            currentTetramino = manager.GetRandomTetromino();
        }
Ejemplo n.º 8
0
 public Tetromino Rotate(Tetromino tetromino)
 {
     return(RotateByMatrix(tetromino));
 }
Ejemplo n.º 9
0
        private void InitDefaultTetrominos()
        {
            Tetromino tetrominoI = new Tetromino();

            tetrominoI.Kind      = TetrominoKind.I;
            tetrominoI.units[0]  = new Unit(0, 4);
            tetrominoI.units[1]  = new Unit(1, 4);
            tetrominoI.units[2]  = new Unit(2, 4);
            tetrominoI.units[3]  = new Unit(3, 4);
            defaultTetromonos[0] = tetrominoI;

            Tetromino tetrominoO = new Tetromino();

            tetrominoO.Kind      = TetrominoKind.O;
            tetrominoO.units[0]  = new Unit(0, 4);
            tetrominoO.units[1]  = new Unit(1, 4);
            tetrominoO.units[2]  = new Unit(0, 5);
            tetrominoO.units[3]  = new Unit(1, 5);
            defaultTetromonos[1] = tetrominoO;

            Tetromino tetrominoT = new Tetromino();

            tetrominoT.Kind      = TetrominoKind.T;
            tetrominoT.units[2]  = new Unit(0, 4);
            tetrominoT.units[1]  = new Unit(1, 4);
            tetrominoT.units[0]  = new Unit(0, 5);
            tetrominoT.units[3]  = new Unit(0, 3);
            defaultTetromonos[2] = tetrominoT;

            Tetromino tetrominoZ = new Tetromino();

            tetrominoZ.Kind      = TetrominoKind.Z;
            tetrominoZ.units[0]  = new Unit(0, 4);
            tetrominoZ.units[1]  = new Unit(1, 4);
            tetrominoZ.units[2]  = new Unit(0, 3);
            tetrominoZ.units[3]  = new Unit(1, 5);
            defaultTetromonos[3] = tetrominoZ;

            Tetromino tetrominoS = new Tetromino();

            tetrominoS.Kind      = TetrominoKind.S;
            tetrominoS.units[0]  = new Unit(0, 4);
            tetrominoS.units[1]  = new Unit(1, 4);
            tetrominoS.units[2]  = new Unit(1, 3);
            tetrominoS.units[3]  = new Unit(0, 5);
            defaultTetromonos[4] = tetrominoS;

            Tetromino tetrominoJ = new Tetromino();

            tetrominoJ.Kind      = TetrominoKind.J;
            tetrominoJ.units[0]  = new Unit(0, 4);
            tetrominoJ.units[1]  = new Unit(1, 5);
            tetrominoJ.units[2]  = new Unit(0, 5);
            tetrominoJ.units[3]  = new Unit(0, 3);
            defaultTetromonos[5] = tetrominoJ;

            Tetromino tetrominoL = new Tetromino();

            tetrominoL.Kind      = TetrominoKind.L;
            tetrominoL.units[0]  = new Unit(0, 4);
            tetrominoL.units[1]  = new Unit(1, 3);
            tetrominoL.units[2]  = new Unit(0, 5);
            tetrominoL.units[3]  = new Unit(0, 3);
            defaultTetromonos[6] = tetrominoL;
        }