private AIResponse HandleRegularMove(IChessboard chessboard) { var boxesWithPieces = ChessboardBoxesHelper.GetBoxesThatHavePieces(chessboard, Turn); if (boxesWithPieces.Count == 0) { return(AIResponse.NoPiecesLeft); } var allAvailableMoves = new List <Tuple <Box, Box> >(); foreach (var boxWithPiece in boxesWithPieces) { var availableMoves = GetAvailableMovesFromBox(chessboard, boxWithPiece); allAvailableMoves.AddRange(availableMoves); } if (allAvailableMoves.Count == 0) { return(AIResponse.NoMovesLeft); } var move = ChooseMove(allAvailableMoves); chessboard.Move(move.Item1.Position, move.Item2.Position); return(AIResponse.SuccessfulMove); }
private static List <Tuple <Box, Box> > GetAvailableMovesFromBox(IChessboard chessboard, Box origin) { var moves = new List <Tuple <Box, Box> >(); origin.Piece.CheckPossibilitiesForProvidedLocationAndMarkThem(chessboard, origin.Position); var availableBoxes = ChessboardBoxesHelper.GetAvailableBoxes(chessboard); foreach (var availableBox in availableBoxes) { moves.Add(new Tuple <Box, Box>(origin, availableBox)); } chessboard.SetChessboardBoxesAsUnavailable(); return(moves); }