public Location getAdjacentLocation(int direction) {
		// reduce mod 360 and round to closest multiple of 45
		int adjustedDirection = (direction + HALF_RIGHT / 2) % FULL_CIRCLE;
		if (adjustedDirection < 0)
			adjustedDirection += FULL_CIRCLE;

		adjustedDirection = (adjustedDirection / HALF_RIGHT) * HALF_RIGHT;
		int dc = 0;
		int dr = 0;
		if (adjustedDirection == EAST)
			dc = 1;
		else if (adjustedDirection == SOUTHEAST) {
			dc = 1;
			dr = 1;
		} else if (adjustedDirection == SOUTH)
			dr = 1;
		else if (adjustedDirection == SOUTHWEST) {
			dc = -1;
			dr = 1;
		} else if (adjustedDirection == WEST)
			dc = -1;
		else if (adjustedDirection == NORTHWEST) {
			dc = -1;
			dr = -1;
		} else if (adjustedDirection == NORTH)
			dr = -1;
		else if (adjustedDirection == NORTHEAST) {
			dc = 1;
			dr = -1;
		}
		return new Location(getRow() + dr, getCol() + dc);
	}