summaryrefslogtreecommitdiff
path: root/src/dna.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dna.cpp')
-rw-r--r--src/dna.cpp57
1 files changed, 34 insertions, 23 deletions
diff --git a/src/dna.cpp b/src/dna.cpp
index 5d3fc8f..5d727d2 100644
--- a/src/dna.cpp
+++ b/src/dna.cpp
@@ -1,33 +1,46 @@
#include "dna.hpp"
-DNA::DNA()
+DNA::DNA(std::string s)
{
- maxHealth = CREATURE_MAX_HEALTH;
- speed = CREATURE_SPEED;
- reach = CREATURE_REACH;
- bestSense = CREATURE_BEST_SENSE;
- bite = CREATURE_BITE;
- amountToGrow = CREATURE_AMOUNT_TO_GROW;
- expectedPregnancyTime = CREATURE_EXP_PREG_TIME;
- expectedAge = CREATURE_EXP_AGE;
- sizeMax = CREATURE_SIZE_MAX;
- mutationPercent = CREATURE_MUTATION_PERCENT;
- mutationChance = CREATURE_MUTATION_CHANCE;
+ if(s == "creature"){
+ type = CREATURE_TYPE;
+ maxHealth = CREATURE_MAX_HEALTH;
+ bestSense = CREATURE_BEST_SENSE;
+ bite = CREATURE_BITE;
+ expectedPregnancyTime = CREATURE_EXP_PREG_TIME;
+ expectedAge = CREATURE_EXP_AGE;
+ growAmount = 0;
+ reach = CREATURE_REACH;
+ speed = CREATURE_SPEED;
+ mutationPercent = CREATURE_MUTATION_PERCENT;
+ mutationChance = CREATURE_MUTATION_CHANCE;
+ }
+ else if(s == "resource"){
+ type = RESOURCE_TYPE;
+ maxHealth = RESOURCE_MAX_HEALTH;
+ bestSense = 0;
+ bite = 0;
+ expectedPregnancyTime = 0;
+ expectedAge = 0;
+ growAmount = RESOURCE_GROW_AMOUNT;
+ reach = 0;
+ speed = 0;
+ mutationPercent = 0;
+ mutationChance = 0;
+ }
}
DNA DNA::combine(DNA D)
{
- DNA N;
-
+ DNA N("empty");
+ N.type = CREATURE_TYPE;
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;
@@ -37,18 +50,16 @@ DNA DNA::combine(DNA D)
pn = 1;
else
pn = -1;
- switch(rand()%11){
+ switch(rand()%9){
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;
+ case 5: N.expectedPregnancyTime = abs(N.expectedPregnancyTime *(N.mutationPercent+pn)); break;
+ case 6: N.expectedAge = abs(N.expectedAge *(N.mutationPercent+pn)); break;
+ case 7: N.mutationPercent = abs(N.expectedAge *(N.mutationPercent+pn)); break;
+ case 8: N.mutationChance = abs(N.mutationChance *(N.mutationPercent+pn)); break;
}
}
return N;