Пример #1
0
        private void surrenderToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Victory victoryForm = new Victory(turn);

            if (victoryForm.ShowDialog() == DialogResult.OK)
            {
                NewGame();
            }
            else
            {
                Application.Exit();
            }
        }
Пример #2
0
        private void TakeEnemyPiece(PictureBox sender)
        {
            bool pass = false;

            if (!computer_enabled || turn != ChessColor.BLACK)
            {
                if (selected != null && (sender) != selected)
                {
                    if (BoardPieces[selected].Type != PieceType.KING && Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions))
                    {
                        bool         isPawnAtStart = false;
                        positionInfo startPos      = piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y];
                        positionInfo endPos        = piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y];
                        if (BoardPieces[sender].Color == ChessColor.WHITE)
                        {
                            white_pieces.Remove(BoardPieces[sender]);
                        }
                        else
                        {
                            black_pieces.Remove(BoardPieces[sender]);
                        }
                        startPos.ocupied = false;
                        startPos.piece   = null;
                        endPos.ocupied   = true;
                        endPos.piece     = BoardPieces[selected];
                        if (BoardPieces[selected].Type == PieceType.PAWN)
                        {
                            isPawnAtStart = ((Pawn)BoardPieces[selected]).startingPos;
                        }
                        BoardPieces[selected].MovePiece(endPos.piece.Position.X, endPos.piece.Position.Y);

                        if (Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions))
                        {
                            startPos.ocupied = true;
                            startPos.piece   = BoardPieces[selected];
                            endPos.ocupied   = true;
                            endPos.piece     = BoardPieces[sender];
                            BoardPieces[selected].MovePiece(startPos.piece.Position.X, startPos.piece.Position.Y);
                            if (BoardPieces[sender].Color == ChessColor.WHITE)
                            {
                                white_pieces.Remove(BoardPieces[sender]);
                            }
                            else
                            {
                                black_pieces.Remove(BoardPieces[sender]);
                            }
                            if (BoardPieces[selected].Type == PieceType.PAWN && isPawnAtStart)
                            {
                                ((Pawn)BoardPieces[selected]).startingPos = true;
                            }
                            DeselectBoard();
                            return;
                        }
                        else
                        {
                            pass = true;
                        }
                    }
                    if (pass || BoardPieces[selected].checkValidMove(BoardPieces[sender].Position, white_pieces, black_pieces, piecePositions))
                    {
                        if (BoardPieces[selected].Color != BoardPieces[sender].Color)
                        {
                            positionInfo startPos      = piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y];
                            positionInfo endPos        = piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y];
                            bool         isPawnAtStart = false;
                            if (BoardPieces[selected].Type == PieceType.PAWN)
                            {
                                isPawnAtStart = ((Pawn)BoardPieces[selected]).startingPos;
                            }
                            if (BoardPieces[sender].Color == ChessColor.WHITE)
                            {
                                white_pieces.Remove(BoardPieces[sender]);
                            }
                            else
                            {
                                black_pieces.Remove(BoardPieces[sender]);
                            }
                            startPos.ocupied = false;
                            startPos.piece   = null;
                            endPos.ocupied   = true;
                            endPos.piece     = BoardPieces[selected];
                            BoardPieces[selected].MovePiece(endPos.piece.Position.X, endPos.piece.Position.Y);
                            if (BoardPieces[selected].Type != PieceType.KING && Kings[BoardPieces[selected].Color].Check(white_pieces, black_pieces, piecePositions))
                            {
                                startPos.ocupied = true;
                                startPos.piece   = BoardPieces[selected];
                                endPos.ocupied   = true;
                                endPos.piece     = BoardPieces[sender];
                                BoardPieces[selected].MovePiece(startPos.piece.Position.X, startPos.piece.Position.Y);
                                if (BoardPieces[sender].Color == ChessColor.WHITE)
                                {
                                    white_pieces.Add(BoardPieces[sender]);
                                }
                                else
                                {
                                    black_pieces.Add(BoardPieces[sender]);
                                }
                                if (BoardPieces[selected].Type == PieceType.PAWN)
                                {
                                    ((Pawn)BoardPieces[selected]).startingPos = isPawnAtStart;
                                }
                                DeselectBoard();
                                return;
                            }
                            Moves move = new Moves(BoardPieces[selected], BoardPieces[selected].Position.X, BoardPieces[selected].Position.Y, BoardPieces[sender].Position.X, BoardPieces[sender].Position.Y);
                            move.TakenType  = BoardPieces[sender].getType();
                            move.PieceTaken = true;
                            MovesMade.Add(move);
                            loadMoves();
                            if (BoardPieces[sender].Color == ChessColor.WHITE)
                            {
                                white_pieces.Remove(BoardPieces[sender]);
                            }
                            else
                            {
                                black_pieces.Remove(BoardPieces[sender]);
                            }
                            piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].ocupied = false;
                            piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].piece   = null;
                            piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y].ocupied     = true;
                            piecePositions[BoardPieces[sender].Position.X][BoardPieces[sender].Position.Y].piece       = BoardPieces[selected];
                            BoardPieces[selected].MovePiece(BoardPieces[sender].Position.X, BoardPieces[sender].Position.Y);
                            Controls.Remove(sender);
                            BoardPieces.Remove(sender);
                            AnimateMovement(sender);
                            if (BoardPieces[selected].Type == PieceType.PAWN && BoardPieces[selected].Color == ChessColor.WHITE && BoardPieces[selected].Position.Y == 8 ||
                                BoardPieces[selected].Type == PieceType.PAWN && BoardPieces[selected].Color == ChessColor.BLACK && BoardPieces[selected].Position.Y == 1)
                            {
                                PawnChange changePawnForm = new PawnChange(BoardPieces[selected]);
                                if (changePawnForm.ShowDialog() == DialogResult.OK)
                                {
                                    piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].ocupied = false;
                                    piecePositions[BoardPieces[selected].Position.X][BoardPieces[selected].Position.Y].piece   = null;
                                    if (BoardPieces[selected].Color == ChessColor.WHITE)
                                    {
                                        white_pieces.Remove(BoardPieces[selected]);
                                    }
                                    else
                                    {
                                        black_pieces.Remove(BoardPieces[selected]);
                                    }
                                    Controls.Remove(selected);
                                    BoardPieces.Remove(selected);
                                    InitializeSinglePiece(changePawnForm.chosen.Position.X, changePawnForm.chosen.Position.Y, changePawnForm.chosen.Type, changePawnForm.chosen.Color, changePawnForm.chosen.Color == ChessColor.WHITE ? Color.White : Color.Black);
                                    selected = piecePositions[changePawnForm.chosen.Position.X][changePawnForm.chosen.Position.Y].piece.Piece;
                                }
                            }
                            if (Kings[BoardPieces[selected].Color == ChessColor.WHITE ? ChessColor.BLACK : ChessColor.WHITE].Check(white_pieces, black_pieces, piecePositions))
                            {
                                if (Kings[BoardPieces[selected].Color == ChessColor.WHITE ? ChessColor.BLACK : ChessColor.WHITE].victoryCondition(white_pieces, black_pieces, piecePositions))
                                {
                                    Victory victoryForm = new Victory(turn == ChessColor.BLACK ? ChessColor.WHITE : ChessColor.BLACK);
                                    if (victoryForm.ShowDialog() == DialogResult.OK)
                                    {
                                        NewGame();
                                        return;
                                    }
                                    else
                                    {
                                        Application.Exit();
                                    }
                                }
                            }
                            timeElapsed = 0;
                            turn        = turn == ChessColor.BLACK ? ChessColor.WHITE : ChessColor.BLACK;
                        }
                    }
                    DeselectBoard();
                }
            }
        }