[proofplan]
The proof is a direct computation using the chain homotopy relation $g_n - f_n = d^D_{n+1} \circ F_n + F_{n-1} \circ d^C_n$. For any cycle $c \in C_n$ with $d^C_n(c) = 0$, the second term vanishes, and the first shows that $g_n(c) - f_n(c)$ is a boundary in $D_n$, so $[g_n(c)] = [f_n(c)]$ in $H_n(D_\bullet)$.
[/proofplan]
[step:Apply the chain homotopy relation to a cycle]
Let $[c] \in H_n(C_\bullet)$ be represented by a cycle $c \in C_n$, so $d^C_n(c) = 0$. By hypothesis, there exist homomorphisms $F_n: C_n \to D_{n+1}$ for each $n$ satisfying the chain homotopy relation
\begin{align*}
g_n - f_n = d^D_{n+1} \circ F_n + F_{n-1} \circ d^C_n.
\end{align*}
Evaluating at the cycle $c$:
\begin{align*}
g_n(c) - f_n(c) = d^D_{n+1}(F_n(c)) + F_{n-1}(d^C_n(c)) = d^D_{n+1}(F_n(c)) + F_{n-1}(0) = d^D_{n+1}(F_n(c)).
\end{align*}
[/step]
[step:Conclude that $f_*$ and $g_*$ agree on homology]
The computation shows that $g_n(c) - f_n(c) = d^D_{n+1}(F_n(c))$, which is a boundary in $D_n$ (namely, the boundary of $F_n(c) \in D_{n+1}$). Therefore $g_n(c)$ and $f_n(c)$ represent the same class in $H_n(D_\bullet) = \ker(d^D_n) / \operatorname{im}(d^D_{n+1})$:
\begin{align*}
[g_n(c)] = [f_n(c)] \in H_n(D_\bullet).
\end{align*}
Since $c$ was an arbitrary cycle representing $[c]$, we have $g_*([c]) = f_*([c])$ for all $[c] \in H_n(C_\bullet)$, and since $n$ was arbitrary, $f_* = g_*: H_n(C_\bullet) \to H_n(D_\bullet)$ for all $n$.
[/step]