Sure, I'll write a test case generator for the given problem.

Here is the test case generator:

```python
import random

def tcgen():
    # Define the size of the board
    N = random.randint(1, 8)
    
    # Define the initial points for the first player
    F = random.randint(-10**5, 10**5)
    
    # Generate the N x N board with random values
    X = [[random.randint(-10**5, 10**5) for _ in range(N)] for _ in range(N)]
    
    return N, F, X

# Function to format the test case into the required input format
def format_test_case(N, F, X):
    result = f"{N} {F}\n"
    for row in X:
        result += " ".join(map(str, row)) + "\n"
    return result

# Generate a test case
N, F, X = tcgen()

# Print the formatted test case
print(format_test_case(N, F, X))
```

The `tcgen` function generates random values for \( N \), \( F \), and the \( N \times N \) grid \( X \) within the prescribed constraints. The `format_test_case` function then formats these values into the required input format for the problem, which can be used directly in the input.

Let's see an example output from this test case generator:

```
2 57
-45678 23456
-78910 12345
```

You can use this generator to create multiple test cases for different scenarios, ensuring that your solution is robust and handles various edge cases.