Player class. Written for OOP Review. Derived from life_entity.

Dependents:   life_entity

Committer:
Nakor
Date:
Fri Apr 01 01:30:26 2011 +0000
Revision:
1:2548417420a3
Parent:
0:7c89d9ec2d76
Documentation.

Who changed what in which revision?

UserRevisionLine numberNew 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