Example #1
0
        internal void ApplyMove(BoardPosition start_position, BoardPosition end_position)
        {
            var possMoves = mChessBoard.GetPossibleMoves() as IEnumerable <ChessMove>;

            // Validate the move as possible.
            foreach (var move in possMoves)
            {
                if (move.EndPosition.Equals(end_position) && move.StartPosition.Equals(start_position))
                {
                    if (move.MoveType == ChessMoveType.PawnPromote)
                    {
                        //open new window
                        //in new window return chesspieceType
                        //apply in the new window and break
                        var pawnPromotionSelect = new ChessPromotionView(this, start_position, end_position);
                        pawnPromotionSelect.Show();
                        break;
                    }
                    else
                    {
                        mChessBoard.ApplyMove(move);

                        break;
                    }
                }
            }

            RebindState();
            if (mChessBoard.IsFinished)
            {
                GameFinished?.Invoke(this, new EventArgs());
            }
        }
Example #2
0
        internal async Task ApplyMoveAsync(BoardPosition start_position, BoardPosition end_position)
        {
            var possMoves = mChessBoard.GetPossibleMoves() as IEnumerable <ChessMove>;

            // Validate the move as possible.
            foreach (var move in possMoves)
            {
                if (move.EndPosition.Equals(end_position) && move.StartPosition.Equals(start_position))
                {
                    if (move.MoveType == ChessMoveType.PawnPromote)
                    {
                        //open new window
                        //in new window return chesspieceType
                        //apply in the new window and break
                        var pawnPromotionSelect = new ChessPromotionView(this, start_position, end_position);
                        pawnPromotionSelect.Show();
                        break;
                    }
                    else
                    {
                        mChessBoard.ApplyMove(move);
                        break;
                    }
                }
            }
            RebindState();
            if (Players == NumberOfPlayers.One && !mChessBoard.IsFinished)
            {
                var bestMove = await Task.Run(() => mGameAi.FindBestMove(mChessBoard));

                if (bestMove != null)
                {
                    mChessBoard.ApplyMove(bestMove as ChessMove);
                }
            }
            RebindState();
            if (mChessBoard.IsFinished)
            {
                GameFinished?.Invoke(this, new EventArgs());
            }
        }