コード例 #1
0
        public bool IsEnPassant(Board board, int startX, int startY, int endX, int endY, bool white)
        {
            //da li je poslednji potez bio pionom koji je presao 2 polja
            Type pawn = new Pawn(true).GetType();

            if (board.LastMove != null &&
                board.LastMove.End.Piece.GetType() == pawn &&
                Math.Abs(board.LastMove.End.X - board.LastMove.Start.X) == 2)
            {
                int x = board.LastMove.End.X;
                int y;
                for (int i = -1; i <= 1; i = i + 2)
                {
                    y = board.LastMove.End.Y + i;
                    if (BoardExplorer.WithinBoundaries(x, y))
                    {
                        //da li je pocetno polje mog piona u istoj vrsti i susednoj koloni
                        if (x == startX && y == startY)
                        {
                            int coef = white ? 1 : -1;
                            //da li je krajnje polje mog piona u istoj koloni i susednoj vrsti
                            if (endY == board.LastMove.End.Y && endX == (x + coef))
                            {
                                //jedi protivnickog piona
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        public bool CanMoveTwice(Board board, int startX, int startY, int endX, int endY, bool white)
        {
            int coef = white ? 2 : -2;
            int rowX = white ? 1 : 6;

            if ((startY - endY) == 0 && startX == rowX && (endX - startX) == coef)
            {
                List <Field> path = white ? BoardExplorer.
                                    ExploreNorth(board, board.Fields[startX][startY],
                                                 board.Fields[endX][endY]) :
                                    BoardExplorer.ExploreSouth(board, board.Fields[startX][startY],
                                                               board.Fields[endX][endY]);
                if (path[path.Count - 1].Piece == null)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #3
0
ファイル: King.cs プロジェクト: jovanromic/H_ECK
        public override bool ValidMove(Move move, Board board)
        {
            int startX = move.Start.X;
            int startY = move.Start.Y;
            int endX   = move.End.X;
            int endY   = move.End.Y;

            int dx = Math.Abs(endX - startX);
            int dy = Math.Abs(endY - startY);

            if (move.GetType().Equals(new ShortCastling(null, null).GetType()) &&
                Validator.ShortCastlingPossible(board, move))
            {
                return(true);
            }

            if (move.GetType().Equals(new LongCastling(null, null).GetType()) &&
                Validator.LongCastlingPossible(board, move))
            {
                return(true);
            }

            if (dx > 1)
            {
                return(false);
            }
            else if (dy > 1)
            {
                return(false);
            }
            else if (dx == dy && dx == 0)
            {
                return(false);
            }
            else
            {
                List <Field> attackers = BoardExplorer.FieldAttackers(board,
                                                                      board.Fields[endX][endY],
                                                                      !board.Fields[startX][startY].Piece.White);

                return(attackers.Count == 0);
            }
        }
コード例 #4
0
ファイル: Rook.cs プロジェクト: jovanromic/H_ECK
        public override bool ValidMove(Move move, Board board)
        {
            int          startX = move.Start.X;
            int          startY = move.Start.Y;
            int          endX   = move.End.X;
            int          endY   = move.End.Y;
            List <Field> inTheWay;

            if (startX != endX && startY != endY)
            {
                return(false);
            }

            //trazenje vertikalno
            else if (startY == endY)
            {
                //grana iznad
                if (endX > startX)
                {
                    inTheWay = BoardExplorer.ExploreNorth(board, move.Start, move.End);
                }
                //grana ispod
                else
                {
                    inTheWay = BoardExplorer.ExploreSouth(board, move.Start, move.End);
                }
            }
            //trazenje horizontalno
            else
            {
                if (endY > startY)
                {
                    inTheWay = BoardExplorer.ExploreEast(board, move.Start, move.End);
                }
                else
                {
                    inTheWay = BoardExplorer.ExploreWest(board, move.Start, move.End);
                }
            }

            return(BoardExplorer.IsPathClear(inTheWay[inTheWay.Count - 1], move.End));
        }
コード例 #5
0
ファイル: Bishop.cs プロジェクト: jovanromic/H_ECK
        public override bool ValidMove(Move move, Board board)
        {
            int startX = move.Start.X;
            int startY = move.Start.Y;
            int endX   = move.End.X;
            int endY   = move.End.Y;

            //da li je ciljno polje dijagonalno u odnosu na startno
            //pomeraj po X osi mora biti jednak pomeraju po Y osi
            if (Math.Abs(endX - startX) != Math.Abs(endY - startY))
            {
                return(false);
            }
            else
            {
                List <Field> inTheWay;

                if (endX > startX && endY > startY)
                {
                    inTheWay = BoardExplorer.ExploreNorthEast(board, move.Start, move.End);
                }

                else if (endX > startX && endY < startY)
                {
                    inTheWay = BoardExplorer.ExploreSouthEast(board, move.Start, move.End);
                }

                else if (endX < startX && endY < startY)
                {
                    inTheWay = BoardExplorer.ExploreSouthWest(board, move.Start, move.End);
                }

                else
                {
                    inTheWay = BoardExplorer.ExploreNorthWest(board, move.Start, move.End);
                }

                return(BoardExplorer.IsPathClear(inTheWay[inTheWay.Count - 1], move.End));
            }
        }