/** * Implements Speed special movement/attack model. * * @param board * @param mtkn * @return */ public List<Vector2D> powerMovementSystemSpeed(Board board, MovablePlayerToken mtkn) { List<Vector2D> movements = new ArrayList<Vector2D>(); List<Vector2D> extraMovements = new ArrayList<Vector2D>(); // Make consecutive movements: int x = mtkn.getCol(); int y = mtkn.getRow(); movements.add(new Vector2D(y - 1, x)); movements.add(new Vector2D(y + 1, x)); movements.add(new Vector2D(y, x - 1)); movements.add(new Vector2D(y, x + 1)); movements = validInBoard(movements); movements = validInPlayer(board, movements); for (int k = 0; k < movements.size(); k++) { if (board.getToken(movements.get(k).y, movements.get(k).x).getOwn() != this.getTurn().otherSide()) { extraMovements.add(new Vector2D(movements.get(k).y - 1, movements.get(k).x)); extraMovements.add(new Vector2D(movements.get(k).y + 1, movements.get(k).x)); extraMovements.add(new Vector2D(movements.get(k).y, movements.get(k).x - 1)); extraMovements.add(new Vector2D(movements.get(k).y, movements.get(k).x + 1)); } } extraMovements = validInBoard(extraMovements); extraMovements = validInPlayer(board, extraMovements); movements.addAll(extraMovements); return movements; }
public void moveToken(Board board, MovablePlayerToken src, Vector2D trgloc) { // A move happens only between a movablePlayerToken and Grass token: // Swap tokens: int tmpc = src.getCol(); int tmpr = src.getRow(); // Update position of source token: this.insertToken2Board(board, src, trgloc.y, trgloc.x); // fill the space with grass: this.insertToken2Board(board, StrategoBoard.grassToken, tmpr, tmpc); }
/** * Saves the lost (input) Token and places it back to the board in the first empty position. If no * empty position Token is not saved. * * @param board * @param tkn * @return */ public boolean saveToken(Board board, MovablePlayerToken tkn) { // Check if input Token is indeed killed; if (tkn.getCol() >= 0) { return false; } // Move the selected Token into the board (if possible!): if (getTurn().side().pname.equals("Fire")) { // find the first empty spot: for (int k = 0; k < 30; k++) { int r = k / 10 + 5; int c = k % 10; if (board.getToken(r, c) instanceof Grass) { this.insertToken2Board(board, tkn, r, c); return true; } } } return false; }
/** * Implements Range special attack model. * * @param board * @param mtkn * @return */ public List<Vector2D> powerMovementSystemRange(Board board, MovablePlayerToken mtkn) { List<Vector2D> movements = new ArrayList<Vector2D>(); int x = mtkn.getCol(); int y = mtkn.getRow(); for (int i = -2; i <= 2; i++) { for (int j = -2; j <= 2; j++) { movements.add(new Vector2D(y + i, x + j)); } } movements = validInBoard(movements); movements = validInPlayer(board, movements); // Because this system implements ranged attack, // valid targets are only enemy tokens: movements = validForAttack(board, movements); return movements; }