Пример #1
0
        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);
        }
Пример #3
0
        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)
                        });
                    }
                }
            }
        }
Пример #4
0
        private TetrisBrick MakeRandomBrick()
        {
            TetrisBrick brick = new TetrisBrick {
                Color = ColorFactory.MakeRandomColor()
            };

            return(brick);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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();
                    }
                }
            }
        }
Пример #8
0
        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;
                    }
                }
            }
        }
Пример #9
0
        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;
                    }
                }
            }
        }
Пример #10
0
        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)
                        });
                    }
                }
            }
        }
Пример #11
0
        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());
        }