Example #1
0
        public void BoardDrawing()
        {
            var game = new TetrisGame(new Vec2i(10, 20), new PlayerScoreFile("helo.txt"));

            var board = new TetrisBoard(new Vec2i(6, 12));

            board.Draw(new Tetromino(TetrisCell.L, new int[, ] {
                { 0, 0, 1 },
                { 1, 1, 1 },
                { 0, 0, 0 },
            }), new Vec2i(2, 5));
            board.Draw(new Tetromino(TetrisCell.T, new int[, ] {
                { 0, 1, 0 },
                { 1, 1, 1 },
                { 0, 0, 0 },
            }), new Vec2i(1, 4));

            // I'm sorry
            var expected_board = new TetrisCell[12][] {
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, TetrisCell.T, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, TetrisCell.T, TetrisCell.T, TetrisCell.T, TetrisCell.L, 0
                },
                new TetrisCell[6] {
                    0, 0, TetrisCell.L, TetrisCell.L, TetrisCell.L, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
                new TetrisCell[6] {
                    0, 0, 0, 0, 0, 0
                },
            };

            Assert.Equal(expected_board, board.Cells);
        }
Example #2
0
    void DropClearedRow()
    {
        for (int currentRow = this.row - 1; currentRow > 0; currentRow--)
        {
            if (isRowClear(currentRow))
            {
                int unclearedRow = currentRow - 1;

                // search non cleared row on top
                bool foundUnclearedRow = false;
                while (!foundUnclearedRow && unclearedRow > 0)
                {
                    if (!isRowClear(unclearedRow))
                    {
                        foundUnclearedRow = true;
                    }
                    else
                    {
                        unclearedRow--;
                    }
                }

                int distanceToUnclearedRow = currentRow - unclearedRow;

                if (foundUnclearedRow)
                {
                    for (int itRow = currentRow; itRow > 0; itRow--)
                    {
                        for (int itCol = 0; itCol < this.col; itCol++)
                        {
                            int swapRowIndex = itRow - distanceToUnclearedRow;

                            if (swapRowIndex >= 0 && swapRowIndex < this.row)
                            {
                                // replace with its top
                                boardData[itRow, itCol] = boardData[itRow - distanceToUnclearedRow, itCol];
                                boardData[itRow - distanceToUnclearedRow, itCol] = 0;


                                //TODO: put cell view updates in other class?
                                if (itRow - distanceToUnclearedRow < this.tetrisCells.GetLength(0) && itRow - distanceToUnclearedRow >= 0)
                                {
                                    TetrisCell cell = this.tetrisCells[itRow - distanceToUnclearedRow, itCol];
                                    if (cell != null)
                                    {
                                        cell.transform.localPosition = new Vector3(itCol * cell.objectSize.x, -((itRow) * cell.objectSize.y), 0);
                                    }
                                    tetrisCells[itRow, itCol] = tetrisCells[itRow - distanceToUnclearedRow, itCol];
                                    tetrisCells[itRow - distanceToUnclearedRow, itCol] = null;
                                }
                            }
                        }
                    }

                    //TODO: Move remaining most top because it wasn't moved as its distanceToUnclearedRow is more than board size
                }
            }
        }
    }
Example #3
0
        public void TetrominoInitialization()
        {
            // Transposed to [x, y] coordinates.
            var tetromino_i_0 = new TetrisCell[][] {
                new TetrisCell[] { 0, 0, 0, 0 },
                new TetrisCell[] { TetrisCell.I, TetrisCell.I, TetrisCell.I, TetrisCell.I },
                new TetrisCell[] { 0, 0, 0, 0 },
                new TetrisCell[] { 0, 0, 0, 0 },
            };
            var tetromino_i_1 = new Tetromino(TetrisCell.I, new int[, ] {
                { 0, 0, 0, 0 },
                { 1, 1, 1, 1 },
                { 0, 0, 0, 0 },
                { 0, 0, 0, 0 },
            });

            Assert.Equal(tetromino_i_0, tetromino_i_1.Cells);
        }
Example #4
0
    //TODO: Refactor to factory
    void RenderPiece(TetrisPiece piece)
    {
        for (int i = 0; i < piece.size.row; i++)
        {
            for (int j = 0; j < piece.size.col; j++)
            {
                if (piece.GetPiece(i, j) == 1)
                {
                    GameObject  block       = Instantiate(tetrisBlockPrefab, this.transform);
                    BoxCollider boxCollider = block.GetComponent <BoxCollider>();

                    TetrisCell tetrisCell = block.AddComponent <TetrisCell>();
                    tetrisCell.objectSize = new Vector3(boxCollider.size.x * block.transform.localScale.x, boxCollider.size.y * block.transform.localScale.y);

                    piece.objectSize = new Vector3(boxCollider.size.x * block.transform.localScale.x, boxCollider.size.y * block.transform.localScale.y);
                    piece.SetCell(i, j, tetrisCell);
                }
            }
        }

        piece.RefreshView();
    }
Example #5
0
        public void ClearRows()
        {
            var board = new TetrisBoard(new Vec2i(3, 10));

            board.Cells = new TetrisCell[10][] {
                new TetrisCell[3] {
                    TetrisCell.Z, TetrisCell.Z, 0
                },
                new TetrisCell[3] {
                    TetrisCell.J, TetrisCell.Z, TetrisCell.Z
                },
                new TetrisCell[3] {
                    TetrisCell.J, TetrisCell.J, TetrisCell.J
                },
                new TetrisCell[3] {
                    TetrisCell.L, TetrisCell.L, TetrisCell.L
                },
                new TetrisCell[3] {
                    TetrisCell.L, 0, TetrisCell.Z
                },
                new TetrisCell[3] {
                    0, TetrisCell.Z, TetrisCell.Z
                },
                new TetrisCell[3] {
                    TetrisCell.J, TetrisCell.Z, 0
                },
                new TetrisCell[3] {
                    TetrisCell.J, TetrisCell.J, TetrisCell.J
                },
                new TetrisCell[3] {
                    TetrisCell.T, TetrisCell.T, TetrisCell.T
                },
                new TetrisCell[3] {
                    0, TetrisCell.T, 0
                },
            };

            var expectedBoard = new TetrisCell[10][] {
                new TetrisCell[3] {
                    0, 0, 0
                },
                new TetrisCell[3] {
                    0, 0, 0
                },
                new TetrisCell[3] {
                    0, 0, 0
                },
                new TetrisCell[3] {
                    0, 0, 0
                },
                new TetrisCell[3] {
                    0, 0, 0
                },
                new TetrisCell[3] {
                    TetrisCell.Z, TetrisCell.Z, 0
                },
                new TetrisCell[3] {
                    TetrisCell.L, 0, TetrisCell.Z
                },
                new TetrisCell[3] {
                    0, TetrisCell.Z, TetrisCell.Z
                },
                new TetrisCell[3] {
                    TetrisCell.J, TetrisCell.Z, 0
                },
                new TetrisCell[3] {
                    0, TetrisCell.T, 0
                },
            };

            var fullRows         = board.FindFullLines();
            var expectedFullRows = new int[] { 1, 2, 3, 7, 8 };

            Assert.Equal(expectedFullRows, fullRows);

            board.ClearFullLines();
            Assert.Equal(expectedBoard, board.Cells);
        }
Example #6
0
 public void SetCell(int row, int col, TetrisCell obj)
 {
     currentBlockCells[row, col] = obj;
     tmpBlockCells[row, col]     = obj;
 }