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); }
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 } } } }
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); }
//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(); }
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); }
public void SetCell(int row, int col, TetrisCell obj) { currentBlockCells[row, col] = obj; tmpBlockCells[row, col] = obj; }