private static void AddNullsForOldPiece(List <TetrisBrickWithPosition> diffList, TetrisPieceWithPosition oldPieceWithPos) { if (oldPieceWithPos == null) { return; } for (int row = 0; row < oldPieceWithPos.Piece.MaxSize; row++) { for (int column = 0; column < oldPieceWithPos.Piece.MaxSize; column++) { TetrisBrick oldBrick = oldPieceWithPos.Piece[row, column]; if (oldBrick != null) { int rowRelativeToBoard = row + oldPieceWithPos.Position.Row; int columnRelativeToBoard = column + oldPieceWithPos.Position.Column; diffList.Add(new TetrisBrickWithPosition { Brick = null, Position = new Coordinates(rowRelativeToBoard, columnRelativeToBoard) }); } } } }
private int CountHoles(TetrisState state) { int holes = 0; for (int col = 0; col < state.Columns; col++) { bool foundBrick = false; for (int row = 0; row < state.Rows; row++) { TetrisBrick brick = state.FixedBricks[row][col]; if (brick != null) { foundBrick = true; } if (foundBrick && brick == null) { holes++; } } } return(holes); }
private void ComputeCurrentPieceDifferences(TetrisState oldState, TetrisState newState, List <TetrisBrickWithPosition> diffList) { TetrisPieceWithPosition oldPieceWithPos = oldState?.CurrentPiece; TetrisPieceWithPosition newPieceWithPos = newState.CurrentPiece; AddNullsForOldPiece(diffList, oldPieceWithPos); if (newPieceWithPos == null) { return; } for (int row = 0; row < newPieceWithPos.Piece.MaxSize; row++) { for (int column = 0; column < newPieceWithPos.Piece.MaxSize; column++) { int rowRelativeToBoard = row + newPieceWithPos.Position.Row; int columnRelativeToBoard = column + newPieceWithPos.Position.Column; TetrisBrick newBrick = newPieceWithPos.Piece[row, column]; if (newBrick != null) { diffList.Add(new TetrisBrickWithPosition { Brick = (TetrisBrick)newBrick.Clone(), Position = new Coordinates(rowRelativeToBoard, columnRelativeToBoard) }); } } } }
private TetrisBrick MakeRandomBrick() { TetrisBrick brick = new TetrisBrick { Color = ColorFactory.MakeRandomColor() }; return(brick); }
private static bool AreBricksDifferent(TetrisBrick oldBrick, TetrisBrick newBrick) { bool result = (oldBrick != null && newBrick == null) || (oldBrick == null && newBrick != null) || (oldBrick != null && newBrick != null && !oldBrick.Color.Equals(newBrick.Color)); return(result); }
private void DisplayBrickCharacter(TetrisBrick brick, int row, int column) { int windowColumn = column + BoardWindowOrigin.Column + BorderWidth; int windowRow = row + BoardWindowOrigin.Row + BorderWidth; System.Console.SetCursorPosition(left: windowColumn, top: windowRow); if (brick != null) { System.Console.ForegroundColor = (brick.Color as ConsoleColor2).Value; System.Console.Write(TetrisConsoleConstants.Brick); } else { System.Console.Write(TetrisConsoleConstants.Space); } }
public void AddPiece(TetrisPieceWithPosition pieceWithPos) { TetrisPiece piece = pieceWithPos.Piece; for (int row = 0; row < piece.MaxSize; row++) { for (int column = 0; column < piece.MaxSize; column++) { TetrisBrick brick = piece[row, column]; if (brick != null) { int rowRelativeToBoard = row + pieceWithPos.Position.Row; int columnRelativeToBoard = column + pieceWithPos.Position.Column; Bricks[rowRelativeToBoard][columnRelativeToBoard] = (TetrisBrick)brick.Clone(); } } } }
internal void CopyFixedBricksFromState(TetrisState state) { for (int row = 0; row < state.Rows; row++) { for (int col = 0; col < state.Columns; col++) { TetrisBrick brick = state.FixedBricks[row][col]; if (brick != null) { Bricks[row][col] = (TetrisBrick)brick.Clone(); } else { Bricks[row][col] = null; } } } }
public void CopyFixedBricksInState(TetrisState state) { for (int row = 0; row < Bricks.Length; row++) { for (int col = 0; col < Bricks[row].Length; col++) { TetrisBrick fixedBrick = Bricks[row][col]; if (fixedBrick != null) { state.FixedBricks[row][col] = (TetrisBrick)fixedBrick.Clone(); } else { state.FixedBricks[row][col] = null; } } } }
private static void ComputeFixedBricksDifferences(TetrisState oldState, TetrisState newState, List <TetrisBrickWithPosition> diffList) { for (int row = 0; row < newState.Rows; row++) { for (int column = 0; column < newState.Columns; column++) { TetrisBrick oldBrick = oldState?.FixedBricks[row][column]; TetrisBrick newBrick = newState.FixedBricks[row][column]; if (AreBricksDifferent(oldBrick, newBrick)) { diffList.Add(new TetrisBrickWithPosition { Brick = (newBrick != null) ? (TetrisBrick)newBrick.Clone() : null, Position = new Coordinates(row, column) }); } } } }
public override string ToString() { StringBuilder sb = new StringBuilder(500); sb.Append('-', Bricks[0].Length + 2); sb.AppendLine(); for (int row = 0; row < Bricks.Length; row++) { sb.Append("|"); for (int column = 0; column < Bricks[row].Length; column++) { TetrisBrick brick = Bricks[row][column]; sb.Append(brick != null ? brick.ToString() : " "); } sb.Append("|"); sb.AppendLine(); } sb.Append('-', Bricks[0].Length + 2); sb.AppendLine(); return(sb.ToString()); }