Armoured vehicle class. For OOP Review. Derived from life_entity.

Dependents:   life_entity

Committer:
Nakor
Date:
Fri Apr 01 01:28:35 2011 +0000
Revision:
1:f0201a296a0d
Parent:
0:915b6c03bd04
Documentation.

Who changed what in which revision?

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