From 7394b069537ed7a490a343381d62862eb22abdcf Mon Sep 17 00:00:00 2001 From: majortom6 Date: Sun, 26 Feb 2017 11:14:31 -0600 Subject: -REMOVED ENTITY, RESOURCE, AND CREATURE ! -replaced them all with one class, organism (always subject to change) -the dna type now is what differs creatures and resources -removed dead constants -may be a rogue segfault -also weird artifacts start showing if running long --- src/dna.cpp | 57 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 23 deletions(-) (limited to 'src/dna.cpp') 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; -- cgit v1.2.3