Esempio n. 1
0
        public Move MakeMove(PieceColor color)
        {
            try
            {
                var startTime = DateTime.Now;
                var board     = Board.DeepClone();
                switch (color)
                {
                case PieceColor.White:
                    Board.LastMove = Board.MakeMove(WhitePlayerEngine.MakeMove(Board, Variant, GameMoves));
                    break;

                case PieceColor.Black:
                    Board.LastMove = Board.MakeMove(BlackPlayerEngine.MakeMove(Board, Variant, GameMoves));
                    break;
                }
                var endTime = DateTime.Now;
                History.Add(new HistoryBoard(startTime, endTime, board, color));
                if (Board.BoardArray.Where(p => p < 0).Count() == 0)
                {
                    throw new NoAvailablePiecesException(PieceColor.Black, Board.LastMove);
                }
                if (Board.BoardArray.Where(p => p > 0).Count() == 0)
                {
                    throw new NoAvailablePiecesException(PieceColor.White, Board.LastMove);
                }
                GameMoves.Add(Board.LastMove);
                if (IsDraw())
                {
                    throw new DrawException();
                }
                return(Board.LastMove);
            }
            catch (NotAvailableMoveException exception)
            {
                string winner = "";
                winner = exception.Color == PieceColor.Black ? "W" : "B";
                AddGameToDatabase(winner);
                throw;
            }
            catch (NoAvailablePiecesException exception)
            {
                string winner = "";
                switch (exception.Color)
                {
                case PieceColor.White when Variant == GameVariant.Checkers:
                case PieceColor.Black when Variant == GameVariant.Anticheckers:
                    winner = "B";
                    break;

                case PieceColor.Black when Variant == GameVariant.Checkers:
                case PieceColor.White when Variant == GameVariant.Anticheckers:
                    winner = "W";
                    break;
                }
                AddGameToDatabase(winner);
                throw;
            }
            catch (DrawException)
            {
                AddGameToDatabase("D");
                throw;
            }
            catch
            {
                throw;
            }
        }