public void attackToken( Board board, MovablePlayerToken src, PlayerToken trg, boolean specialPower) { // An attack happens only between PlayerTokens: // perform attack method of source token: String outcome = ""; // No need for an extra attack method, just interpret differently the results. if (specialPower && (src instanceof SpecialMovablePlayerToken)) { SpecialMovablePlayerToken scltkn = (SpecialMovablePlayerToken) src; outcome = scltkn.specialAttackTo(trg); } else { outcome = src.attackTo(trg); } if (outcome.equals("won")) { // Save location: int tmpc = trg.getCol(); int tmpr = trg.getRow(); // Remove token that lost from the board: takeToken(board, trg); // move token that won to its place: this.moveToken(board, src, new Vector2D(tmpr, tmpc)); } else if (outcome.equals("lost")) { // Remove token that lost from the board: takeToken(board, src); } else if (outcome.equals("tie")) { // remove both tokens from the board: takeToken(board, src); takeToken(board, trg); } else if (outcome.equals("wonNotMove")) { // Remove token that lost from the board: takeToken(board, trg); } else if (outcome.equals("nothing")) { // Nothing happens in the board. } else if (outcome.equals("convert")) { // Target Token is converted to the other side (probably // due to cookies).. convertToken(board, trg); } }