diff --git a/src/c/character.c b/src/c/character.c index 779e795..f5a5bd4 100644 --- a/src/c/character.c +++ b/src/c/character.c @@ -66,7 +66,6 @@ int calculateStatIncrease (Character *character, int amount) { return character->level*amount; } - void increaseStat (Character *character, int stat, int amount) { switch (stat) { @@ -80,7 +79,18 @@ void increaseStat (Character *character, int stat, int amount) { character->healthPoints += amount;break; case 5: character->manaPoints += amount;break; + case 6: + character->level += amount;break; + case 7: + character->exp += amount;break; + case 8: + character->maxExp += amount;break; default: break; } } +void levelUp (Character *character) { + if (getCharacterExp(character) > getCharacterMaxExp(character)) { + increaseStat(character,LEVEL,1); + } +} \ No newline at end of file diff --git a/src/c/character.h b/src/c/character.h index c7ee567..7ed09b4 100644 --- a/src/c/character.h +++ b/src/c/character.h @@ -7,7 +7,7 @@ typedef struct { } Character; enum { - STRENGTH = 1, DEXTERITY = 2, INTELLIGENCE = 3, HEALTHPOINTS = 4, MANAPOINTS = 5, LEVEL = 6 + STRENGTH = 1, DEXTERITY = 2, INTELLIGENCE = 3, HEALTHPOINTS = 4, MANAPOINTS = 5, LEVEL = 6, EXP = 7, MAXEXP = 8 }; void setCharacterHealthPoints (Character *character, int newHealthPoints); @@ -41,4 +41,6 @@ int getCharacterMaxExp (Character *character); void increaseStat (Character *character, int stat, int amount); int calculateStatIncrease (Character *character, int amount); + +void levelUp (Character *character); #endif \ No newline at end of file diff --git a/test/c/test_character.c b/test/c/test_character.c index ad72b33..ba52049 100644 --- a/test/c/test_character.c +++ b/test/c/test_character.c @@ -16,6 +16,10 @@ void setUp(void) testCharacter2.intelligence = 7; testCharacter.level = 0; testCharacter2.level = 5; + testCharacter.exp = 50; + testCharacter2.exp = 110; + testCharacter.maxExp = 100; + testCharacter2.maxExp = 100; } void tearDown(void) @@ -78,10 +82,30 @@ void test_increaseStat(void) { TEST_ASSERT_EQUAL_INT(20,testCharacter2.strength); increaseStat(&testCharacter2,INTELLIGENCE,15); TEST_ASSERT_EQUAL_INT(22,testCharacter2.intelligence); + increaseStat(&testCharacter2,LEVEL,15); + TEST_ASSERT_EQUAL_INT(20,testCharacter2.level); } void test_calculateStatIncrease(void) { TEST_ASSERT_EQUAL_INT(5,testCharacter2.level); TEST_ASSERT_EQUAL_INT(25,calculateStatIncrease(&testCharacter2,5)); } + +void test_levelUp_enoughExp (void) { + TEST_ASSERT_EQUAL_INT(110,testCharacter2.exp); + TEST_ASSERT_EQUAL_INT(100,testCharacter2.maxExp); + TEST_ASSERT_EQUAL_INT(5,testCharacter2.level); + levelUp(&testCharacter2); + TEST_ASSERT_EQUAL_INT(6,testCharacter2.level); +} + +void test_levelUp_notEnoughExp (void) { + TEST_ASSERT_EQUAL_INT(50,testCharacter.exp); + TEST_ASSERT_EQUAL_INT(100,testCharacter.maxExp); + TEST_ASSERT_EQUAL_INT(0,testCharacter.level); + levelUp(&testCharacter); + TEST_ASSERT_EQUAL_INT(0,testCharacter.level); +} + + #endif // TEST \ No newline at end of file