Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }