Advertisement
Guest User

Entities.h

a guest
Dec 14th, 2014
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.72 KB | None | 0 0
  1. #include "Functions.h"
  2.  
  3. class Enemy
  4. {
  5.     bool Random;
  6.     int Choice;
  7.  
  8. public:
  9.     char Sign;
  10.     int EnemyX, EnemyY;
  11.     int Health;
  12.     bool IsDead;
  13.     void Move(int&, int&, int&);
  14.     void AddToGame();
  15.     void RandomSpawn();
  16.  
  17.     Enemy (char, int, int, vector<Enemy>&); //There are several different ways to spawn
  18.     Enemy (int, int, vector<Enemy>&);       //enemies now
  19.     Enemy (char, vector<Enemy>&);
  20.     Enemy (vector<Enemy>&);
  21. };
  22.  
  23. void Enemy::RandomSpawn()   //For the enemy constructors that don't have
  24. {                           //an input for the X and Y coordinates
  25.     bool ValidPosition = false;
  26.     while (ValidPosition == false)
  27.     {
  28.         int randX, randY;
  29.         randX = (rand() % 20);
  30.         randY = (rand() % 20);
  31.  
  32.         if (randX <= 3 && randY <= 3 || board[randY][randX] == Wall || board[randY][randX] == Goal)
  33.         {
  34.             continue;
  35.         }
  36.  
  37.         else
  38.         {
  39.             EnemyX = randX;
  40.             EnemyY = randY;
  41.  
  42.             ValidPosition = true;
  43.         }
  44.     }
  45. }
  46.  
  47. Enemy::Enemy (char enemySign, int enemyX, int enemyY, vector<Enemy>& Vect)
  48. {
  49.     Sign = enemySign;
  50.     EnemyX = enemyX;
  51.     EnemyY = enemyY;
  52.     Health = 10;
  53.     IsDead = false;
  54.  
  55.     Vect.push_back(*this);
  56. }
  57.  
  58. Enemy::Enemy (int enemyX, int enemyY, vector<Enemy>& Vect)
  59. {
  60.     char Signs[] = {'!', '$', '%', '^', '&', '*', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
  61.     char randomSign = (rand() % 32);
  62.  
  63.     Sign = Signs[randomSign];
  64.  
  65.     EnemyX = enemyX;
  66.     EnemyY = enemyY;
  67.     Health = 10;
  68.     IsDead = false;
  69.  
  70.     Vect.push_back(*this);
  71. }
  72.  
  73. Enemy::Enemy (char enemySign, vector<Enemy>& Vect)
  74. {
  75.     Sign = enemySign;
  76.     RandomSpawn();
  77.     Health = 10;
  78.     IsDead = false;
  79.  
  80.     Vect.push_back(*this);
  81. }
  82.  
  83. Enemy::Enemy(vector<Enemy>& Vect)
  84. {
  85.     char Signs[] = {'!', '$', '%', '^', '&', '*', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
  86.     char randomSign = (rand() % 32);
  87.  
  88.     Sign = Signs[randomSign];
  89.     Health = 10;
  90.     IsDead = false;
  91.  
  92.     RandomSpawn();
  93.  
  94.     Vect.push_back(*this);
  95. }
  96.  
  97. void Enemy::AddToGame() //More so to show them on the first round
  98. {
  99.     board[EnemyY][EnemyX] = Sign;
  100. }
  101.  
  102. void Enemy::Move(int& pX, int& pY, int& pHealth)
  103. {
  104.     char Finished = 'P';
  105.  
  106.     bool UpTrue = true;
  107.     bool DownTrue = true;
  108.     bool LeftTrue = true;
  109.     bool RightTrue = true;
  110.     bool Picked = false;
  111.  
  112.     //Can't have dead enemies moving, can we?
  113.     //"this" refers to the enemy currently using this member function
  114.     while (Finished != 'R' && this->IsDead != true)
  115.     {
  116.  
  117.         for (int i = 0; i < 10; i++)
  118.         {
  119.             if (board[this->EnemyY + i][this->EnemyX] == Wall || board[this->EnemyY + i][this->EnemyX] == Goal)
  120.                 DownTrue = false;
  121.  
  122.             if (board[this->EnemyY][this->EnemyX + i] == Wall || board[this->EnemyY][this->EnemyX + i] == Goal)
  123.                 RightTrue = false;
  124.  
  125.             if (board[this->EnemyY - i][this->EnemyX] == Wall || board[this->EnemyY - i][this->EnemyX] == Goal)
  126.                 UpTrue = false;
  127.  
  128.             if (board[this->EnemyY][this->EnemyX - i] == Wall || board[this->EnemyY][this->EnemyX - i] == Goal)
  129.                 LeftTrue = false;
  130.            
  131.             //Check if to move up
  132.             if (this->EnemyY - i == pY && this->EnemyX == pX && UpTrue)
  133.             {
  134.                 Choice = 0;
  135.                 Picked = true;
  136.             }
  137.            
  138.             //Check if to move down
  139.             if (this->EnemyY + i == pY && this->EnemyX == pX && DownTrue)
  140.             {
  141.                 Choice = 1;
  142.                 Picked = true;
  143.             }
  144.  
  145.             //Check if to move right
  146.             if (this->EnemyY == pY && this->EnemyX + i == pX && RightTrue)
  147.             {
  148.                 Choice = 2;
  149.                 Picked = true;
  150.             }
  151.  
  152.             //Check if to move left
  153.             if (this->EnemyY == pY && this->EnemyX - i == pX && LeftTrue)
  154.             {
  155.                 Choice = 3;
  156.                 Picked = true;
  157.             }
  158.         }
  159.        
  160.         if (Picked == false)
  161.             Choice = (rand() % 4);
  162.  
  163.         //up
  164.         if (Choice == 0)
  165.         {
  166.             //A series of checks to see if the move is valid.
  167.             //Same for all moves that the enemy takes
  168.             --EnemyY;
  169.             if (board[EnemyY][EnemyX] == Wall && Picked == true || board[EnemyY][EnemyX] == Goal && Picked == true)
  170.             {
  171.                 ++EnemyY;
  172.                 break;
  173.             }
  174.             ++EnemyY;
  175.  
  176.             --EnemyY;
  177.             if (board[EnemyY][EnemyX] == Wall || board[EnemyY][EnemyX] == Goal)
  178.             {
  179.                 ++EnemyY;
  180.                 continue;
  181.             }
  182.             ++EnemyY;
  183.  
  184.             --EnemyY;
  185.             if (EnemyY == pY && EnemyX == pX)
  186.             {
  187.                 ++EnemyY;
  188.                 pHealth -= 1;
  189.                 break;
  190.             }
  191.             ++EnemyY;
  192.  
  193.             board[EnemyY][EnemyX] = Ground;
  194.             --EnemyY;
  195.  
  196.             board[EnemyY][EnemyX] = Sign;
  197.             Finished = 'R';
  198.         }
  199.  
  200.         //down
  201.         else if (Choice == 1)
  202.         {
  203.             ++EnemyY;
  204.             if (board[EnemyY][EnemyX] == Wall && Picked == true || board[EnemyY][EnemyX] == Goal && Picked == true)
  205.             {
  206.                 --EnemyY;
  207.                 break;
  208.             }
  209.             --EnemyY;
  210.  
  211.  
  212.             ++EnemyY;
  213.             if (board[EnemyY][EnemyX] == Wall || board[EnemyY][EnemyX] == Goal)
  214.             {
  215.                 --EnemyY;
  216.                 continue;
  217.             }
  218.             --EnemyY;
  219.  
  220.             ++EnemyY;
  221.             if (EnemyY == pY && EnemyX == pX)
  222.             {
  223.                 --EnemyY;
  224.                 pHealth -= 1;
  225.                 break;
  226.             }
  227.             --EnemyY;
  228.  
  229.             board[EnemyY][EnemyX] = Ground;
  230.             ++EnemyY;
  231.  
  232.             board[EnemyY][EnemyX] = Sign;
  233.             Finished = 'R';
  234.         }
  235.  
  236.         //Right
  237.         else if (Choice == 2)
  238.         {
  239.             ++EnemyX;
  240.             if (board[EnemyY][EnemyX] == Wall && Picked == true || board[EnemyY][EnemyX] == Goal && Picked == true)
  241.             {
  242.                 --EnemyX;
  243.                 break;
  244.             }
  245.             --EnemyX;
  246.  
  247.             ++EnemyX;
  248.             if (board[EnemyY][EnemyX] == Wall || board[EnemyY][EnemyX] == Goal)
  249.             {
  250.                 --EnemyX;
  251.                 continue;
  252.             }
  253.             --EnemyX;
  254.  
  255.             ++EnemyX;
  256.             if (EnemyY == pY && EnemyX == pX)
  257.             {
  258.                 --EnemyX;
  259.                 pHealth -= 1;
  260.                 break;
  261.             }
  262.             --EnemyX;
  263.  
  264.             board[EnemyY][EnemyX] = Ground;
  265.             ++EnemyX;
  266.  
  267.             board[EnemyY][EnemyX] = Sign;
  268.             Finished = 'R';
  269.         }
  270.  
  271.         //Left
  272.         else if (Choice == 3)
  273.         {
  274.             --EnemyX;
  275.             if (board[EnemyY][EnemyX] == Wall && Picked == true || board[EnemyY][EnemyX] == Goal && Picked == true)
  276.             {
  277.                 ++EnemyX;
  278.                 break;
  279.             }
  280.             ++EnemyX;
  281.  
  282.             --EnemyX;
  283.             if (board[EnemyY][EnemyX] == Wall || board[EnemyY][EnemyX] == Goal)
  284.             {
  285.                 ++EnemyX;
  286.                 continue;
  287.             }
  288.             ++EnemyX;
  289.  
  290.             --EnemyX;
  291.             if (EnemyY == pY && EnemyX == pX)
  292.             {
  293.                 ++EnemyX;
  294.                 pHealth -= 1;
  295.                 break;
  296.             }
  297.             ++EnemyX;
  298.  
  299.             board[EnemyY][EnemyX] = Ground;
  300.             --EnemyX;
  301.  
  302.             board[EnemyY][EnemyX] = Sign;
  303.             Finished = 'R';
  304.         }
  305.     }
  306. }
  307.  
  308. //=======================================================================================================================================================
  309. //Player Class===========================================================================================================================================
  310. //=======================================================================================================================================================
  311.  
  312. class Player
  313. {
  314. public:
  315.     void Move();
  316.     void AddToGame();
  317.     void Attack(vector<Enemy>& Vect, vector<Enemy>::iterator& Iter);
  318.     void GetLoot();
  319.     char Choice;
  320.     char Sign;
  321.  
  322.     int Gold;
  323.     int Damage;
  324.     int Range;
  325.     int Health;
  326.     int PlayerX, PlayerY;
  327.  
  328.     Player (char, int, int);
  329. };
  330.  
  331. Player::Player (char a, int b, int c)
  332. {
  333.     Sign = a;
  334.     PlayerX = b;
  335.     PlayerY = c;
  336.     Gold = 0;
  337.     Health = 100;
  338.     Range = 1;
  339.     Damage = 1;
  340. }
  341.  
  342. void Player::GetLoot()
  343. {
  344.     Gold += 500;
  345. }
  346.  
  347. void Player::Attack(vector<Enemy>& Vect, vector<Enemy>::iterator& Iter)
  348. {
  349.     bool invalid = true;
  350.  
  351.     while (invalid)
  352.     {
  353.         //Up
  354.         if (Choice == 'u')
  355.         {
  356.             //Pretty much the same as the move function, except it loops through
  357.             //the enemy vector and sees if they are in the space in the attack
  358.             //direction. If they are, set them to dead.
  359.             for (int q = 1; q <= this->Range; q++)
  360.             {
  361.                 if (board[PlayerY - q][PlayerX] == Wall)
  362.                     break;
  363.  
  364.                 if (board[PlayerY - q][PlayerX] != Wall)
  365.                 {
  366.                     for (Iter = Vect.begin(); Iter != Vect.end(); Iter++)
  367.                     {
  368.                         if (this->PlayerY - q == Iter->EnemyY && this->PlayerX == Iter->EnemyX)
  369.                         {
  370.                             Iter->Health -= this->Damage;
  371.                        
  372.                             if (Iter->Health <= 0)
  373.                             {
  374.                                 Iter->IsDead = true;
  375.                                 this->GetLoot();
  376.                                 board[Iter->EnemyY][Iter->EnemyX] = ' ';
  377.                                 Iter->EnemyX = 0;
  378.                                 Iter->EnemyY = 0;
  379.                             }
  380.                         }
  381.                     }
  382.                 }
  383.             }
  384.             break;
  385.         }
  386.  
  387.         //Down
  388.         else if (Choice == 'j')
  389.         {
  390.             for (int q = 1; q <= this->Range; q++)
  391.             {
  392.                 if (board[PlayerY + q][PlayerX] == Wall)
  393.                     break;
  394.  
  395.                 if (board[PlayerY + q][PlayerX] != Wall)
  396.                 {
  397.                     for (Iter = Vect.begin(); Iter != Vect.end(); Iter++)
  398.                     {
  399.                         if (this->PlayerY + q == Iter->EnemyY && this->PlayerX == Iter->EnemyX)
  400.                         {
  401.                             Iter->Health -= this->Damage;
  402.                        
  403.                             if (Iter->Health <= 0)
  404.                             {
  405.                                 Iter->IsDead = true;
  406.                                 this->GetLoot();
  407.                                 board[Iter->EnemyY][Iter->EnemyX] = ' ';
  408.                                 Iter->EnemyX = 0;
  409.                                 Iter->EnemyY = 0;
  410.                             }
  411.                         }
  412.                     }
  413.                 }
  414.             }
  415.             break;
  416.         }
  417.  
  418.         //Left
  419.         else if (Choice == 'h')
  420.         {
  421.             for (int q = 1; q <= this->Range; q++)
  422.             {
  423.                 if (board[PlayerY][PlayerX - q] == Wall)
  424.                     break;
  425.  
  426.                 if (board[PlayerY][PlayerX - q] != Wall)
  427.                 {
  428.                     for (Iter = Vect.begin(); Iter != Vect.end(); Iter++)
  429.                     {
  430.                         if (this->PlayerY == Iter->EnemyY && this->PlayerX - q == Iter->EnemyX)
  431.                         {
  432.                             Iter->Health -= this->Damage;
  433.                        
  434.                             if (Iter->Health <= 0)
  435.                             {
  436.                                 Iter->IsDead = true;
  437.                                 this->GetLoot();
  438.                                 board[Iter->EnemyY][Iter->EnemyX] = ' ';
  439.                                 Iter->EnemyX = 0;
  440.                                 Iter->EnemyY = 0;
  441.                             }
  442.                         }
  443.                     }
  444.                 }
  445.             }
  446.             break;
  447.         }
  448.  
  449.         //Right
  450.         else if (Choice == 'k')
  451.         {
  452.             for (int q = 1; q <= this->Range; q++)
  453.             {
  454.                 if (board[PlayerY][PlayerX + q] == Wall)
  455.                     break;
  456.  
  457.                 if (board[PlayerY][PlayerX + q] != Wall)
  458.                 {
  459.                     for (Iter = Vect.begin(); Iter != Vect.end(); Iter++)
  460.                     {
  461.                         if (this->PlayerY == Iter->EnemyY && this->PlayerX + q == Iter->EnemyX)
  462.                         {
  463.                             Iter->Health -= this->Damage;
  464.                        
  465.                             if (Iter->Health <= 0)
  466.                             {
  467.                                 Iter->IsDead = true;
  468.                                 this->GetLoot();
  469.                                 board[Iter->EnemyY][Iter->EnemyX] = ' ';
  470.                                 Iter->EnemyX = 0;
  471.                                 Iter->EnemyY = 0;
  472.                             }
  473.                         }
  474.                     }
  475.                 }
  476.             }
  477.             break;
  478.         }
  479.     }
  480. }
  481.  
  482. void Player::AddToGame()//More so that your character is visible on the first round
  483. {
  484.     board[PlayerY][PlayerX] = Sign;
  485. }
  486.  
  487.  
  488. void Player::Move()
  489. {
  490.     bool invalid = true;
  491.  
  492.     while (invalid)
  493.     {
  494.         //up
  495.         if (Choice == 'w')
  496.         {
  497.             //A series of checks to see if the move is valid.
  498.             --PlayerY;
  499.             if (board[PlayerY][PlayerX] == Wall)
  500.             {
  501.                 ++PlayerY;
  502.                 break;
  503.             }
  504.             ++PlayerY;
  505.  
  506.             --PlayerY;
  507.             if (board[PlayerY][PlayerX] == Goal)
  508.             {
  509.                 ++PlayerY;
  510.                 Win = true;
  511.                 break;
  512.             }
  513.             ++PlayerY;
  514.  
  515.             board[PlayerY][PlayerX] = Ground;
  516.             --PlayerY;
  517.  
  518.             board[PlayerY][PlayerX] = Sign;
  519.             invalid = false;
  520.         }
  521.  
  522.         //down
  523.         else if (Choice == 's')
  524.         {
  525.             ++PlayerY;
  526.             if (board[PlayerY][PlayerX] == Wall)
  527.             {
  528.                 --PlayerY;
  529.                 break;
  530.             }
  531.             --PlayerY;
  532.  
  533.             ++PlayerY;
  534.             if (board[PlayerY][PlayerX] == Goal)
  535.             {
  536.                 --PlayerY;
  537.                 Win = true;
  538.                 break;
  539.             }
  540.             --PlayerY;
  541.  
  542.             board[PlayerY][PlayerX] = Ground;
  543.             ++PlayerY;
  544.  
  545.             board[PlayerY][PlayerX] = Sign;
  546.             invalid = false;
  547.         }
  548.  
  549.         //Right
  550.         else if (Choice == 'd')
  551.         {
  552.             ++PlayerX;
  553.             if (board[PlayerY][PlayerX] == Wall)
  554.             {
  555.                 --PlayerX;
  556.                 break;
  557.             }
  558.             --PlayerX;
  559.  
  560.             ++PlayerX;
  561.             if (board[PlayerY][PlayerX] == Goal)
  562.             {
  563.                 --PlayerX;
  564.                 Win = true;
  565.                 break;
  566.             }
  567.             --PlayerX;
  568.  
  569.             board[PlayerY][PlayerX] = Ground;
  570.             ++PlayerX;
  571.  
  572.             board[PlayerY][PlayerX] = Sign;
  573.             invalid = false;
  574.         }
  575.  
  576.         //Left
  577.         else if (Choice == 'a')
  578.         {
  579.             --PlayerX;
  580.             if (board[PlayerY][PlayerX] == Wall)
  581.             {
  582.                 ++PlayerX;
  583.                 break;
  584.             }
  585.             ++PlayerX;
  586.  
  587.             --PlayerX;
  588.             if (board[PlayerY][PlayerX] == Goal)
  589.             {
  590.                 ++PlayerX;
  591.                 Win = true;
  592.                 break;
  593.             }
  594.             ++PlayerX;
  595.  
  596.             board[PlayerY][PlayerX] = Ground;
  597.             --PlayerX;
  598.  
  599.             board[PlayerY][PlayerX] = Sign;
  600.             invalid = false;
  601.         }
  602.     }
  603. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement