protected ArrayList<Coordinate> takeMove(Coordinate xy) {
		boolean test = false;
        if (test || m_test) {
            System.out.println("Othello :: takeMove() BEGIN");
        }
	    /*
		if (!isValidMove(xy)) {
			throw new IllegalStateException(
				"Given move is invalid but should be valid");
		}
		*/
		// In each direction, capture the opposing player's pieces if it is
		// bound by two of this player's pieces.
		
		// A list of changed/captured pieces to return
		ArrayList<Coordinate> capture = new ArrayList<Coordinate>();
				
		// "Capture" the current piece
		capture.add(xy);
		
		// Capture pieces in each direction
		capture.addAll(take(xy, -1,  0)); // left
		capture.addAll(take(xy, +1,  0)); // right
		capture.addAll(take(xy,  0, -1)); // up
		capture.addAll(take(xy,  0, +1)); // down
		capture.addAll(take(xy, -1, -1)); // top-left
		capture.addAll(take(xy, +1, -1)); // top-right
		capture.addAll(take(xy, -1, +1)); // bottom-left
		capture.addAll(take(xy, +1, +1)); // bottom-right
		if (test || m_test) {
            System.out.println("Othello :: takeMove() END");
        }
		return capture;
	}