Advertisement
Guest User

coreas

a guest
Jun 17th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.70 KB | None | 0 0
  1. #include "core.h"
  2.  
  3. /* Start block: DO NOT CHANGE
  4. * Please do not change anything in this code block (including whitespace, empty lines)
  5. * If changes, your submission is marked as zero.
  6. */
  7.  
  8. /*
  9. * Default constructor for Battle class
  10. */
  11. Battle::Battle(MemoryManager* manager) {
  12. this->musketeers = NULL;
  13. this->events = NULL;
  14. this->manager = manager;
  15. }
  16.  
  17. /*
  18. * Default destructor for Battle class
  19. */
  20. Battle::~Battle() {
  21. this->finalize();
  22. }
  23.  
  24. /*
  25. * Method: read data from input file and assign values to musketeers
  26. * Input:
  27. * - filename: the name of input file
  28. * Output:
  29. * - Returns true if read file successfully, otherwise returns false
  30. */
  31. bool Battle::readDataFromFile(string filename) {
  32. fstream fs(filename, ios::in);
  33.  
  34. if (!fs.is_open()) return false;
  35.  
  36. this->musketeers = new Musketeer[NUM_OF_MUSKETEERS];
  37.  
  38. int* cystalPointer = NULL;
  39. int cystal = 0;
  40.  
  41. for (int i = 0; i < NUM_OF_MUSKETEERS; i++) {
  42. this->musketeers[i].setMemoryManger(this->manager);
  43. this->musketeers[i].setTeam(this->musketeers);
  44.  
  45. for (int j = 0; j < NUM_OF_CYSTAL; j++) {
  46. fs >> cystal;
  47.  
  48. if (cystal > 0) {
  49. manager->allocate(cystalPointer);
  50. *cystalPointer = cystal;
  51. this->musketeers[i].setCystalPointer(j + 1, cystalPointer);
  52. }
  53. }
  54. }
  55.  
  56. fs >> this->firstMusketeer;
  57.  
  58. string eventsInText = "";
  59. fs.ignore();
  60. getline(fs, eventsInText);
  61.  
  62. int numOfSpaces = 0;
  63. for (int i = 0; i < eventsInText.length(); i++) {
  64. if (eventsInText.at(i) == ' ') numOfSpaces++;
  65. }
  66.  
  67. int numOfEvents = numOfSpaces + 1;
  68.  
  69. this->events = new int[numOfEvents];
  70.  
  71. stringstream ss(eventsInText);
  72.  
  73. for (int i = 0; i < numOfEvents; i++)
  74. ss >> this->events[i];
  75.  
  76. this->numOfEvents = numOfEvents;
  77.  
  78. return true;
  79. }
  80.  
  81. void Battle::display() {
  82. for (int i = 0; i < NUM_OF_MUSKETEERS; i++) {
  83. cout << this->musketeers[i].getHP() << " ";
  84.  
  85. for (int j = 0; j < NUM_OF_CYSTAL; j++) {
  86. if (this->musketeers[i].getCystalPointer(j + 1) != NULL)
  87. cout << *(this->musketeers[i].getCystalPointer(j + 1));
  88. else cout << 0;
  89. if (j < NUM_OF_CYSTAL - 1) cout << " ";
  90. }
  91.  
  92. cout << endl;
  93. }
  94.  
  95. cout << this->manager->getNumOfAllocation();
  96. }
  97. /* End block: DO NOT CHANGE */
  98.  
  99. /* Start block: TO DO
  100. * You have to complete only one method of Battle class
  101. */
  102.  
  103. /*
  104. * Method: Emulate this battle
  105. * Input: None
  106. * Output: None
  107. */
  108.  
  109. void Battle::struggle() {
  110. // TO-DO
  111. int hp[4] = { 200, 150, 100, 50 };
  112. int maxHP[4] = { 999, 900, 888, 777 };
  113. for (int i = 0; i < NUM_OF_MUSKETEERS; i++)
  114. this->musketeers[i].setHP(maxHP[i]);
  115. int ID = this->firstMusketeer; // thang dau tien
  116. for (int i = 0; i < this->numOfEvents; ++i)
  117. {
  118. int oldLevel = 0;
  119. if ((events[i] >= 11 && events[i] <= 19)
  120. || (events[i] >= 21 && events[i] <= 29)
  121. || (events[i] >= 31 && events[i] <= 39))
  122. {
  123. int typeStone = events[i] / 10; // chi so cua da (1 2 3)
  124. int levelOfStone = events[i] % 10; // level da (1-9)
  125.  
  126. bool check = this->musketeers[ID].check(ID, typeStone); // kiem tra ID ko dung chung da
  127.  
  128. int *temp = this->musketeers[ID].getCystalPointer(typeStone);
  129. // neu khong co vien crystal can thiet va ko dung chung
  130. if (temp == NULL && check)
  131. {
  132. int* crystalPointer = NULL;
  133. manager->allocate(crystalPointer);
  134. *crystalPointer = levelOfStone;
  135. this->musketeers[ID].setCystalPointer(typeStone, crystalPointer);
  136.  
  137. }
  138. else if (temp != NULL && check)
  139. {
  140. bool check2 = this->musketeers[ID].check(ID, typeStone); // kiem tra co dung chung da
  141. int oldLevelOfStone = *(this->musketeers[ID].getCystalPointer(typeStone));
  142. if (levelOfStone > oldLevelOfStone && check2)
  143. {
  144. *(this->musketeers[ID].getCystalPointer(typeStone)) = levelOfStone;
  145. }
  146. }
  147. else
  148. {
  149. int *temp2 = NULL;
  150. manager->allocate(temp2);
  151. *temp2 = levelOfStone;
  152. this->musketeers[ID].setCystalPointer(typeStone, temp2);
  153. }
  154.  
  155. }
  156. else if(-events[i] >= 111
  157. && (((-events[i] % 100) == 11) || ((-events[i] % 100) == 12)
  158. || ((-events[i] % 100) == 21) || ((-events[i] % 100) == 22)
  159. || ((-events[i] % 100) == 31) || ((-events[i] % 100) == 32)))// events[i] < 0 (-111,-112,-221,-221,...)
  160. {
  161.  
  162. int typeOfMonster = (-events[i]) % 100; // loai quai vat 11, 12, 21, 22, 31, 32
  163. int typeStone = typeOfMonster / 10; // chi so cua da (1 2 3)
  164. int *temp = this->musketeers[ID].getCystalPointer(typeStone); // lay pointer cua typeStone
  165. if (temp != NULL) // neu co crystal can thiet
  166. {
  167. if (*temp != 0)
  168. {
  169. (*temp)--; // danh boss
  170. // da giam level xuong 0
  171. if (*temp == 0)
  172. {
  173. this->musketeers[ID].resetStone(ID, temp); // xoa stone dung chung
  174. manager->deallocate(temp);
  175. this->musketeers[ID].setCystalPointer(typeStone, NULL);
  176. }
  177. }
  178. }
  179. else
  180. {
  181. // tim nextStone cua may thang sau :V
  182. int *next = NULL;
  183. next = this->musketeers[ID].findStone(ID, typeStone);
  184. if (next != NULL)
  185. {
  186. this->musketeers[ID].setCystalPointer(typeStone, next);
  187. (*next)--; // danh boss
  188. if (*next == 0)
  189. {
  190. this->musketeers[ID].resetStone(ID, next);
  191. manager->deallocate(next);
  192. this->musketeers[ID].setCystalPointer(typeStone, NULL);
  193. }
  194.  
  195. }
  196. else // deo co thang nao co crystal het :))
  197. {
  198. this->musketeers[ID].setCystalPointer(typeStone, NULL);
  199. int curHP = this->musketeers[ID].getHP();
  200.  
  201. if (ID == 3) // neu tim thay vien da vo cuc va thang ARAMIS
  202. {
  203. int *special = this->musketeers[ID].findSpecial();
  204. if (special != NULL)
  205. {
  206. int *tmp = NULL;
  207. manager->allocate(tmp);
  208. *tmp = *special - 1;
  209. this->musketeers[ID].setCystalPointer(typeStone, tmp);
  210.  
  211. this->musketeers[ID].setHP(curHP - 10 * (*special)); // aramis bi mat mau HP
  212. /*if (this->musketeers[ID].getHP() < 1)
  213. {
  214. this->musketeers[ID].setHP(0);
  215. ID = (ID + 1) % 4;
  216. }*/
  217. (*tmp)--; // danh boss
  218. if (*tmp == 0)
  219. {
  220. this->musketeers[ID].resetStone(ID, tmp);
  221. manager->deallocate(tmp);
  222. this->musketeers[ID].setCystalPointer(typeStone, NULL);
  223. }
  224. }
  225. else
  226. {
  227. int damage = this->musketeers[ID].getDamage(events[i], ID);
  228. this->musketeers[ID].setHP(curHP - damage);
  229. if (this->musketeers[ID].getHP() < 1)
  230. {
  231. this->musketeers[ID].setHP(0);
  232. ID = (ID + 1) % 4;
  233. }
  234. else if (typeOfMonster == 11) // gap boss co skill te liet 11 QUAZACOLT
  235. ID = (ID + 1) % 4;
  236.  
  237. }
  238.  
  239. }
  240. else
  241. {
  242. int damage = this->musketeers[ID].getDamage(events[i], ID);
  243. this->musketeers[ID].setHP(curHP - damage);
  244. if (this->musketeers[ID].getHP() < 1)
  245. {
  246. this->musketeers[ID].setHP(0);
  247. ID = (ID + 1) % 4;
  248. }
  249. else if (typeOfMonster == 11) // gap boss co skill te liet 11 QUAZACOLT
  250. ID = (ID + 1) % 4;
  251.  
  252. }
  253. }
  254. }
  255. }
  256. /// HOI MAU sau moi event
  257. for (int j = 0; j < NUM_OF_MUSKETEERS; ++j)
  258. {
  259. if (ID != j)
  260. {
  261. int curHP = this->musketeers[j].getHP();
  262. this->musketeers[j].setHP(curHP + hp[j]);
  263. if (this->musketeers[j].getHP() > maxHP[j])
  264. this->musketeers[j].setHP(maxHP[j]);
  265. }
  266. }
  267.  
  268. }
  269. }
  270.  
  271. /*
  272. * Method: finalize a battle, deallocate any dynamic memories.
  273. * Input: None
  274. * Output: None
  275. */
  276. void Battle::finalize() {
  277. // TO-DO
  278.  
  279. }
  280. /* End block: TO DO */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement