home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Atomic_Tanks / Atomic-Tanks-5.1.exe / src / player.h < prev    next >
C/C++ Source or Header  |  2010-09-05  |  6KB  |  208 lines

  1. #ifndef PLAYER_HEADER_
  2. #define PLAYER_HEADER_
  3.  
  4. /*
  5.  * atanks - obliterate each other with oversize weapons
  6.  * Copyright (C) 2003  Thomas Hudson
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * as published by the Free Software Foundation; either version 2
  11.  * of the License, or (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  21.  * */
  22.  
  23.  
  24. #include "main.h"
  25. #include "menu.h"
  26.  
  27.  
  28. enum playerType
  29. {
  30.   HUMAN_PLAYER,
  31.   USELESS_PLAYER,
  32.   GUESSER_PLAYER,
  33.   RANGEFINDER_PLAYER,
  34.   TARGETTER_PLAYER,
  35.   DEADLY_PLAYER,
  36.   LAST_PLAYER_TYPE,
  37.   PART_TIME_BOT,         // normally a human, but acting as a deadly computer
  38.   VERY_PART_TIME_BOT,    // just fires one shot
  39.   NETWORK_CLIENT
  40. };
  41. //player weapon preference type
  42. //ALWAYS_PREF - only choose weapon preferences once on player creation
  43. //PERPLAY_PREF - choose weapon preferences once per game
  44. enum playerPrefType
  45. {
  46.   PERPLAY_PREF,
  47.   ALWAYS_PREF
  48. };
  49. enum turnStages
  50. {
  51.   SELECT_WEAPON,
  52.   SELECT_TARGET,
  53.   CALCULATE_ATTACK,
  54.   AIM_WEAPON,
  55.   FIRE_WEAPON
  56. };
  57.  
  58. #define TANK_TYPES 8
  59.  
  60. #define    NUM_ROULETTE_SLOTS (THINGS * 100)
  61. #define    MAX_WEAP_PROBABILITY    10000
  62. #define BURIED_LEVEL 135
  63.  
  64. #define NET_COMMAND_SIZE 64
  65. // if we do not get a command after this amount of seconds,
  66. // turn control over to the computer for a moment
  67. #define NET_DELAY 1000
  68. #define NET_DELAY_SHORT 500
  69.  
  70.  
  71. // values the control functions return ot the main game loop
  72. #define CONTROL_PRESSED 2   // some key pressed, but not to shoot
  73. #define CONTROL_FIRE 1
  74. #define CONTROL_QUIT -1
  75. #define CONTROL_SKIP -2
  76.  
  77.  
  78. class TANK;
  79. class PLAYER
  80.   {
  81.  
  82.     char    _name[NAME_LENGTH];
  83.     int    _currTank;
  84.     GLOBALDATA *_global;
  85.     ENVIRONMENT *_env;
  86.     char    _turnStage;
  87.     TANK    *_target;
  88.     TANK  *_oldTarget;
  89.     int    _targetAngle;
  90.     int    _targetPower;
  91.     int    _overshoot;
  92.     int    _weaponPreference[THINGS];
  93.     int    _rouletteWheel[NUM_ROULETTE_SLOTS];
  94.     int    _targetX;
  95.     int    _targetY;
  96.     int iBoostItemsBought;
  97.     int iTargettingRound;
  98.     int computerSelectPreBuyItem (int aMaxBoostValue = 0);
  99.     TANK * computerSelectTarget (int aPreferredWeapon, bool aRotationMode = false);
  100.     char * selectKamikazePhrase();
  101.     char * selectRetaliationPhrase();
  102.     int getBlastValue (TANK * aTarget, int aDamage, int aWeapon, double aDamageMod = 1.0);
  103.     int getUnburyingTool();
  104.     int adjustOvershoot(int &aOvershoot, double aReachedX, double aReachedY);
  105.     int getAdjustedTargetX(TANK * aTarget = NULL);
  106.     int calculateAttack(TANK *aTarget = NULL);
  107.     void calculateAttackValues(int &aDistanceX, int aDistanceY, int &aRawAngle, int &aAdjAngle, int &aPower, bool aAllowFlip);
  108.     int    traceShellTrajectory (double aTargetX, double aTargetY, double aVelocityX, double aVelocityY, double &aReachedX, double &aReachedY);
  109.     int    rangeFind (int &aAngle, int &aPower);
  110.  
  111.   public:
  112.     double    type, type_saved, previous_type;
  113.     double preftype;
  114.     char* preftypeText[ALWAYS_PREF + 1];
  115.     char *tank_type[8];
  116.     char *teamText[3];
  117.  
  118.     PLAYER    *revenge;
  119.     int    vengeful;    // 0-100 chance of retaliation
  120.     double    vengeanceThreshold;    // Damage required to warrant revenge
  121.     //   (% of max armour)
  122.     double    defensive;    // -1.0 - 1.0, offense - defense
  123.     double    annoyanceFactor;
  124.     double    selfPreservation;    // Lengths gone to to avoid self-harm
  125.     double    painSensitivity;    // How sensitive to damage
  126.     int    rangeFindAttempts;
  127.     int    retargetAttempts;
  128.     double    focusRate;
  129.     double    errorMultiplier;
  130.     int    score;
  131.     double    played, won;
  132.     int     kills, killed;
  133.     double    selected;
  134.     int    money;
  135.     double    damageMultiplier;
  136.     TANK    *tank;
  137.     int    color;
  138.     void *pColor;
  139.     int    color2;
  140.     int     nm[WEAPONS], ni[ITEMS];
  141.     MENUENTRY    *menuopts;
  142.     MENUDESC    *menudesc;
  143.     char *typeText[LAST_PLAYER_TYPE];
  144.     bool changed_weapon;
  145.     bool gloating;
  146.     double tank_bitmap;      // which type of tank do we have
  147.     double team;
  148.     int time_left_to_fire;
  149.     bool skip_me;
  150.     int last_shield_used;
  151.     #ifdef NETWORK
  152.     int server_socket;
  153.     char net_command[NET_COMMAND_SIZE];
  154.     #endif
  155.  
  156.     PLAYER (GLOBALDATA *global, ENVIRONMENT *env);
  157.     // PLAYER (GLOBALDATA *global, ENVIRONMENT *env, ifstream &ifsFile, bool file); 
  158.     ~PLAYER    ();
  159.     void    setName (char *name);
  160.     char    *getName ()
  161.     {
  162.       return (_name);
  163.     };
  164.     int    calculateDirectAngle (int dx, int dy);
  165.     void    exitShop ();
  166.     void    newRound ();
  167.     void    initialise ();
  168.     TANK    *nextTank ();
  169.     TANK    *currTank ();
  170.     int    controlTank ();
  171.     int    humanControls ();
  172.     int    computerControls ();
  173.     double    calcDefenseValue (TANK *ctank, TANK *ltank);
  174.     double    selectTarget (); // select x to aim for
  175.     double    selectTarget (int *targetXCoord, int *targetYCoord); // select x to aim for
  176.     double  Select_Target (int *target_X, int *target_Y); // select x to aim for
  177.     int    computerSelectItem (); // Choose weapon to fire
  178.     int    chooseItemToBuy (int aMaxBoostValue = 0);
  179.     void    generatePreferences ();
  180.     void    setComputerValues (int aOffset = 0);
  181.     int getMoneyToSave();
  182.     int getBoostValue();
  183.     int    selectRandomItem ();
  184.     char    *selectRevengePhrase ();
  185.     char    *selectGloatPhrase ();
  186.     char    *selectSuicidePhrase ();
  187.     int     saveToFile_Text (FILE *file);
  188.     int     saveToFile (ofstream &ofsFile);
  189.     int     loadFromFile_Text (FILE *file);
  190.     int     loadFromFile (ifstream &ifsFile);
  191.     void    initMenuDesc ();
  192.     char    *Get_Team_Name();
  193.     int     Select_Random_Weapon();
  194.     int     Select_Random_Item();
  195.     int    Reduce_Time_Clock();
  196.     int    Buy_Something(int item_index);     // purchases the selected item
  197.     int    Reclaim_Shield();    // restore unused shield
  198.  
  199.     #ifdef NETWORK
  200.     void Trim_Newline(char *line);   // sanitize input
  201.     int Get_Network_Command();
  202.     int Execute_Network_Command(int my_turn);
  203.     #endif
  204.   };
  205.  
  206. #endif
  207.  
  208.