public override bool ValidateMove(Vector direction) { if (direction.Equals(new Vector( 1, 2)) || direction.Equals(new Vector( 2, 1)) || direction.Equals(new Vector(-1, 2)) || direction.Equals(new Vector(-2, 1)) || direction.Equals(new Vector( 1, -2)) || direction.Equals(new Vector( 2, -1)) || direction.Equals(new Vector(-1, -2)) || direction.Equals(new Vector(-2, -1))) { Position pos = GetPositionOnBoard().Move(direction); IChessPiece piece = Board.GetFieldPiece(pos); if ((piece == null) || (!Color.Equals(piece.Color))) return true; } return false; }
public override bool ValidateMove(Vector direction) { int yDir = (Color == ChessColor.Black) ? -1 : 1; // Move if ((direction.Equals(new Vector(0, yDir))) || (OnStartPosition && direction.Equals(new Vector(0, yDir * 2)))) { Position pos = GetPositionOnBoard().Move(direction); IChessPiece piece = Board.GetFieldPiece(pos); if (piece == null) { if (Math.Abs(direction.y) > 1) { pos = pos.Move(new Vector(0, -yDir)); piece = Board.GetFieldPiece(pos); if (piece == null) return true; } else { return true; } } } // Attacking else if (direction.Equals(new Vector( 1, yDir)) || direction.Equals(new Vector(-1, yDir))) { Position pos = GetPositionOnBoard(); IChessPiece enemy = Board.GetFieldPiece(pos.Move(direction)); if ((enemy != null) && (enemy.Color != Color)) return true; // En Passant else if (EnPassantPossible) return true; } return false; }