#include <iostream>
using namespace std;
// バランシングの既定パラメータ
#define BALANCING_BORDER 990
///////////////////////////////
// ここの数字だけパラメータに合わせて変更。
// 初期パラ変更する場合ここから。
int iLife=75;// ライフ
int iPower=400;// ちから
int iTough=1;// 丈夫さ
int iAim=500;// 命中
int iDodge=800;// 回避
///////////////////////////////
// 使用した薬のカウンターなので変えないこと。
int iKusoCount=0;
int iHittyuCount=0;
int iBiasineCount=0;
int iTapaCount=0;
int iLaroxCount=0;
// 空走丸
void UseKuso(int itrial){
for(int i=0;i<itrial;++i) {
iKusoCount++;
std::cout<< "Using Kuso" <<std::endl;
iTough-=10;
if(iTough<1){
iTough=1;
}
iDodge+=20;
if(iDodge>999){
iDodge=999;
}}}
// 必中丸
void UseHittyu(int itrial){
for(int i=0;i<itrial;++i) {
iHittyuCount++;
std::cout<< "Using Hittyu" <<std::endl;
iPower-=10;
if(iPower<1){
iPower=1;
}
iAim+=20;
if(iAim>999){
iAim=999;
}}}
// バイアシン
void UseBiasine(int itrial){
for(int i=0;i<itrial;++i) {
iBiasineCount++;
std::cout<< "Using Biasine" <<std::endl;
iAim-=10;
if(iAim<1){
iAim=1;
}
iPower+=10;
if(iPower>999){
iPower=999;
}
iLife+=10;
if(iLife>999){
iLife=999;
}
}
}
// タパウリン
void UseTapa(int itrial){
for(int i=0;i<itrial;++i) {
iTapaCount++;
std::cout<< "Using Tapa" <<std::endl;
iDodge-=10;
if(iDodge<1){
iDodge=1;
}
iLife+=10;
if(iLife>999){
iLife=999;
}
iTough+=10;
if(iTough>999){
iTough=999;
}
}
}
// ラロックス
void UseLarox(int itrial){
for(int i=0;i<itrial;++i) {
iLaroxCount++;
std::cout<< "Using Larox" <<std::endl;
iLife-=10;
if(iLife<1){
iLife=1;
}
iPower+=10;
if(iPower>999){
iPower=999;
}
iTough+=10;
if(iTough>999){
iTough=999;
}
}
}
bool IsOffenseSperior(){
int iOffense = iPower+iAim;
int iDeffense = iTough+iDodge;
if(iOffense>iDeffense){return true;}
else{return false;}
}
bool Balancing(){
bool bSuccess=false;
if(IsOffenseSperior()){
if(iTough< BALANCING_BORDER) {
UseTapa(1);
bSuccess=true;
}
if(iDodge< BALANCING_BORDER - 10){
UseKuso(1);
bSuccess=true;
}
}
else{
if(iPower< BALANCING_BORDER){
UseBiasine(1);
bSuccess=true;
}
if(iAim< BALANCING_BORDER - 10){
UseHittyu(1);
bSuccess=true;
}
}
return bSuccess;
}
void Consolidate_toAim(){
while(iAim<980){
UseHittyu(1);
}
}
void Consolidate_toDodge(){
while(iDodge<980){
UseKuso(1);
}
}
// ライフちから丈夫さのうち2つが980越えたら投与終わりにする。
bool bTwoStatusRemain(){
int iStatusRem=0;
if(iPower< BALANCING_BORDER)iStatusRem++;
if(iLife< BALANCING_BORDER)iStatusRem++;
if(iTough< BALANCING_BORDER)iStatusRem++;
if(iStatusRem>1){return true;}
else {return false;}
}
int calculateLaroxNum()
{
// タパウリン2と空走丸で丈夫さ+10、ライフ+20
// バイアシン2と必中丸でちから+10、ライフ+20
int iPowRem = (999-iPower)/10; // ちから上限直前までのラロックス許容数
int iToughRem = (999 - iTough)/10;// 丈夫さ上限直前までのラロックス許容数
int iRem = iPowRem + iToughRem;
// ライフを+980上げるときに、
// ちからと丈夫さは合計+490される
// 基本はiRemの状態からLaroxNum×2を引いて49となるようにラロックス数を調整すれば良いのでここから逆算。
int iLaroxNum = (iRem - 49)/2;
// ちから、丈夫さがカンストする場合は直前で止める。
if(iLaroxNum>iPowRem){
iLaroxNum=iPowRem;
}
if(iLaroxNum>iToughRem){
iLaroxNum=iToughRem;
}
std::cout<< "★★★★★★★★★★★★" <<std::endl;
std::cout<< "calculated LaroxNum" << iLaroxNum <<std::endl;
std::cout<< "★★★★★★★★★★★★" <<std::endl;
return iLaroxNum;
}
int main() {
// 空走丸、必中丸で回避命中にステ寄せ。
Consolidate_toAim();
Consolidate_toDodge();
// ライフ1カンストのためのラロックス祭
UseLarox(calculateLaroxNum());
// ライフちから丈夫さが2つ以上既定越えるまでバランシング
while(bTwoStatusRemain()){
if(!Balancing()){
break;
}
}
std::cout<< "★★★ Status ★★★" <<std::endl;
std::cout<< "iLife = " << iLife <<std::endl;
std::cout<< "iPower = " << iPower <<std::endl;
std::cout<< "iTough = " << iTough <<std::endl;
std::cout<< "iAim = " << iAim <<std::endl;
std::cout<< "iDodge = " << iDodge <<std::endl;
std::cout<< "★★★ Required Items ★★★" <<std::endl;
std::cout << "iKuso = " << iKusoCount << std::endl;
std::cout << "iHittyu = " << iHittyuCount << std::endl;
std::cout << "iTapa = " << iTapaCount << std::endl;
std::cout << "iBiasine = " << iBiasineCount << std::endl;
std::cout << "iLarox = " << iLaroxCount << std::endl;
int iTotal=iKusoCount+iHittyuCount+iTapaCount+iBiasineCount+iLaroxCount;
std::cout<< "iTotal = " << iTotal <<std::endl;
return 0;
}