Armoured vehicle class. For OOP Review. Derived from life_entity.
armoured_vehicle.cpp@0:915b6c03bd04, 2011-03-31 (annotated)
- Committer:
- Nakor
- Date:
- Thu Mar 31 19:55:00 2011 +0000
- Revision:
- 0:915b6c03bd04
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nakor | 0:915b6c03bd04 | 1 | #include "armoured_vehicle.h" |
Nakor | 0:915b6c03bd04 | 2 | |
Nakor | 0:915b6c03bd04 | 3 | // Pointer to the player (user) class |
Nakor | 0:915b6c03bd04 | 4 | player *pThePlayer; |
Nakor | 0:915b6c03bd04 | 5 | |
Nakor | 0:915b6c03bd04 | 6 | |
Nakor | 0:915b6c03bd04 | 7 | // Constructor |
Nakor | 0:915b6c03bd04 | 8 | // Calculates enemy level flux (+/- 2 levels the way I did it). |
Nakor | 0:915b6c03bd04 | 9 | // Initiates variables (including calculating health and armour). |
Nakor | 0:915b6c03bd04 | 10 | armoured_vehicle::armoured_vehicle(player *thePlayer) |
Nakor | 0:915b6c03bd04 | 11 | { |
Nakor | 0:915b6c03bd04 | 12 | srand ( time(NULL) ); |
Nakor | 0:915b6c03bd04 | 13 | |
Nakor | 0:915b6c03bd04 | 14 | int plusOrMinus = (rand() % 2); |
Nakor | 0:915b6c03bd04 | 15 | |
Nakor | 0:915b6c03bd04 | 16 | |
Nakor | 0:915b6c03bd04 | 17 | |
Nakor | 0:915b6c03bd04 | 18 | #if DEBUG_ARMOURED |
Nakor | 0:915b6c03bd04 | 19 | printf("%i\n", plusOrMinus); |
Nakor | 0:915b6c03bd04 | 20 | #endif |
Nakor | 0:915b6c03bd04 | 21 | |
Nakor | 0:915b6c03bd04 | 22 | srand ( time(NULL) ); |
Nakor | 0:915b6c03bd04 | 23 | int levelFlux = 0; |
Nakor | 0:915b6c03bd04 | 24 | |
Nakor | 0:915b6c03bd04 | 25 | if(plusOrMinus) |
Nakor | 0:915b6c03bd04 | 26 | { |
Nakor | 0:915b6c03bd04 | 27 | levelFlux = (rand() % 4 + 1) / 2; |
Nakor | 0:915b6c03bd04 | 28 | } |
Nakor | 0:915b6c03bd04 | 29 | else |
Nakor | 0:915b6c03bd04 | 30 | { |
Nakor | 0:915b6c03bd04 | 31 | levelFlux = -(rand() % 4 + 1) / 2; |
Nakor | 0:915b6c03bd04 | 32 | } |
Nakor | 0:915b6c03bd04 | 33 | |
Nakor | 0:915b6c03bd04 | 34 | #if DEBUG_ARMOURED_VERBOSE |
Nakor | 0:915b6c03bd04 | 35 | printf("LevelFlux: %i\n", levelFlux); |
Nakor | 0:915b6c03bd04 | 36 | #endif |
Nakor | 0:915b6c03bd04 | 37 | |
Nakor | 0:915b6c03bd04 | 38 | _level = thePlayer->getLevel() + levelFlux; |
Nakor | 0:915b6c03bd04 | 39 | |
Nakor | 0:915b6c03bd04 | 40 | while(_level <= 0) |
Nakor | 0:915b6c03bd04 | 41 | { |
Nakor | 0:915b6c03bd04 | 42 | srand ( time(NULL) ); |
Nakor | 0:915b6c03bd04 | 43 | |
Nakor | 0:915b6c03bd04 | 44 | #if DEBUG_ARMOURED_VERBOSE |
Nakor | 0:915b6c03bd04 | 45 | printf("%i\n", plusOrMinus); |
Nakor | 0:915b6c03bd04 | 46 | #endif |
Nakor | 0:915b6c03bd04 | 47 | |
Nakor | 0:915b6c03bd04 | 48 | if(plusOrMinus) |
Nakor | 0:915b6c03bd04 | 49 | { |
Nakor | 0:915b6c03bd04 | 50 | levelFlux = (rand() % 4 + 1) / 2; |
Nakor | 0:915b6c03bd04 | 51 | } |
Nakor | 0:915b6c03bd04 | 52 | else |
Nakor | 0:915b6c03bd04 | 53 | { |
Nakor | 0:915b6c03bd04 | 54 | levelFlux = -(rand() % 4 + 1) / 2; |
Nakor | 0:915b6c03bd04 | 55 | } |
Nakor | 0:915b6c03bd04 | 56 | |
Nakor | 0:915b6c03bd04 | 57 | _level = thePlayer->getLevel() + levelFlux; |
Nakor | 0:915b6c03bd04 | 58 | |
Nakor | 0:915b6c03bd04 | 59 | if(_level > thePlayer->getLevel() + 2 || _level < thePlayer->getLevel() - 2) |
Nakor | 0:915b6c03bd04 | 60 | { |
Nakor | 0:915b6c03bd04 | 61 | _level = 0; |
Nakor | 0:915b6c03bd04 | 62 | } |
Nakor | 0:915b6c03bd04 | 63 | } |
Nakor | 0:915b6c03bd04 | 64 | |
Nakor | 0:915b6c03bd04 | 65 | _health = _level * 100; |
Nakor | 0:915b6c03bd04 | 66 | |
Nakor | 0:915b6c03bd04 | 67 | // Armour amount is really what decides how hard your elite enemies are. |
Nakor | 0:915b6c03bd04 | 68 | _armour = _level * 25; |
Nakor | 0:915b6c03bd04 | 69 | |
Nakor | 0:915b6c03bd04 | 70 | _armourBroken = 0x00; |
Nakor | 0:915b6c03bd04 | 71 | |
Nakor | 0:915b6c03bd04 | 72 | #if DEBUG_ARMOURED |
Nakor | 0:915b6c03bd04 | 73 | printf("Creating armoured vehicle character @ level %i\n", _level); |
Nakor | 0:915b6c03bd04 | 74 | #endif |
Nakor | 0:915b6c03bd04 | 75 | |
Nakor | 0:915b6c03bd04 | 76 | printf("FIGHT!\n\n"); |
Nakor | 0:915b6c03bd04 | 77 | wait(.5); |
Nakor | 0:915b6c03bd04 | 78 | |
Nakor | 0:915b6c03bd04 | 79 | pThePlayer = thePlayer; |
Nakor | 0:915b6c03bd04 | 80 | |
Nakor | 0:915b6c03bd04 | 81 | } |
Nakor | 0:915b6c03bd04 | 82 | |
Nakor | 0:915b6c03bd04 | 83 | // Prints message to indicate death if health is less than zero. |
Nakor | 0:915b6c03bd04 | 84 | // Skips the message if deleted before health reaches zero (or below). |
Nakor | 0:915b6c03bd04 | 85 | armoured_vehicle::~armoured_vehicle() |
Nakor | 0:915b6c03bd04 | 86 | { |
Nakor | 0:915b6c03bd04 | 87 | if(_health <= 0) |
Nakor | 0:915b6c03bd04 | 88 | printf("You blew up my tank! Do you have any idea how much these things cost?\n"); |
Nakor | 0:915b6c03bd04 | 89 | } |
Nakor | 0:915b6c03bd04 | 90 | |
Nakor | 0:915b6c03bd04 | 91 | // Applies damage to enemy after |
Nakor | 0:915b6c03bd04 | 92 | // doing a dodge roll. |
Nakor | 0:915b6c03bd04 | 93 | // Armoured vehicles take damage to armour before health. |
Nakor | 0:915b6c03bd04 | 94 | void armoured_vehicle::takeDamage(int roll) |
Nakor | 0:915b6c03bd04 | 95 | { |
Nakor | 0:915b6c03bd04 | 96 | srand ( time(NULL) ); |
Nakor | 0:915b6c03bd04 | 97 | int dodgeRoll = ( rand() % 1000 ); |
Nakor | 0:915b6c03bd04 | 98 | |
Nakor | 0:915b6c03bd04 | 99 | int dodgeChance = 5 * _level; |
Nakor | 0:915b6c03bd04 | 100 | if(dodgeChance > 200) dodgeChance = 200; |
Nakor | 0:915b6c03bd04 | 101 | |
Nakor | 0:915b6c03bd04 | 102 | if(dodgeRoll > 1000 - dodgeChance) |
Nakor | 0:915b6c03bd04 | 103 | { |
Nakor | 0:915b6c03bd04 | 104 | printf("Enemy has dodged your attack!\n"); |
Nakor | 0:915b6c03bd04 | 105 | return; |
Nakor | 0:915b6c03bd04 | 106 | } |
Nakor | 0:915b6c03bd04 | 107 | |
Nakor | 0:915b6c03bd04 | 108 | if(_armourBroken == 0x00) |
Nakor | 0:915b6c03bd04 | 109 | { |
Nakor | 0:915b6c03bd04 | 110 | _armour -= roll; |
Nakor | 0:915b6c03bd04 | 111 | |
Nakor | 0:915b6c03bd04 | 112 | if(_armour > 0) |
Nakor | 0:915b6c03bd04 | 113 | { |
Nakor | 0:915b6c03bd04 | 114 | printf("Enemy armour has absorbed %i damage. (current armour: %i)\n", roll, _armour); |
Nakor | 0:915b6c03bd04 | 115 | return; |
Nakor | 0:915b6c03bd04 | 116 | } |
Nakor | 0:915b6c03bd04 | 117 | else |
Nakor | 0:915b6c03bd04 | 118 | { |
Nakor | 0:915b6c03bd04 | 119 | |
Nakor | 0:915b6c03bd04 | 120 | printf("Enemy armour destroyed!\n"); |
Nakor | 0:915b6c03bd04 | 121 | _armourBroken = 0x01; |
Nakor | 0:915b6c03bd04 | 122 | |
Nakor | 0:915b6c03bd04 | 123 | _health += _armour; |
Nakor | 0:915b6c03bd04 | 124 | } |
Nakor | 0:915b6c03bd04 | 125 | } |
Nakor | 0:915b6c03bd04 | 126 | |
Nakor | 0:915b6c03bd04 | 127 | |
Nakor | 0:915b6c03bd04 | 128 | _health -= roll; |
Nakor | 0:915b6c03bd04 | 129 | |
Nakor | 0:915b6c03bd04 | 130 | printf("Enemy has taken %i damage! (Current health: %i)\n", roll, _health); |
Nakor | 0:915b6c03bd04 | 131 | } |
Nakor | 0:915b6c03bd04 | 132 |