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)
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))
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.
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.
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).
A good game is one that constantly challenges you, but is never too hard ( IMHO ). An element of surprise is always nice, I'm sure your game could provide that. On the other hand, if there are a bunch of settings that don't act predictably, then maybe you want to tone the game down.
Maybe you could have different settings for people who might want to different things?