Sure, here is a test case generator for the given problem statement "Problem C: Accelerated Railgun":

```python
import random

def generate_real(min_val, max_val, precision=6):
    """Generate a random real number between min_val and max_val with specified precision."""
    return round(random.uniform(min_val, max_val), precision)

def tcgen():
    test_cases = []
    while True:
        # Randomly decide whether to terminate the input
        if random.random() < 0.1:  # 10% chance to terminate
            test_cases.append("0")
            break
        
        D = generate_real(0.0001, 50.0)
        
        px = generate_real(0.0001, 0.9999)
        py = generate_real(0.0001, 0.9999)
        
        vx = generate_real(0.0001, 0.9999)
        vy = generate_real(0.0001, 0.9999)
        
        test_cases.append(f"{D}")
        test_cases.append(f"{px} {py} {vx} {vy}")
    
    return "\n".join(test_cases)

# Example usage:
print(tcgen())
```

### Explanation:
1. **`generate_real` Function**: This function generates a random real number within a specified range and precision.
2. **`tcgen` Function**: 
   - It generates a series of test cases until a termination condition is met (10% chance to stop).
   - Each test case consists of a real number `D` and four real numbers for the coordinates and velocity vectors.
   - The test cases are accumulated in a list and joined into a single string with newlines separating each case.

### Note:
- The generator creates a random number `D` between 0.0001 and 50.
- It generates the coordinates `(px, py)` and velocity vectors `(vx, vy)` between 0.0001 and 0.9999 to meet the problem constraints.
- The loop randomly decides when to add the termination condition `0` to the test cases.

This script will generate realistic and varied test cases for the problem, ensuring good coverage for different scenarios.