2023年12月31日发(作者:)
else if ((*it)->_id == 2) arrowCount++; } cout << _camp << " " << _name << " " << _seqNum << " has "; cout << swordCount << " sword " << bombCount << " bomb " << arrowCount << " arrow " << "and " << _hp << " elements" << endl; } virtual void PrintSpecialBornInfo() {}; ~Soldier() { _(); }};class Dragon : public Soldier {public: double _morale;public: Dragon(const char *camp, int totalNum, int leftPower, int hp, int attack) : Soldier(0, camp, totalNum, "dragon", hp, attack), _morale((double) leftPower / hp) { __back(new Weapon(*weaponPool[totalNum % 3], attack)); }};class Ninja : public Soldier {public: Ninja(const char *camp, int totalNum, int hp, int attack) : Soldier(1, camp, totalNum, "ninja", hp, attack) { __back(new Weapon(*weaponPool[totalNum % 3], attack)); __back(new Weapon(*weaponPool[(totalNum + 1) % 3], attack)); }};class Iceman : public Soldier {public: Iceman(const char *camp, int totalNum, int hp, int attack) : Soldier(2, camp, totalNum, "iceman", hp, attack) { __back(new Weapon(*weaponPool[totalNum % 3], attack)); }};class Lion : public Soldier {public: int _loyalty;public: Lion(const char *camp, int totalNum, int leftPower, int hp, int attack) : Soldier(3, camp, totalNum, "lion", hp, attack), _loyalty(leftPower) { __back(new Weapon(*weaponPool[totalNum % 3], attack)); } void PrintSpecialBornInfo() override { cout << "Its loyalty is " << _loyalty << endl; }};class Wolf : public Soldier {public: Wolf(const char *camp, int totalNum, int hp, int attack) : Soldier(4, camp, totalNum, "wolf", hp, attack) {}};int soldierHp[5];int soldierAttack[5];
break; case 4: _soldierList[_totalNum] = new Wolf(_name, _totalNum + 1, soldierHp[id], soldierAttack[id]); break; default: cerr << "Fail to generate legal soldier!" << endl; exit(0); } _back(_soldierList[_totalNum]); if (this->_id == 0) _soldierList[_totalNum]->_location = 0; else if (this->_id == 1) _soldierList[_totalNum]->_location = cityNum + 1; ++_totalNum; return _soldierList[_totalNum - 1]; } void PrintBornInfo(Soldier *soldier) { cout << setfill('0') << setw(3) << right << currentTime << ":00 " << _name << " " << soldier->_name << " " << soldier->_seqNum << " born" << endl; soldier->PrintSpecialBornInfo(); } friend void reportPower(); ~HeadQuarter() { for (int i = 0; i < _totalNum; i++) { _soldierList[i] = nullptr; } memset(_soldierList, 0, sizeof(_soldierList)); }};HeadQuarter *red, *blue;void born() { red->BornSoldier(); blue->BornSoldier();}void lionEscape() { auto it = (); for (; it != (); it++) { //000:05 blue lion 1 ran away if ((*it)->_id == 3 && (*it)->_alive) { Lion *lion = dynamic_cast
wolf->refreshWeapons(); obj->refreshWeapons();}void wolfTakeWeapon() { auto it = (); for (; it < () - 1; it++) { Soldier *soldier1 = *it; Soldier *soldier2 = *(it + 1); if (soldier1->_location == soldier2->_location) { if (soldier1->_id == 4 && soldier2->_id == 4) { it++; continue; } if (soldier1->_id == 4) { take(soldier1, soldier2); it++; } if (soldier2->_id == 4) { take(soldier2, soldier1); it++; } } }}void printKill(Soldier *winner, Soldier *loser, int location) { cout << setfill('0') << setw(3) << right << currentTime << ":40 " << winner->_camp << " " << winner->_name << " " << winner->_seqNum << " killed " << loser->_camp << " " << loser->_name << " " << loser->_seqNum << " in city " << location << " remaining " << winner->_hp << " elements" << endl;}void printDraw(Soldier *soldier1, Soldier *soldier2, int location, bool info) { //info: =false, both die; =true, both alive //000:40 both red iceman 1 and blue lion 12 were alive in city 2 //000:40 both red iceman 1 and blue lion 12 died in city 2 cout << setfill('0') << setw(3) << right << currentTime << ":40 " << "both " << soldier1->_camp << " " << soldier1->_name << " " << soldier1->_seqNum << " and " << soldier2->_camp << " " << soldier2->_name << " " << soldier2->_seqNum; if (!info) cout << " died in city "; else cout << " were alive in city "; cout << location << endl;}void printYell(Soldier *soldier, int location) { //000:40 red iceman 1 killed blue lion 12 in city 2 remaining 20 elements cout << setfill('0') << setw(3) << right << currentTime << ":40 " << soldier->_camp << " " << soldier->_name << " " << soldier->_seqNum << " yelled in city " << location << endl;}bool fightCheck(Soldier *soldier1, Soldier *soldier2, int location) { if (soldier1->_alive && !soldier2->_alive) { printKill(soldier1, soldier2, location); soldier1->takeBooty(soldier2); return true; } else if (!soldier1->_alive && soldier2->_alive) { printKill(soldier2, soldier1, location); soldier2->takeBooty(soldier1); return true; } else if (!soldier1->_alive && !soldier2->_alive) { printDraw(soldier1, soldier2, location, false); return true; } else if (soldier1->_alive && soldier2->_alive) { if ((soldier1->_() && soldier2->_()) ||
void timeline(bool &win) { born(); refreshSoldierpool(); if (currentTime * 60 + 5 > stopTime) return; lionEscape(); refreshSoldierpool(); if (currentTime * 60 + 10 > stopTime) return; win = march(); //march内已做过refreshSoldierPool if (win) return; if (currentTime * 60 + 35 > stopTime) return; wolfTakeWeapon(); if (currentTime * 60 + 40 > stopTime) return; battle(); refreshSoldierpool(); if (currentTime * 60 + 50 > stopTime) return; reportPower(); if (currentTime * 60 + 55 > stopTime) return; reportStatus();}int main() { int caseTotal; cin >> caseTotal; int caseNum = 0; while (caseNum < caseTotal) { ++caseNum; currentTime = 0; int power; cin >> power >> cityNum >> loyalDrop >> stopTime; int redSeq[5] = {2, 3, 4, 1, 0}, blueSeq[5] = {3, 0, 1, 2, 4}; red = new HeadQuarter(0, "red", power, redSeq); blue = new HeadQuarter(1, "blue", power, blueSeq); for (int i = 0; i < 5; ++i) { cin >> soldierHp[i]; } for (int i = 0; i < 5; ++i) { cin >> soldierAttack[i]; } cout << "Case " << caseNum << ":" << endl; bool win = false; while (currentTime * 60 <= stopTime) { timeline(win); if (win) break; currentTime++; } (); } return 0;}


发布评论