Two games where a short strategy-stealing argument proves that the first player wins, while no explicit winning strategy is known in general.

GameRulesKnown
Chomp (Gale, 1974) chocolate bar, the bottom-left square is poisoned; a move picks a square and eats it with everything above and to the right; whoever eats the poison losesfirst player wins every board except ; explicit strategy for squares, , L-shapes; general open
Hex (Hein 1942, Nash 1948)rhombic board of hexagons; Red joins top and bottom, Blue joins left and right; players alternately colour a cellno draws (Hex theorem); first player wins (strategy stealing); explicit winning strategies known only for small boards (computer searches have solved boards up to ); deciding the winner of Hex on general graphs is PSPACE-complete (Reisch, 1981)

Strategy stealing. In a finite game without draws one player has a winning strategy (Zermelo). If an extra move can never hurt you, the second player cannot be the one: the first player makes an arbitrary move and then pretends to be the second player, following their winning strategy.

Chomp

// Chomp position: rows[i] = number of squares left in row i (non-increasing; rows[0][0] is the poison).
// Returns true iff the player to move wins (eating the poison loses). Memoized over Young diagrams.
map<vector<int>, bool> memoChomp;
bool chompWins(const vector<int>& rows) {
    if (rows.size() == 1 && rows[0] == 1) return false;          // only the poison is left: you must eat it
    auto it = memoChomp.find(rows); if (it != memoChomp.end()) return it->second;
    bool win = false;
    for (int i = 0; i < sz(rows) && !win; i++) for (int j = 0; j < rows[i] && !win; j++) {
        if (i == 0 && j == 0) continue;
        vector<int> nxt(rows.begin(), rows.begin() + i);         // rows below i untouched
        for (int r = i; r < sz(rows); r++) if (min(rows[r], j) > 0) nxt.push_back(min(rows[r], j));
        if (!chompWins(nxt)) win = true;
    }
    return memoChomp[rows] = win;
}
BoardFirst player’s winning move
, eat at , leaving an L with equal arms; then mirror the opponent
eat the top-right square; afterwards keep the shape “bottom row one longer than the top row”
L-shape with arms (poison at the corner)losing for the player to move iff
generalexists (strategy stealing), not known explicitly

Hex

// Full Hex board: 'R' or 'B' in every cell; cell (r, c) touches (r-1,c), (r-1,c+1), (r,c-1), (r,c+1), (r+1,c-1), (r+1,c).
// Returns true iff Red's cells connect the top row to the bottom row.
bool redConnects(const vector<string>& b) {
    int n = sz(b); vector<vector<char>> vis(n, vector<char>(n, 0)); vector<pair<int, int>> st;
    for (int c = 0; c < n; c++) if (b[0][c] == 'R') vis[0][c] = 1, st.push_back({0, c});
    int dr[] = {-1, -1, 0, 0, 1, 1}, dc[] = {0, 1, -1, 1, -1, 0};
    while (!st.empty()) {
        auto [r, c] = st.back(); st.pop_back();
        if (r == n - 1) return true;
        for (int k = 0; k < 6; k++) {
            int x = r + dr[k], y = c + dc[k];
            if (x >= 0 && x < n && y >= 0 && y < n && !vis[x][y] && b[x][y] == 'R') vis[x][y] = 1, st.push_back({x, y});
        }
    }
    return false;
}