The Fisher-Wright program displays lines of descent in a finite population. The simulation shows how genes are sampled in each generation to form the following generation.

You can choose between a haploid and diploid model and two alleles versus multiple alleles:

The first generation is set up at random with equal numbers of the two alleles:

Then the new generation is formed by random sampling from the genes of the first generation. Here comes another one:

A few generations of sampling produces the following:

Now the lines of descent are shown:

It's a mess. But if the genes are sorted by ancestor in each generation:

This is what the diploid model looks like:

And multiple alleles leads to the following: