private ArrayList<Coordinate> take(Coordinate xy, int xdir, int ydir) {
		boolean test = false;
        if (test || m_test) {
            System.out.println("Othello :: take() BEGIN");
        }
	
		if (!checkBound(xy, xdir, ydir)) { return new ArrayList<Coordinate>(); }
		
		Grid grid = getGrid();
		Coordinate current = new Coordinate(xy);
		
		ArrayList <Coordinate> capture = new ArrayList<Coordinate>();
		
		current.move(xdir, ydir);
		
		// The move is assumed to be valid at this point, so move over the
		// grid capturing any pieces belonging to the opponent
		while (current.within(0, 0, GAME_WIDTH, GAME_HEIGHT)) {
			Coordinate check = grid.getCoordinate(current);
			
			if (check.isEmpty()) { break; }
			
			if (check.notEquals(current.getValue())) {
				// If the piece belongs to the opponent, then capture it
				check.setValue(current.getValue());
				capture.add(check);
			}
			else {
				// If the piece belonds to the current player, then finish.
				break;
			}
			
    		current.move(xdir, ydir);
		}
		if (test || m_test) {
            System.out.println("Othello :: take() END");
        }
		return capture;
	}