private static Point[] GetPawnMoves(Point location, ChessPiece[,] board, PieceColor color) { int direction = color == PieceColor.White ? -1 : 1; List <Point> locations = new List <Point>(); Point[] directions = //relative to direction { new Point(0, direction), //forward one step new Point(0, direction * 2), //forward two steps new Point(direction, direction), //forward left new Point(-direction, direction) //forward right }; Point dir = location + directions[0]; if (board.WithinBounds(dir) && board[dir.X, dir.Y].type == PieceType.None) { locations.Add(dir); dir = location + directions[1]; if (board.WithinBounds(dir) && board[dir.X, dir.Y].type == PieceType.None && ((direction < 0 && location.Y == 6) || location.Y == 1) && !ContainsFriend(board, dir, color) && !ContainsEnemy(board, dir, color)) { locations.Add(dir); } } //capturing dir = location + directions[2]; if (board.WithinBounds(dir) && ContainsEnemy(board, dir, color)) { locations.Add(dir); } dir = location + directions[3]; if (board.WithinBounds(dir) && ContainsEnemy(board, dir, color)) { locations.Add(dir); } return(locations.ToArray()); }
private static Point[] GetJumps(Point location, Point[] offsets, ChessPiece[,] board, PieceColor color) { List <Point> locations = new List <Point>(); for (int i = 0; i < offsets.Length; i++) { Point sampleLocation = location + offsets[i]; if (board.WithinBounds(sampleLocation) && !ContainsFriend(board, sampleLocation, color)) { locations.Add(sampleLocation); } } return(locations.ToArray()); }
private static Point[] GetPaths(Point location, Point[] directions, ChessPiece[,] board, PieceColor color) { List <Point> locations = new List <Point>(); for (int i = 0; i < directions.Length; i++) { Point sampleLocation = location + directions[i]; while (board.WithinBounds(sampleLocation) && !ContainsFriend(board, sampleLocation, color)) { locations.Add(sampleLocation); if (ContainsEnemy(board, sampleLocation, color)) { break; } sampleLocation += directions[i]; } } return(locations.ToArray()); }