summaryrefslogtreecommitdiff
path: root/src/dna.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dna.cpp')
-rw-r--r--src/dna.cpp44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/dna.cpp b/src/dna.cpp
index c3ffd9c..5d3fc8f 100644
--- a/src/dna.cpp
+++ b/src/dna.cpp
@@ -11,21 +11,45 @@ DNA::DNA()
expectedPregnancyTime = CREATURE_EXP_PREG_TIME;
expectedAge = CREATURE_EXP_AGE;
sizeMax = CREATURE_SIZE_MAX;
+ mutationPercent = CREATURE_MUTATION_PERCENT;
+ mutationChance = CREATURE_MUTATION_CHANCE;
}
DNA DNA::combine(DNA D)
{
DNA N;
+
+ N.maxHealth = (maxHealth + D.maxHealth)/2;
+ N.speed = (speed + D.speed)/2;
+ N.reach = (reach + D.reach)/2;
+ N.bestSense = (bestSense + D.bestSense)/2;
+ N.bite = (bite + D.bite)/2;
+ N.amountToGrow = (amountToGrow + D.amountToGrow)/2;
+ N.expectedPregnancyTime = (expectedPregnancyTime + D.expectedPregnancyTime)/2;
+ N.expectedAge = (expectedAge + D.expectedAge)/2;
+ N.sizeMax = (sizeMax + D.sizeMax)/2;
+ N.mutationPercent = (mutationPercent + D.mutationPercent)/2;
+ N.mutationChance = (mutationChance + D.mutationChance)/2;
- N.maxHealth = (this->maxHealth + D.maxHealth)/2;
- N.speed = (this->speed + D.speed)/2;
- N.reach = (this->reach + D.reach)/2;
- N.bestSense = (this->bestSense + D.bestSense)/2;
- N.bite = (this->bite + D.bite)/2;
- N.amountToGrow = (this->amountToGrow + D.amountToGrow)/2;
- N.expectedPregnancyTime = (this->expectedPregnancyTime + D.expectedPregnancyTime)/2;
- N.expectedAge = (this->expectedAge + D.expectedAge)/2;
- N.sizeMax = (this->sizeMax + D.sizeMax)/2;
-
+ if(roll(mutationChance)){
+ float pn;
+ if(rand()%2)
+ pn = 1;
+ else
+ pn = -1;
+ switch(rand()%11){
+ case 0: N.maxHealth = abs(N.maxHealth *(N.mutationPercent+pn)); break;
+ case 1: N.speed = abs(N.speed *(N.mutationPercent+pn)); break;
+ case 2: N.reach = abs(N.reach *(N.mutationPercent+pn)); break;
+ case 3: N.bestSense = abs(N.bestSense *(N.mutationPercent+pn)); break;
+ case 4: N.bite = abs(N.bite *(N.mutationPercent+pn)); break;
+ case 5: N.amountToGrow = abs(N.amountToGrow *(N.mutationPercent+pn)); break;
+ case 6: N.expectedPregnancyTime = abs(N.expectedPregnancyTime *(N.mutationPercent+pn)); break;
+ case 7: N.expectedAge = abs(N.expectedAge *(N.mutationPercent+pn)); break;
+ case 8: N.sizeMax = abs(N.sizeMax *(N.mutationPercent+pn)); break;
+ case 9: N.mutationPercent = abs(N.expectedAge *(N.mutationPercent+pn)); break;
+ case 10:N.mutationChance = abs(N.mutationChance *(N.mutationPercent+pn)); break;
+ }
+ }
return N;
}