[proofplan]
We verify two things: that a chain map sends cycles to cycles (so the assignment $[x] \mapsto [f_n(x)]$ produces a well-defined element of $H_n(D_\bullet)$), and that the assignment is independent of the representative (so replacing $x$ by a homologous cycle $x + d_{n+1}^C(z)$ does not change the homology class in $D_n$). Both follow directly from the chain map condition $f_{n-1} \circ d_n^C = d_n^D \circ f_n$ and the linearity of $f_n$. We then verify additivity to conclude that $f_*$ is a group homomorphism.
[/proofplan]
[step:Show that $f_n$ sends cycles to cycles]
Let $x \in Z_n(C_\bullet) := \ker(d_n^C: C_n \to C_{n-1})$, so $d_n^C(x) = 0$. We compute
\begin{align*}
d_n^D(f_n(x)) = f_{n-1}(d_n^C(x)) = f_{n-1}(0) = 0,
\end{align*}
where the first equality uses the chain map condition $d_n^D \circ f_n = f_{n-1} \circ d_n^C$. Therefore $f_n(x) \in Z_n(D_\bullet)$, and the class $[f_n(x)] \in H_n(D_\bullet)$ is defined.
[guided]
Before we can write down a map $f_*: H_n(C_\bullet) \to H_n(D_\bullet)$, we need to know that $f_n$ sends cycles to cycles. Otherwise, $f_n(x)$ might not represent a homology class in $D_\bullet$.
A cycle in $C_n$ is an element $x$ with $d_n^C(x) = 0$. The chain map condition $d_n^D \circ f_n = f_{n-1} \circ d_n^C$ lets us compute:
\begin{align*}
d_n^D(f_n(x)) = f_{n-1}(d_n^C(x)) = f_{n-1}(0) = 0.
\end{align*}
So $f_n(x)$ is indeed a cycle in $D_n$, and $[f_n(x)]$ is a well-defined element of $H_n(D_\bullet) = Z_n(D_\bullet) / B_n(D_\bullet)$.
[/guided]
[/step]
[step:Show that the assignment $[x] \mapsto [f_n(x)]$ is independent of the representative]
Suppose $[x] = [y]$ in $H_n(C_\bullet)$, so $x - y = d_{n+1}^C(z)$ for some $z \in C_{n+1}$. Then
\begin{align*}
f_n(x) - f_n(y) = f_n(x - y) = f_n(d_{n+1}^C(z)) = d_{n+1}^D(f_{n+1}(z)),
\end{align*}
where the second equality uses the linearity of $f_n$ and the third uses the chain map condition $f_n \circ d_{n+1}^C = d_{n+1}^D \circ f_{n+1}$. Since $f_n(x) - f_n(y)$ lies in $B_n(D_\bullet) := \operatorname{im}(d_{n+1}^D)$, we conclude $[f_n(x)] = [f_n(y)]$ in $H_n(D_\bullet)$.
[guided]
For well-definedness, we must check that different representatives of the same homology class in $C_\bullet$ map to the same homology class in $D_\bullet$. Two representatives $x$ and $y$ of the same class differ by a boundary: $x - y = d_{n+1}^C(z)$ for some $z \in C_{n+1}$.
Applying $f_n$ and using linearity:
\begin{align*}
f_n(x) - f_n(y) = f_n(x - y) = f_n(d_{n+1}^C(z)).
\end{align*}
Now we use the chain map condition, but at one degree higher: $f_n \circ d_{n+1}^C = d_{n+1}^D \circ f_{n+1}$. This gives
\begin{align*}
f_n(d_{n+1}^C(z)) = d_{n+1}^D(f_{n+1}(z)).
\end{align*}
The right-hand side is a boundary in $D_n$, so $f_n(x)$ and $f_n(y)$ differ by a boundary, hence $[f_n(x)] = [f_n(y)]$. The key insight is that the chain map condition at every degree is needed: the cycle-preservation used $d_n^D \circ f_n = f_{n-1} \circ d_n^C$, and well-definedness uses $f_n \circ d_{n+1}^C = d_{n+1}^D \circ f_{n+1}$.
[/guided]
[/step]
[step:Verify that $f_*$ is a group homomorphism]
Define $f_*: H_n(C_\bullet) \to H_n(D_\bullet)$ by $f_*([x]) = [f_n(x)]$. For any $[x], [y] \in H_n(C_\bullet)$:
\begin{align*}
f_*([x] + [y]) = f_*([x + y]) = [f_n(x + y)] = [f_n(x) + f_n(y)] = [f_n(x)] + [f_n(y)] = f_*([x]) + f_*([y]),
\end{align*}
where the third equality uses the linearity of $f_n: C_n \to D_n$ (it is a homomorphism of abelian groups by hypothesis). Therefore $f_*$ is a homomorphism.
[/step]