Bonjour à tous,
Je débute en aspectJ, et je suis à la base de la base. J'ai utilisé le tutoriel de skebir pour la suite.
J'ai quelque problème pour utiliser un advice.
L'objectif de mon aspect est de vérifier les déplacements des pièces d'échec.
Mais pour le moment, au moment d'un mouvement, je veux juste afficher un dialogue indiquant que l'advice s'exécute.
Mon advice n'est pas appliqué dans mon programme.
Mon aspect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package uqac.aop.chess.aspect;
import uqac.aop.chess.agent.Move;
public aspect ValidationDeplacement {
//POINTCUT
pointcut checkMove(Move mv):
target(mv) && (
call(boolean uqac.aop.chess.piece.Piece.isMoveLegal(Move))
);
after(Move mv) : checkMove(mv) {
System.out.println("POINTCUT");
}
} |
Et voici la méthode sur laquelle il s’exécute :
public abstract boolean isMoveLegal(Move mv);
Cette méthode de la classe pièce est surcharger dans ma classe correspondant à un pion qui hérite de pièce.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public class Pawn extends Piece {
public Pawn(int player) {
super(player);
}
@Override
public String toString() {
return ((this.player == Player.WHITE) ? "P" : "p");
}
@Override
public boolean isMoveLegal(Move mv) {
// TODO Auto-generated method stub
boolean special = false;
// player1
if (player == Player.WHITE) {
if ((Math.abs(mv.xF - mv.xI) == 0) && (Math.abs(mv.yF - mv.yI) < 3)) {
special = true;
}
return (((mv.yF - mv.yI) == 1) && (Math.abs(mv.xF - mv.xI) <= 1)) || special;
}
// player 2
if ((Math.abs(mv.xF - mv.xI) == 0) && (Math.abs(mv.yF - mv.yI) < 3)) {
special = true;
}
return (((mv.yF - mv.yI) == -1) && (Math.abs(mv.xF - mv.xI) <= 1)) || special;
}
} |
L'objectif de cet aspect sera de vérifier la légalité de chaque déplacement à terme. Pour le moment, je fais un focus sur le simple fait de faire le pointcut, lors du déplacement d'un pion.
En vous remerciant !
Soccent
Partager