public static Board Parse(string board) { var rows = board.Split('\r', '\n').Where(r => !string.IsNullOrEmpty(r)).ToArray(); if (rows.Length != 8) { throw new ArgumentException($"Should be 8 rows! (got {rows.Length})"); } var boardRows = new List <Square[]>(); for (int rowIndex = 0; rowIndex < 8; rowIndex++) { var row = rows[rowIndex]; var boardRow = new List <Square>(); if (row.Length != (8 * 3) - 1) { throw new ArgumentException($"Rows must be 23 chars. Row {rowIndex} was {row.Length}"); } for (int columnIndex = 0; columnIndex < 8; columnIndex++) { string pieceString = row.Substring(columnIndex * 3, 2); var square = new Square( SquareReference.FromRowColumn(rowIndex, columnIndex), ParsePiece(pieceString) ); boardRow.Add(square); } boardRows.Add(boardRow.ToArray()); } return(new Board { Squares = boardRows.ToArray() }); }
public static SquareReference?Move(this SquareReference start, int rowDelta, int columnDelta) { int newRow = start.Row + rowDelta; int newColumn = start.Column + columnDelta; if (newRow < 0 || newRow > 7 || newColumn < 0 || newColumn > 7) { return(null); } return(SquareReference.FromRowColumn(newRow, newColumn)); }
public static Board CreateEmptyBoard() { return(new Board { Squares = new Square[8][] { Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(0, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(1, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(2, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(3, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(4, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(5, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(6, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(7, i), Piece.Empty)).ToArray(), } }); }
public static Board CreateStartingBoard() { return(new Board { Squares = new Square[8][] { (new [] { 2, 3, 4, 5, 6, 4, 3, 2 }) .Select( (i, index) => new Square( SquareReference.FromRowColumn(0, index), new Piece(Color.Black, (PieceType)i) ) ).ToArray(), Enumerable.Range(0, 8) .Select( i => new Square( SquareReference.FromRowColumn(1, i), new Piece(Color.Black, PieceType.Pawn) ) ).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(2, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(3, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(4, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8).Select(i => new Square(SquareReference.FromRowColumn(5, i), Piece.Empty)).ToArray(), Enumerable.Range(0, 8) .Select( i => new Square( SquareReference.FromRowColumn(6, i), new Piece(Color.White, PieceType.Pawn) ) ).ToArray(), (new [] { 2, 3, 4, 5, 6, 4, 3, 2 }) .Select( (i, index) => new Square( SquareReference.FromRowColumn(7, index), new Piece(Color.White, (PieceType)i) ) ).ToArray() } }); }