{}
run-icon
main.cpp
// Online C++ compiler to run C++ program online using namespace std; #include <iostream> #include <vector> struct boarditem { float cd; int burn; float remainingcd; bool ray; }; boarditem newitem (float cd, int burn, bool ray){ return {cd, burn, cd, ray}; } boarditem core = newitem(7.0f, 10, true); int enemyburn = 0; int totaldamage = 0; int firstburntick = 70; int coreburninc = 3; int omegarayvalue = 0; vector<boarditem> leftItems; vector<boarditem> rightItems; void omegaray(){ for (auto& elem : leftItems){ if (elem.burn>0){ elem.burn+=omegarayvalue; } } core.burn+=omegarayvalue; for (auto& elem : rightItems){ if (elem.burn>0){ elem.burn+=omegarayvalue; } } } void activatecore(){ for (auto& elem : rightItems){ if (elem.burn>0){ elem.burn+=coreburninc; } } } bool tickitem(boarditem& elem, int i, bool iscore, bool print){ elem.remainingcd-=0.1f; if (elem.remainingcd<=0){ elem.remainingcd = elem.cd-0.1f; if (elem.ray == true){ omegaray(); } if (iscore){ activatecore(); } if (elem.burn>0){ if (enemyburn == 0){ firstburntick = i; } enemyburn += elem.burn; float temptime = i; temptime = temptime/10; if(print){ cout<< "time: "<<temptime<<" burn applied: " <<elem.burn <<endl; } } return true; } return false; } vector<int> simulate(bool print){ vector<int> returnval; for (int i = 0; i<=300; i++){ if (enemyburn>0){ if ((i - firstburntick)%5 == 0){ totaldamage+=enemyburn; float temptime = i; temptime = temptime/10; if(print){ cout<< " time passed: " <<temptime << " enemy burn: " <<enemyburn <<" total burn damage: " << totaldamage << endl; } enemyburn-=1; } } for (auto& elem : leftItems){ bool temp = tickitem(elem, i, false, print); if (temp){ core.remainingcd-=0.9; tickitem(core,i, true, print); } } bool coretriggercheck = tickitem(core,i, true, print); for (auto& elem : rightItems){ bool temp = tickitem(elem, i, false, print); } if (i%5==0){ returnval.push_back(totaldamage); } } return returnval; } void comparesides(float cd, int burn, bool ray){ boarditem compareitem = newitem(cd,burn,ray); vector<boarditem> templeftItems = leftItems; vector<boarditem> temprightItems = rightItems; boarditem originalcore = core; leftItems.push_back(compareitem); vector<int> tbl = simulate(false); //tbl = total burn left leftItems = templeftItems; rightItems = temprightItems; enemyburn = 0; totaldamage = 0; core = originalcore; compareitem = newitem(cd,burn,ray); rightItems.push_back(compareitem); vector<int> tbr = simulate(false); //tbr = totalburnright rightItems.pop_back(); bool leftbetter = true; for (int index = 0; index < tbl.size(); index++){ int leftelem = tbl[index]; int rightelem = tbr[index]; if (rightelem>leftelem&&leftbetter){ leftbetter = false; cout<<"Right does more damage here"<<endl; }else if (rightelem<leftelem && !leftbetter){ leftbetter = true; cout<<"Left does more damage here"<<endl; } float time = 0.5f * index; cout<< "time = "<<time<<" \tLeft damage: "<<leftelem << " \tRight damage: "<<rightelem<<endl; } } int main() { int firstburn = 0; leftItems = { newitem(4.0f, 0, false), newitem(4.0f, 0, false), newitem(4.0f, 0, false) }; rightItems = { newitem(3.7f, 3, false), newitem(4.0f, 0, false) }; bool compare = true; if (compare){ comparesides(3.0f,4,false); }else{ simulate(true); } return 0; }
Output