### Digital Genetics (redux)

A couple months I posted about this with half an idea in mind and eventually dropped it entirely. I've recently started my project back (with much more success) and I have a more comprehensive idea. It's obviously a simplistic mock-up but my question is this: is it a reasonable approximation? Is there anything in particular I can add to the design?

ALLELE DEFINITION AND EXPRESSION (CAP REPRESENTS TRUE, LOWER CASE FALSE)

'T' alleles: attention
'Q' alleles: speed (physical)
'A' alleles: reaction
'S' alleles: intelligence

T: DOMINANT ALLELE
t: RECESSIVE ALLELE

Q: DOMINANT ALLELE
q: RECESSIVE ALLELE

A: DOMINANT ALLELE
a: RECESSIVE ALLELE

S: DOMINANT ALLELE
s: RECESSIVE ALLELE

TRAITS

ADD: higher tendency to randomly change direction
ADHD: same as above but with faster speed, speed cannot equal 0 (can't sit still)
QUICK: faster speed
SLOW: slower speed
SMRT: higher intelligence (governs upper and lower bound, not absolute value)
DUMB: lower intelligence (same, both can break usual parent->child bounds)
SNAP: ability to react like others nearby
ZOMBY: becomes a zombie (really fast, characterized by color (red) and erratic movement, transferable through contact, manifests upon carrier's maturity (1200 cycles))

PHENOTYPE EXPRESSIONS

TT: Nothing
Tt: Nothing
tt: Nothing

QQ: Causes Quick
Qq: Causes Quick
qq: Nothing

AA: Nothing
Aa: Nothing
aa: Nothing

SS: Nothing
Ss: Nothing
ss: Causes SMRT

ttQQ: Removes QUICK Binary logic: QUICK=(Q1|Q2)&~(~T1&~T2)
TTqq: Nothing
ttqq: SLOW Binary logic: SLOW=(~T1&~T2)&(~Q1&~Q2)

QQAA: SNAP Binary logic: SNAP=((Q1|Q2)&(A1|A2))&~(T1|T2)
QQAATT: removes SNAP Binary logic: --^

ttqqAASS: ZOMBY Binary logic: ZOMBY=(~T1&~T2)&(~Q1&~Q2)&(S1|S2)&(A1|A2)
What is this for?
Population simulation. Think semi-interactive SimCity but with Evolution instead of Cities. SimEvo if you will (EA please don't kill me). I'm trying to create a fast (low-maintenance) way to simulate gene transfers throughout a population of little guys. The trick I'm wrestling with is visibility, trying to make the changes that come from the mixing and matching easily visible to the user.

Currently I'm using those 8 phenotypes, but is this a reasonable way to approximate evolution? I will add rare miscopying of Parents to Child and occasional mutation as well.
Would the miscopy be a random value in one or two parts of the virtual DNA, or will the amount of miscopy be random too?
Randomize the randomizer? Not sure, for now (testing purposes) I'm going for just 1 part. But maybe I'll switch things up. What would be neat would be to simulate corruption. Meaning that if a certain gene(s) gets mutated (such as possibly the gene in charge of copying) a large number of genes get messed with (like everything past a certain point gets bitshitfted forward 1 in line).
I try to follow an MVC pattern, which stand for Model View Controller. Basically, the screen is the view. When you click a button, the controller interprets the input and tells the models what to do. You want to keep these parts as separate as possible.

That being said, make the Model ( your DNA ) as complicated, or as simple, as you want. The view is just a representation of the model. For example, you should be able to switch from a console program to a graphical one without having to change any of the code in the DNA ( standard c++ assumed ).

When I think DNA, I think small and many. If I am looking at a bunch of strands of DNA at once, do I need to be able to see everything about each one? Maybe from far away the colors of the DNA represent the amount of replications, and only when I click on one I see a more detailed expression of the gene.
My intention is not for the user to physically mess with the DNA itself (or at least not yet). My intention is for the VDNA (virtual DNA, I'm so original) to govern the expressed traits of the people (speed, intelligence, zombification, and so on). The hierarchy looks like this:
DNA->Interpreter->expressed traits. The user sees in the expressed traits (in the way the people move and act), and if the user chooses to selected a particular person they can see the genotype (currently looks something like this: TtqqAaSS). Each child DNA is the product of the parent DNAs mixed randomly.
What I'm saying is that the complexity of the class should have nothing to do with the way it is viewed.
Oh, I absolutely agree, the interface must remain clean and simple. I'm not going to start throwing (~T1&~T2)&(~Q1&~Q2)&(S1|S2)&(A1|A2) at people as an explanation for the object they clicked on's DNA. Like I said, currently I'm going with text but I'll switch to something graphical (but not a double helix, I don't know what but definitely not that).