Exemple #1
0
 private static void ValidatePosition(PositionOnTheBoard positionOnTheBoard)
 {
     if (positionOnTheBoard.Horizontal < 'a' || positionOnTheBoard.Horizontal > 'h' ||
         positionOnTheBoard.Vertical < 1 || positionOnTheBoard.Vertical > 8
         )
     {
         throw new InvalidMoveException("Positions are out of the board!");
     }
 }
Exemple #2
0
        public void PutFigureOnPositionWithoutMovingItActualy(PositionOnTheBoard positionOnTheBoard, Figure figure)
        {
            ValidatePosition(positionOnTheBoard);

            board[8 - positionOnTheBoard.Vertical, positionOnTheBoard.Horizontal - 'a'] = figure;

            //if (figure is ICastlingFigure)
            //{
            //    ((ICastlingFigure)figure).HasBeenMovedFromTheStartOfTheGame = true;
            //}
        }
Exemple #3
0
        public void PutFigureOnPosition(PositionOnTheBoard positionOnTheBoard, Figure figure)
        {
            ValidatePosition(positionOnTheBoard);

            board[8 - positionOnTheBoard.Vertical, positionOnTheBoard.Horizontal - 'a'] = figure;

            if (figure is ICastlingFigure)
            {
                ((ICastlingFigure)figure).HasBeenMovedFromTheStartOfTheGame = true;
            }
        }
Exemple #4
0
 public bool isPositionProducable(PositionOnTheBoard positionOnTheBoard)
 {
     if (this.color == Colors.White)
     {
         return(positionOnTheBoard.Vertical == 8);
     }
     else
     {
         return(positionOnTheBoard.Vertical == 1);
     }
 }
Exemple #5
0
        public void RemoveFigureOnPosition(PositionOnTheBoard positionOnTheBoard)
        {
            ValidatePosition(positionOnTheBoard);

            board[8 - positionOnTheBoard.Vertical, positionOnTheBoard.Horizontal - 'a'] = null;
        }
Exemple #6
0
        public Figure GetFigureOnPosition(PositionOnTheBoard positionOnTheBoard)
        {
            ValidatePosition(positionOnTheBoard);

            return(board[8 - positionOnTheBoard.Vertical, positionOnTheBoard.Horizontal - 'a']);
        }
Exemple #7
0
        private void MoveHandler(object sender, EventArgs eventArgs)
        {
            if (this.chessFieldSelected == null)
            {
                this.chessFieldSelected = (ChessField)sender;

                List <PositionOnTheBoard> attackingPos =
                    this.chessGame.GetAllPossiblePositionsOfPlacingTheFigure(this.chessFieldSelected.positionOnTheBoard
                                                                             , this.chessFieldSelected.chessFigure, (Colors)this.chessFieldSelected.chessFigureColor);

                if (this.chessFieldSelected.chessFigure.FullName == typeof(King).FullName)
                {
                    attackingPos.AddRange(this.chessGame.GetAllPossiblePositionsOfRookWhenCastlingTheKing(this.chessFieldSelected.positionOnTheBoard
                                                                                                          , (Colors)this.chessFieldSelected.chessFigureColor));
                }

                if (this.chessFieldSelected.chessFigure.FullName == typeof(Rook).FullName)
                {
                    PositionOnTheBoard kingPos = this.chessGame.GetPossiblePositionOfKingWhenCastlingTheRook(this.chessFieldSelected.positionOnTheBoard
                                                                                                             , (Colors)this.chessFieldSelected.chessFigureColor);

                    if (kingPos != null)
                    {
                        attackingPos.Add(kingPos);
                    }
                    attackingPos.AddRange(this.chessGame.GetAllPossiblePositionsOfRookWhenCastlingTheKing(this.chessFieldSelected.positionOnTheBoard
                                                                                                          , (Colors)this.chessFieldSelected.chessFigureColor));
                }

                foreach (var field in this.board)
                {
                    if (((ChessField)field).positionOnTheBoard.Equals(this.chessFieldSelected.positionOnTheBoard) == false &&
                        attackingPos.Any(ap => ((ChessField)field).positionOnTheBoard.Equals(ap)) == false)
                    {
                        field.Enabled = false;
                    }
                    else
                    {
                        field.Enabled = true;
                    }
                }
            }
            else
            {
                if (this.chessFieldSelected.chessFigure.FullName == typeof(King).FullName &&
                    this.chessGame.MakeCastling(this.chessFieldSelected.positionOnTheBoard,
                                                ((ChessField)sender).positionOnTheBoard, (Colors)this.chessFieldSelected.chessFigureColor))
                {
                    ;
                }
                else if (this.chessFieldSelected.chessFigure.FullName == typeof(Rook).FullName &&
                         this.chessGame.MakeCastling(
                             ((ChessField)sender).positionOnTheBoard, this.chessFieldSelected.positionOnTheBoard
                             , (Colors)this.chessFieldSelected.chessFigureColor))
                {
                    ;
                }
                else
                {
                    var resultFormMove = this.chessGame.NormalMove(new NormalMovePositions
                                                                       (this.chessFieldSelected.positionOnTheBoard.Horizontal,
                                                                       this.chessFieldSelected.positionOnTheBoard.Vertical,
                                                                       ((ChessField)sender).positionOnTheBoard.Horizontal,
                                                                       ((ChessField)sender).positionOnTheBoard.Vertical)
                                                                   , chessFieldSelected.chessFigure, (Colors)chessFieldSelected.chessFigureColor);

                    if (resultFormMove.HasTheFigurePawnProducedItself == true)
                    {
                        Figure       figureChosen = null;
                        DialogResult dialogResult = MessageBox.Show("Do you want to get a QUEEN?", "", MessageBoxButtons.YesNo);
                        if (dialogResult == DialogResult.Yes)
                        {
                            figureChosen = new Queen((Colors)chessFieldSelected.chessFigureColor);
                        }
                        else
                        {
                            DialogResult dialogResult2 = MessageBox.Show("Do you want to get a ROOK?", "", MessageBoxButtons.YesNo);
                            if (dialogResult2 == DialogResult.Yes)
                            {
                                figureChosen = new Rook((Colors)chessFieldSelected.chessFigureColor);
                            }
                            else
                            {
                                DialogResult dialogResult3 = MessageBox.Show("Do you want to get a BISHOP?", "", MessageBoxButtons.YesNo);
                                if (dialogResult3 == DialogResult.Yes)
                                {
                                    figureChosen = new Bishop((Colors)chessFieldSelected.chessFigureColor);
                                }
                                else
                                {
                                    figureChosen = new Knight((Colors)chessFieldSelected.chessFigureColor);
                                }
                            }
                        }

                        this.chessGame.ProducePawn(new PositionOnTheBoard(((ChessField)sender).positionOnTheBoard.Horizontal, ((ChessField)sender).positionOnTheBoard.Vertical)
                                                   , figureChosen, figureChosen.color);
                    }
                }

                Colors chessFigureColor = (Colors)chessFieldSelected.chessFigureColor;

                this.InitialzeBoard(this.chessGame.chessBoard);


                if (this.chessGame.CheckForMate(chessFigureColor) && !this.chessGame.CheckForCheck(this.chessGame.chessBoard, SwitchColor(chessFigureColor)))
                {
                    MessageBox.Show("remi");
                    this.ChessGameHasEnded(EndGameInfo.Draw);
                }

                if (this.chessGame.CheckForMate(chessFigureColor) && this.chessGame.CheckForCheck(this.chessGame.chessBoard, SwitchColor(chessFigureColor)))
                {
                    MessageBox.Show("mate");
                    if (chessFigureColor == Colors.Black)
                    {
                        this.ChessGameHasEnded(EndGameInfo.BlackWin);
                    }
                    else
                    {
                        this.ChessGameHasEnded(EndGameInfo.WhiteWin);
                    }
                }

                this.chessFieldSelected = null;
            }
        }