Player class. Written for OOP Review. Derived from life_entity.
player.cpp@0:7c89d9ec2d76, 2011-03-31 (annotated)
- Committer:
- Nakor
- Date:
- Thu Mar 31 19:56:01 2011 +0000
- Revision:
- 0:7c89d9ec2d76
Not yet documented.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nakor | 0:7c89d9ec2d76 | 1 | #include "player.h" |
Nakor | 0:7c89d9ec2d76 | 2 | |
Nakor | 0:7c89d9ec2d76 | 3 | #define PLAYER_XP_PER_LEVEL 5 |
Nakor | 0:7c89d9ec2d76 | 4 | |
Nakor | 0:7c89d9ec2d76 | 5 | |
Nakor | 0:7c89d9ec2d76 | 6 | // Comparison template function. |
Nakor | 0:7c89d9ec2d76 | 7 | // I didn't end up using it in this code |
Nakor | 0:7c89d9ec2d76 | 8 | // but if you want to give differing amounts of |
Nakor | 0:7c89d9ec2d76 | 9 | // xp depending on player and enemy levels this |
Nakor | 0:7c89d9ec2d76 | 10 | // could prove useful (although you will likely |
Nakor | 0:7c89d9ec2d76 | 11 | // want to customize it). |
Nakor | 0:7c89d9ec2d76 | 12 | template <class T> |
Nakor | 0:7c89d9ec2d76 | 13 | T getMax(T a, T b) |
Nakor | 0:7c89d9ec2d76 | 14 | { |
Nakor | 0:7c89d9ec2d76 | 15 | T result; |
Nakor | 0:7c89d9ec2d76 | 16 | result = (a > b) ? a : b; |
Nakor | 0:7c89d9ec2d76 | 17 | return (result); |
Nakor | 0:7c89d9ec2d76 | 18 | } |
Nakor | 0:7c89d9ec2d76 | 19 | |
Nakor | 0:7c89d9ec2d76 | 20 | // Constructor |
Nakor | 0:7c89d9ec2d76 | 21 | player::player() |
Nakor | 0:7c89d9ec2d76 | 22 | { |
Nakor | 0:7c89d9ec2d76 | 23 | _level = 0x01; |
Nakor | 0:7c89d9ec2d76 | 24 | |
Nakor | 0:7c89d9ec2d76 | 25 | _baseHealth = 300; |
Nakor | 0:7c89d9ec2d76 | 26 | |
Nakor | 0:7c89d9ec2d76 | 27 | _health = _level * _baseHealth; |
Nakor | 0:7c89d9ec2d76 | 28 | |
Nakor | 0:7c89d9ec2d76 | 29 | _experience = 0; |
Nakor | 0:7c89d9ec2d76 | 30 | |
Nakor | 0:7c89d9ec2d76 | 31 | #if DEBUG_PLAYER |
Nakor | 0:7c89d9ec2d76 | 32 | printf("Creating player character.\n"); |
Nakor | 0:7c89d9ec2d76 | 33 | #endif |
Nakor | 0:7c89d9ec2d76 | 34 | |
Nakor | 0:7c89d9ec2d76 | 35 | } |
Nakor | 0:7c89d9ec2d76 | 36 | |
Nakor | 0:7c89d9ec2d76 | 37 | |
Nakor | 0:7c89d9ec2d76 | 38 | // Return the player's experience point count |
Nakor | 0:7c89d9ec2d76 | 39 | unsigned long int player::getExperience() |
Nakor | 0:7c89d9ec2d76 | 40 | { |
Nakor | 0:7c89d9ec2d76 | 41 | return _experience; |
Nakor | 0:7c89d9ec2d76 | 42 | } |
Nakor | 0:7c89d9ec2d76 | 43 | |
Nakor | 0:7c89d9ec2d76 | 44 | // Check experience with required experience |
Nakor | 0:7c89d9ec2d76 | 45 | // and level up if needed/possible |
Nakor | 0:7c89d9ec2d76 | 46 | void player::isLevelUp() |
Nakor | 0:7c89d9ec2d76 | 47 | { |
Nakor | 0:7c89d9ec2d76 | 48 | unsigned long int xpToLevel = ( (PLAYER_XP_PER_LEVEL * _level) * (PLAYER_XP_PER_LEVEL * _level) + 360); |
Nakor | 0:7c89d9ec2d76 | 49 | |
Nakor | 0:7c89d9ec2d76 | 50 | if(_experience >= xpToLevel) |
Nakor | 0:7c89d9ec2d76 | 51 | { |
Nakor | 0:7c89d9ec2d76 | 52 | if(_level <= 0xFF) |
Nakor | 0:7c89d9ec2d76 | 53 | { |
Nakor | 0:7c89d9ec2d76 | 54 | _level++; |
Nakor | 0:7c89d9ec2d76 | 55 | printf("LEVEL UP!\nYou are now level %i\n", _level); |
Nakor | 0:7c89d9ec2d76 | 56 | xpToLevel = ( (PLAYER_XP_PER_LEVEL * _level) * (PLAYER_XP_PER_LEVEL * _level) + 360); |
Nakor | 0:7c89d9ec2d76 | 57 | printf("Current XP is (%ul / %ul)\n", _experience, xpToLevel); |
Nakor | 0:7c89d9ec2d76 | 58 | _health = (_level * _baseHealth) - _health; |
Nakor | 0:7c89d9ec2d76 | 59 | } |
Nakor | 0:7c89d9ec2d76 | 60 | } |
Nakor | 0:7c89d9ec2d76 | 61 | else if(_experience >= xpToLevel) |
Nakor | 0:7c89d9ec2d76 | 62 | { |
Nakor | 0:7c89d9ec2d76 | 63 | printf("Level cap reached!\n"); |
Nakor | 0:7c89d9ec2d76 | 64 | } |
Nakor | 0:7c89d9ec2d76 | 65 | else |
Nakor | 0:7c89d9ec2d76 | 66 | { |
Nakor | 0:7c89d9ec2d76 | 67 | printf("Current XP is (%ul / %ul)\n", _experience, xpToLevel); |
Nakor | 0:7c89d9ec2d76 | 68 | } |
Nakor | 0:7c89d9ec2d76 | 69 | |
Nakor | 0:7c89d9ec2d76 | 70 | wait(1); |
Nakor | 0:7c89d9ec2d76 | 71 | } |
Nakor | 0:7c89d9ec2d76 | 72 | |
Nakor | 0:7c89d9ec2d76 | 73 | // Add experience points |
Nakor | 0:7c89d9ec2d76 | 74 | // You would likely want to update this |
Nakor | 0:7c89d9ec2d76 | 75 | // to give more or less xp depending on |
Nakor | 0:7c89d9ec2d76 | 76 | // player and enemy levels. |
Nakor | 0:7c89d9ec2d76 | 77 | void player::addExperience() |
Nakor | 0:7c89d9ec2d76 | 78 | { |
Nakor | 0:7c89d9ec2d76 | 79 | int xp; |
Nakor | 0:7c89d9ec2d76 | 80 | |
Nakor | 0:7c89d9ec2d76 | 81 | if(_level < 0x09) |
Nakor | 0:7c89d9ec2d76 | 82 | { |
Nakor | 0:7c89d9ec2d76 | 83 | xp = (_level * PLAYER_XP_PER_LEVEL) + 45; |
Nakor | 0:7c89d9ec2d76 | 84 | } |
Nakor | 0:7c89d9ec2d76 | 85 | else |
Nakor | 0:7c89d9ec2d76 | 86 | { |
Nakor | 0:7c89d9ec2d76 | 87 | xp = (_level * PLAYER_XP_PER_LEVEL) + 90; |
Nakor | 0:7c89d9ec2d76 | 88 | } |
Nakor | 0:7c89d9ec2d76 | 89 | |
Nakor | 0:7c89d9ec2d76 | 90 | _experience = _experience + xp; |
Nakor | 0:7c89d9ec2d76 | 91 | |
Nakor | 0:7c89d9ec2d76 | 92 | printf("A winner is you! You have gained %i XP\n", xp); |
Nakor | 0:7c89d9ec2d76 | 93 | |
Nakor | 0:7c89d9ec2d76 | 94 | srand ( time(NULL) ); |
Nakor | 0:7c89d9ec2d76 | 95 | int healthGain = (_baseHealth - ( rand() % _baseHealth ) ) / 3; |
Nakor | 0:7c89d9ec2d76 | 96 | |
Nakor | 0:7c89d9ec2d76 | 97 | if(_health + healthGain > (_level * _baseHealth) ) |
Nakor | 0:7c89d9ec2d76 | 98 | { |
Nakor | 0:7c89d9ec2d76 | 99 | _health = (_level * _baseHealth); |
Nakor | 0:7c89d9ec2d76 | 100 | printf("You have a chance to rest between fights. Your health is restored to full.\n"); |
Nakor | 0:7c89d9ec2d76 | 101 | } |
Nakor | 0:7c89d9ec2d76 | 102 | else |
Nakor | 0:7c89d9ec2d76 | 103 | { |
Nakor | 0:7c89d9ec2d76 | 104 | _health += healthGain; |
Nakor | 0:7c89d9ec2d76 | 105 | printf("You have a chance to rest between fights. You regain %i health.\n", healthGain); |
Nakor | 0:7c89d9ec2d76 | 106 | } |
Nakor | 0:7c89d9ec2d76 | 107 | } |
Nakor | 0:7c89d9ec2d76 | 108 | |
Nakor | 0:7c89d9ec2d76 | 109 | // Use this if you want a super long output of |
Nakor | 0:7c89d9ec2d76 | 110 | // the entire experience ramp. |
Nakor | 0:7c89d9ec2d76 | 111 | void player::displayExpRamp() |
Nakor | 0:7c89d9ec2d76 | 112 | { |
Nakor | 0:7c89d9ec2d76 | 113 | printf("XP TO LEVEL:\n"); |
Nakor | 0:7c89d9ec2d76 | 114 | |
Nakor | 0:7c89d9ec2d76 | 115 | _level = 0x01; |
Nakor | 0:7c89d9ec2d76 | 116 | |
Nakor | 0:7c89d9ec2d76 | 117 | unsigned long int xpToLevel = 0; |
Nakor | 0:7c89d9ec2d76 | 118 | unsigned int clump = 0; |
Nakor | 0:7c89d9ec2d76 | 119 | |
Nakor | 0:7c89d9ec2d76 | 120 | for(int i = 1; i < 256; i++) |
Nakor | 0:7c89d9ec2d76 | 121 | { |
Nakor | 0:7c89d9ec2d76 | 122 | _level = i; |
Nakor | 0:7c89d9ec2d76 | 123 | clump = PLAYER_XP_PER_LEVEL * _level; |
Nakor | 0:7c89d9ec2d76 | 124 | xpToLevel = ( (clump * clump * clump) + 360); |
Nakor | 0:7c89d9ec2d76 | 125 | printf("Level %i to %i: %ul\n", _level, _level+1, xpToLevel); |
Nakor | 0:7c89d9ec2d76 | 126 | } |
Nakor | 0:7c89d9ec2d76 | 127 | |
Nakor | 0:7c89d9ec2d76 | 128 | _level = 0x01; |
Nakor | 0:7c89d9ec2d76 | 129 | } |
Nakor | 0:7c89d9ec2d76 | 130 | |
Nakor | 0:7c89d9ec2d76 | 131 | // Applies damage to player after |
Nakor | 0:7c89d9ec2d76 | 132 | // doing a dodge roll. |
Nakor | 0:7c89d9ec2d76 | 133 | void player::takeDamage(int roll) |
Nakor | 0:7c89d9ec2d76 | 134 | { |
Nakor | 0:7c89d9ec2d76 | 135 | srand ( time(NULL) ); |
Nakor | 0:7c89d9ec2d76 | 136 | int dodgeRoll = ( rand() % 1000 ); |
Nakor | 0:7c89d9ec2d76 | 137 | |
Nakor | 0:7c89d9ec2d76 | 138 | int dodgeChance = 15 * _level; |
Nakor | 0:7c89d9ec2d76 | 139 | if(dodgeChance > 500) dodgeChance = 500; |
Nakor | 0:7c89d9ec2d76 | 140 | |
Nakor | 0:7c89d9ec2d76 | 141 | if(dodgeRoll > 1000 - dodgeChance) |
Nakor | 0:7c89d9ec2d76 | 142 | { |
Nakor | 0:7c89d9ec2d76 | 143 | printf("You have dodged the enemy's attack!\n"); |
Nakor | 0:7c89d9ec2d76 | 144 | return; |
Nakor | 0:7c89d9ec2d76 | 145 | } |
Nakor | 0:7c89d9ec2d76 | 146 | |
Nakor | 0:7c89d9ec2d76 | 147 | _health -= roll; |
Nakor | 0:7c89d9ec2d76 | 148 | |
Nakor | 0:7c89d9ec2d76 | 149 | printf("You have taken %i damage! (Current health: %i)\n", roll, _health); |
Nakor | 0:7c89d9ec2d76 | 150 | } |
Nakor | 0:7c89d9ec2d76 | 151 | |
Nakor | 0:7c89d9ec2d76 | 152 | // Returns current player level |
Nakor | 0:7c89d9ec2d76 | 153 | char player::getLevel() |
Nakor | 0:7c89d9ec2d76 | 154 | { |
Nakor | 0:7c89d9ec2d76 | 155 | return _level; |
Nakor | 0:7c89d9ec2d76 | 156 | } |
Nakor | 0:7c89d9ec2d76 | 157 | |
Nakor | 0:7c89d9ec2d76 | 158 | // Function to communicate enemy info |
Nakor | 0:7c89d9ec2d76 | 159 | // Use however you like or go with another method |
Nakor | 0:7c89d9ec2d76 | 160 | void player::setCurrentEnemy(int health, char level) |
Nakor | 0:7c89d9ec2d76 | 161 | { |
Nakor | 0:7c89d9ec2d76 | 162 | if(level) |
Nakor | 0:7c89d9ec2d76 | 163 | { |
Nakor | 0:7c89d9ec2d76 | 164 | _enemyLevel = level; |
Nakor | 0:7c89d9ec2d76 | 165 | } |
Nakor | 0:7c89d9ec2d76 | 166 | |
Nakor | 0:7c89d9ec2d76 | 167 | _enemyHealth = health; |
Nakor | 0:7c89d9ec2d76 | 168 | } |
Nakor | 0:7c89d9ec2d76 | 169 | |
Nakor | 0:7c89d9ec2d76 | 170 | // Checks to see if the player is dead and returns true if dead |
Nakor | 0:7c89d9ec2d76 | 171 | // Also makes fun of you :) |
Nakor | 0:7c89d9ec2d76 | 172 | char player::isDead() |
Nakor | 0:7c89d9ec2d76 | 173 | { |
Nakor | 0:7c89d9ec2d76 | 174 | if(_health <= 0) |
Nakor | 0:7c89d9ec2d76 | 175 | { |
Nakor | 0:7c89d9ec2d76 | 176 | printf("\n\nOOOOOOOH! So sorry, a loser is you!\n"); |
Nakor | 0:7c89d9ec2d76 | 177 | printf("Stats:\n"); |
Nakor | 0:7c89d9ec2d76 | 178 | printf("Current Level: %i\n", _level); |
Nakor | 0:7c89d9ec2d76 | 179 | printf("Currrent XP: %ul\n", _experience); |
Nakor | 0:7c89d9ec2d76 | 180 | wait(3); |
Nakor | 0:7c89d9ec2d76 | 181 | printf("Burning your useless body...\n"); |
Nakor | 0:7c89d9ec2d76 | 182 | wait(1); |
Nakor | 0:7c89d9ec2d76 | 183 | printf("Cloning you (although we aren't sure why after that last failure)...\n"); |
Nakor | 0:7c89d9ec2d76 | 184 | wait(2); |
Nakor | 0:7c89d9ec2d76 | 185 | printf("Ready to go!\n\n"); |
Nakor | 0:7c89d9ec2d76 | 186 | return 0x01; |
Nakor | 0:7c89d9ec2d76 | 187 | } |
Nakor | 0:7c89d9ec2d76 | 188 | else |
Nakor | 0:7c89d9ec2d76 | 189 | { |
Nakor | 0:7c89d9ec2d76 | 190 | return 0x00; |
Nakor | 0:7c89d9ec2d76 | 191 | } |
Nakor | 0:7c89d9ec2d76 | 192 | } |
Nakor | 0:7c89d9ec2d76 | 193 | |
Nakor | 0:7c89d9ec2d76 | 194 | |
Nakor | 0:7c89d9ec2d76 | 195 | |
Nakor | 0:7c89d9ec2d76 | 196 | |
Nakor | 0:7c89d9ec2d76 | 197 | |
Nakor | 0:7c89d9ec2d76 | 198 | |
Nakor | 0:7c89d9ec2d76 | 199 | |
Nakor | 0:7c89d9ec2d76 | 200 | |
Nakor | 0:7c89d9ec2d76 | 201 | |
Nakor | 0:7c89d9ec2d76 | 202 | |
Nakor | 0:7c89d9ec2d76 | 203 | |
Nakor | 0:7c89d9ec2d76 | 204 | |
Nakor | 0:7c89d9ec2d76 | 205 |