Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "core.h"
- /* Start block: DO NOT CHANGE
- * Please do not change anything in this code block (including whitespace, empty lines)
- * If changes, your submission is marked as zero.
- */
- /*
- * Default constructor for Battle class
- */
- Battle::Battle(MemoryManager* manager) {
- this->musketeers = NULL;
- this->events = NULL;
- this->manager = manager;
- }
- /*
- * Default destructor for Battle class
- */
- Battle::~Battle() {
- this->finalize();
- }
- /*
- * Method: read data from input file and assign values to musketeers
- * Input:
- * - filename: the name of input file
- * Output:
- * - Returns true if read file successfully, otherwise returns false
- */
- bool Battle::readDataFromFile(string filename) {
- fstream fs(filename, ios::in);
- if (!fs.is_open()) return false;
- this->musketeers = new Musketeer[NUM_OF_MUSKETEERS];
- int* cystalPointer = NULL;
- int cystal = 0;
- for (int i = 0; i < NUM_OF_MUSKETEERS; i++) {
- this->musketeers[i].setMemoryManger(this->manager);
- this->musketeers[i].setTeam(this->musketeers);
- for (int j = 0; j < NUM_OF_CYSTAL; j++) {
- fs >> cystal;
- if (cystal > 0) {
- manager->allocate(cystalPointer);
- *cystalPointer = cystal;
- this->musketeers[i].setCystalPointer(j + 1, cystalPointer);
- }
- }
- }
- fs >> this->firstMusketeer;
- string eventsInText = "";
- fs.ignore();
- getline(fs, eventsInText);
- int numOfSpaces = 0;
- for (int i = 0; i < eventsInText.length(); i++) {
- if (eventsInText.at(i) == ' ') numOfSpaces++;
- }
- int numOfEvents = numOfSpaces + 1;
- this->events = new int[numOfEvents];
- stringstream ss(eventsInText);
- for (int i = 0; i < numOfEvents; i++)
- ss >> this->events[i];
- this->numOfEvents = numOfEvents;
- return true;
- }
- void Battle::display() {
- for (int i = 0; i < NUM_OF_MUSKETEERS; i++) {
- cout << this->musketeers[i].getHP() << " ";
- for (int j = 0; j < NUM_OF_CYSTAL; j++) {
- if (this->musketeers[i].getCystalPointer(j + 1) != NULL)
- cout << *(this->musketeers[i].getCystalPointer(j + 1));
- else cout << 0;
- if (j < NUM_OF_CYSTAL - 1) cout << " ";
- }
- cout << endl;
- }
- cout << this->manager->getNumOfAllocation();
- }
- /* End block: DO NOT CHANGE */
- /* Start block: TO DO
- * You have to complete only one method of Battle class
- */
- /*
- * Method: Emulate this battle
- * Input: None
- * Output: None
- */
- void Battle::struggle() {
- // TO-DO
- int hp[4] = { 200, 150, 100, 50 };
- int maxHP[4] = { 999, 900, 888, 777 };
- for (int i = 0; i < NUM_OF_MUSKETEERS; i++)
- this->musketeers[i].setHP(maxHP[i]);
- int ID = this->firstMusketeer; // thang dau tien
- for (int i = 0; i < this->numOfEvents; ++i)
- {
- int oldLevel = 0;
- if ((events[i] >= 11 && events[i] <= 19)
- || (events[i] >= 21 && events[i] <= 29)
- || (events[i] >= 31 && events[i] <= 39))
- {
- int typeStone = events[i] / 10; // chi so cua da (1 2 3)
- int levelOfStone = events[i] % 10; // level da (1-9)
- bool check = this->musketeers[ID].check(ID, typeStone); // kiem tra ID ko dung chung da
- int *temp = this->musketeers[ID].getCystalPointer(typeStone);
- // neu khong co vien crystal can thiet va ko dung chung
- if (temp == NULL && check)
- {
- int* crystalPointer = NULL;
- manager->allocate(crystalPointer);
- *crystalPointer = levelOfStone;
- this->musketeers[ID].setCystalPointer(typeStone, crystalPointer);
- }
- else if (temp != NULL && check)
- {
- bool check2 = this->musketeers[ID].check(ID, typeStone); // kiem tra co dung chung da
- int oldLevelOfStone = *(this->musketeers[ID].getCystalPointer(typeStone));
- if (levelOfStone > oldLevelOfStone && check2)
- {
- *(this->musketeers[ID].getCystalPointer(typeStone)) = levelOfStone;
- }
- }
- else
- {
- int *temp2 = NULL;
- manager->allocate(temp2);
- *temp2 = levelOfStone;
- this->musketeers[ID].setCystalPointer(typeStone, temp2);
- }
- }
- else if(-events[i] >= 111
- && (((-events[i] % 100) == 11) || ((-events[i] % 100) == 12)
- || ((-events[i] % 100) == 21) || ((-events[i] % 100) == 22)
- || ((-events[i] % 100) == 31) || ((-events[i] % 100) == 32)))// events[i] < 0 (-111,-112,-221,-221,...)
- {
- int typeOfMonster = (-events[i]) % 100; // loai quai vat 11, 12, 21, 22, 31, 32
- int typeStone = typeOfMonster / 10; // chi so cua da (1 2 3)
- int *temp = this->musketeers[ID].getCystalPointer(typeStone); // lay pointer cua typeStone
- if (temp != NULL) // neu co crystal can thiet
- {
- if (*temp != 0)
- {
- (*temp)--; // danh boss
- // da giam level xuong 0
- if (*temp == 0)
- {
- this->musketeers[ID].resetStone(ID, temp); // xoa stone dung chung
- manager->deallocate(temp);
- this->musketeers[ID].setCystalPointer(typeStone, NULL);
- }
- }
- }
- else
- {
- // tim nextStone cua may thang sau :V
- int *next = NULL;
- next = this->musketeers[ID].findStone(ID, typeStone);
- if (next != NULL)
- {
- this->musketeers[ID].setCystalPointer(typeStone, next);
- (*next)--; // danh boss
- if (*next == 0)
- {
- this->musketeers[ID].resetStone(ID, next);
- manager->deallocate(next);
- this->musketeers[ID].setCystalPointer(typeStone, NULL);
- }
- }
- else // deo co thang nao co crystal het :))
- {
- this->musketeers[ID].setCystalPointer(typeStone, NULL);
- int curHP = this->musketeers[ID].getHP();
- if (ID == 3) // neu tim thay vien da vo cuc va thang ARAMIS
- {
- int *special = this->musketeers[ID].findSpecial();
- if (special != NULL)
- {
- int *tmp = NULL;
- manager->allocate(tmp);
- *tmp = *special - 1;
- this->musketeers[ID].setCystalPointer(typeStone, tmp);
- this->musketeers[ID].setHP(curHP - 10 * (*special)); // aramis bi mat mau HP
- /*if (this->musketeers[ID].getHP() < 1)
- {
- this->musketeers[ID].setHP(0);
- ID = (ID + 1) % 4;
- }*/
- (*tmp)--; // danh boss
- if (*tmp == 0)
- {
- this->musketeers[ID].resetStone(ID, tmp);
- manager->deallocate(tmp);
- this->musketeers[ID].setCystalPointer(typeStone, NULL);
- }
- }
- else
- {
- int damage = this->musketeers[ID].getDamage(events[i], ID);
- this->musketeers[ID].setHP(curHP - damage);
- if (this->musketeers[ID].getHP() < 1)
- {
- this->musketeers[ID].setHP(0);
- ID = (ID + 1) % 4;
- }
- else if (typeOfMonster == 11) // gap boss co skill te liet 11 QUAZACOLT
- ID = (ID + 1) % 4;
- }
- }
- else
- {
- int damage = this->musketeers[ID].getDamage(events[i], ID);
- this->musketeers[ID].setHP(curHP - damage);
- if (this->musketeers[ID].getHP() < 1)
- {
- this->musketeers[ID].setHP(0);
- ID = (ID + 1) % 4;
- }
- else if (typeOfMonster == 11) // gap boss co skill te liet 11 QUAZACOLT
- ID = (ID + 1) % 4;
- }
- }
- }
- }
- /// HOI MAU sau moi event
- for (int j = 0; j < NUM_OF_MUSKETEERS; ++j)
- {
- if (ID != j)
- {
- int curHP = this->musketeers[j].getHP();
- this->musketeers[j].setHP(curHP + hp[j]);
- if (this->musketeers[j].getHP() > maxHP[j])
- this->musketeers[j].setHP(maxHP[j]);
- }
- }
- }
- }
- /*
- * Method: finalize a battle, deallocate any dynamic memories.
- * Input: None
- * Output: None
- */
- void Battle::finalize() {
- // TO-DO
- }
- /* End block: TO DO */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement