/// <summary>
 /// Concat two MoveSets to form one MoveSet.
 /// </summary>
 /// <param name="moves1"></param>
 /// <param name="moves2"></param>
 internal MoveSet(MoveSet moves1, MoveSet moves2)
 {
     validMoves = moves1.validMoves.Concat(moves2.validMoves).ToArray();
     threateningMoves = moves1.threateningMoves.Concat(moves2.threateningMoves).ToArray();
     blockedMoves = moves1.blockedMoves.Concat(moves2.blockedMoves).ToArray();
 }
Exemple #2
0
 private void ResetSelected()
 {
     moves = null;
 }
Exemple #3
0
 protected override void FirstSquareSelected(ChessBoard board, SquareCoordinates coord, MoveSet moves)
 {
     if (board.ShowLegalMoves)
         foreach (Move legalMove in moves.LegalMoves)
             board.HighlightSquare(legalMove.Coordinates, Color.Green);
     if (board.ShowCheckedMoves)
         foreach (SquareCoordinates checkedMoves in moves.CheckableMoves)
             board.HighlightSquare(checkedMoves, Color.Indigo);
     if (board.ShowBlockedMoves)
         foreach (SquareCoordinates checkedMoves in moves.BlockedSquareMoves)
             board.HighlightSquare(checkedMoves, Color.Red);
     if (remoteOpponent != null)
         remoteOpponent.SendMessage(ChessPacketWriter.WriteSelectSquare(coord));
 }
Exemple #4
0
 protected abstract void Unselected(ChessBoard board, SquareCoordinates coord, MoveSet moves);
Exemple #5
0
 private Move GetMove(MoveSet moves, SquareCoordinates coord)
 {
     foreach (Move legalMove in moves.LegalMoves)
         if (legalMove.Coordinates == coord)
             return legalMove;
     return null;
 }
Exemple #6
0
 protected abstract void MadeMove(ChessBoard board, ChessPiece movedPiece, SquareCoordinates from, SquareCoordinates to, MoveSet moves);
Exemple #7
0
 protected abstract void PerformedCastle(ChessBoard board, bool kingSide, MoveSet moves);
Exemple #8
0
 protected override void Unselected(ChessBoard board, SquareCoordinates coord, MoveSet moves)
 {
 }
Exemple #9
0
        internal void Select(ChessBoard board, SquareCoordinates coord)
        {
            ChessPiece selectedPiece = board.GetPiece(coord);
            if (moves == null)
            {
                if (selectedPiece != null && selectedPiece.White == white)
                {
                    firstSelection = coord;
                    moves = GameLogic.MoveSet(board, coord, this);
                    board.HighlightSquare(coord, Color.Yellow);
                    FirstSquareSelected(board, coord, moves);
                }
            }
            else
            {
                if (coord == firstSelection)
                {
                    MoveSet prevMoves = moves;
                    ResetSelected();
                    board.UnhighlightSquare(coord);
                    Unselected(board, coord, prevMoves);
                }
                else
                {
                    Move m = GetMove(moves, coord);
                    if (m != null)
                    {
                        ChessPiece movedPiece, takenPiece = null;
                        MoveSet prevMoves = moves;
                        ResetSelected();
                        board.UnhighlightSquare(firstSelection);
                        if (m.Overtaken)
                            takenPiece = board.ClearSquare(m.TakenPiece);

                        movedPiece = board.ClearSquare(firstSelection);
                        movedPiece.LastSquare = firstSelection;
                        movedPiece.LastMove = board.CurrentMove;
                        board.DrawPiece(coord, movedPiece);
                        material.MovePiece(movedPiece.Type, firstSelection, coord);

                        MadeMove(board, movedPiece, firstSelection, coord, prevMoves);
                        board.UpdateLastMove(firstSelection, m, movedPiece, takenPiece);
                        board.NextTurn();
                    }
                    else if (moves.CheckableMoves.Contains(coord) && !board.ShowCheckedMoves)
                    {
                        MessageBox.Show(board, "You may not place the selected piece there\nsince it will either place your king in check\nor will leave your king in check.", "Illegal Move", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }
Exemple #10
0
 protected override void PerformedCastle(ChessBoard board, bool kingSide, MoveSet moves)
 {
 }
Exemple #11
0
 protected override void MadeMove(ChessBoard board, ChessPiece movedPiece, SquareCoordinates from, SquareCoordinates to, MoveSet moves)
 {
 }
Exemple #12
0
 protected override void Unselected(ChessBoard board, SquareCoordinates coord, MoveSet moves)
 {
     foreach (Move legalMove in moves.LegalMoves)
         board.UnhighlightSquare(legalMove.Coordinates);
     foreach (SquareCoordinates checkedMoves in moves.CheckableMoves)
         board.UnhighlightSquare(checkedMoves);
     foreach (SquareCoordinates checkedMoves in moves.BlockedSquareMoves)
         board.UnhighlightSquare(checkedMoves);
     if (remoteOpponent != null)
         remoteOpponent.SendMessage(ChessPacketWriter.WriteSelectSquare(coord));
 }
Exemple #13
0
 protected override void PerformedCastle(ChessBoard board, bool kingSide, MoveSet moves)
 {
     if (moves != null)
     {
         foreach (Move legalMove in moves.LegalMoves)
             board.UnhighlightSquare(legalMove.Coordinates);
         foreach (SquareCoordinates checkedMoves in moves.CheckableMoves)
             board.UnhighlightSquare(checkedMoves);
         foreach (SquareCoordinates checkedMoves in moves.BlockedSquareMoves)
             board.UnhighlightSquare(checkedMoves);
     }
     if (remoteOpponent != null)
         remoteOpponent.SendMessage(ChessPacketWriter.WriteCastle(kingSide));
 }
Exemple #14
0
 protected override void MadeMove(ChessBoard board, ChessPiece movedPiece, SquareCoordinates from, SquareCoordinates to, MoveSet moves)
 {
     foreach (Move legalMove in moves.LegalMoves)
         board.UnhighlightSquare(legalMove.Coordinates);
     foreach (SquareCoordinates checkedMoves in moves.CheckableMoves)
         board.UnhighlightSquare(checkedMoves);
     foreach (SquareCoordinates checkedMoves in moves.BlockedSquareMoves)
         board.UnhighlightSquare(checkedMoves);
     PieceType promoted = PieceType.UNDEFINED;
     if (movedPiece.IsA(PieceType.PAWN) && (White && to.Rank == 7 || !White && to.Rank == 0))
         PromotePiece(board, to, promoted = new PromotionSelect().Prompt(board));
     if (remoteOpponent != null)
     {
         remoteOpponent.SendMessage(ChessPacketWriter.WriteSelectSquare(to));
         if (promoted != PieceType.UNDEFINED)
             remoteOpponent.SendMessage(ChessPacketWriter.WritePromotion(to, promoted));
     }
 }