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); }
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); }
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; } } }
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); }
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); }
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); }