Esempio n. 1
0
        public override List <Point> GetPossibleMove()
        {
            List <Point> ArrPossibleMove = new List <Point>();
            BoardData    board           = BoardData.GetInstance();

            int          dy         = signDirection * 1;
            List <Point> listMoveBy = new List <Point>()
            {
                new Point(0, 1 * signDirection),
            };

            if (!this.IsMoved && board[this.Position.X, this.Position.Y + signDirection] == null)
            {
                listMoveBy.Add(new Point(0, 2 * signDirection));
            }

            List <Point> listAttackBy = new List <Point>()
            {
                new Point(-1, 1 * signDirection),
                new Point(1, 1 * signDirection),
            };

            foreach (Point p in listMoveBy)
            {
                Point newPos = new Point(Position.X + p.X, Position.Y + p.Y);
                if (board.CheckPositionInBoard(newPos.X, newPos.Y))
                {
                    Piece piece = board[newPos];
                    if (piece == null)
                    {
                        ArrPossibleMove.Add(newPos);
                    }
                }
            }

            foreach (Point p in listAttackBy)
            {
                Point newPos = new Point(Position.X + p.X, Position.Y + p.Y);
                if (board.CheckPositionInBoard(newPos.X, newPos.Y))
                {
                    Piece piece = board[newPos];
                    if (piece != null && piece.Side != this.Side)
                    {
                        ArrPossibleMove.Add(newPos);
                    }
                }
            }

            return(ArrPossibleMove);
        }
Esempio n. 2
0
        public override List <Point> GetPossibleMove()
        {
            List <Point> ArrPossibleMove = new List <Point>();
            BoardData    board           = BoardData.GetInstance();

            int[] dx = new int[8] {
                2, 2, 1, 1, -1, -1, -2, -2
            };
            int[] dy = new int[8] {
                -1, 1, -2, 2, 2, -2, 1, -1
            };
            for (int i = 0; i < 8; i++)
            {
                Point newPos = new Point(this.Position.X + dx[i], this.Position.Y + dy[i]);
                if (board.CheckPositionInBoard(newPos.X, newPos.Y))
                {
                    Piece piece = board[newPos];
                    if (piece == null || piece.Side != this.Side)
                    {
                        ArrPossibleMove.Add(newPos);
                    }
                }
            }

            return(ArrPossibleMove);
        }
Esempio n. 3
0
        private void CheckLoop(ref List <Point> arrPossibleMove, int v1, int v2)
        {
            BoardData board = BoardData.GetInstance();
            int       x     = Position.X;
            int       y     = Position.Y;

            while (true)
            {
                x += v1;
                y += v2;
                if (!board.CheckPositionInBoard(x, y))
                {
                    return;
                }
                if (board[x, y] == null)
                {
                    arrPossibleMove.Add(new Point(x, y));
                }
                else
                {
                    if (board[x, y].Side != Side)
                    {
                        arrPossibleMove.Add(new Point(x, y));
                    }
                    return;
                }
            }
        }
Esempio n. 4
0
        public override bool IsAvailableMove(Point des)
        {
            BoardData board = BoardData.GetInstance();

            if (!board.CheckPositionInBoard(des.X, des.Y))
            {
                return(false);
            }

            //Nếu là nước tấn công: ô tấn công phải có quân và là quân khác phe
            if (des.Y - this.Position.Y == signDirection && Math.Abs(des.X - this.Position.X) == 1)
            {
                Piece piece = board[des];
                if (piece != null && piece.Side != this.Side)
                {
                    return(true);
                }
                return(false);
            }

            //Nếu là nước di chuyển: ô đó phải trống và nằm trong vùng đi được
            if (des.X == this.Position.X && board[des] == null)
            {
                if (this.IsMoved)
                {
                    return(des.Y - Position.Y == signDirection);
                }
                else
                {
                    return((des.Y - Position.Y) / signDirection <= 2 && (des.Y - Position.Y) / signDirection >= 1);
                }
            }

            return(false);
        }
Esempio n. 5
0
        public override bool IsAvailableMove(Point des)
        {
            BoardData board = BoardData.GetInstance();

            if (!board.CheckPositionInBoard(des.X, des.Y))
            {
                return(false);
            }
            return(Math.Abs(des.X - Position.X) + Math.Abs(des.Y - Position.Y) == 3);
        }
Esempio n. 6
0
        public override bool IsAvailableMove(Point des)
        {
            BoardData board = BoardData.GetInstance();

            if (!board.CheckPositionInBoard(des.X, des.Y))
            {
                return(false);
            }
            int dx  = Math.Abs(des.X - Position.X);
            int dy  = Math.Abs(des.Y - Position.Y);
            int sum = dx * dx + dy * dy;

            return(dx + dy <= 2 && sum != 0);
        }