|
|
|
@ -29,106 +29,115 @@ swordsman::swordsman(int lv_in, string name_in) |
|
|
|
|
|
|
|
|
|
void swordsman::isLevelUp() |
|
|
|
|
{ |
|
|
|
|
if(EXP>=LV*LV*75) |
|
|
|
|
{ |
|
|
|
|
LV++; |
|
|
|
|
AP+=4; |
|
|
|
|
DP+=4; |
|
|
|
|
HPmax+=8; |
|
|
|
|
MPmax+=2; |
|
|
|
|
speed+=2; |
|
|
|
|
cout<<name<<" Level UP!"<<endl; |
|
|
|
|
cout<<"HP improved 8 points to "<<HPmax<<endl; |
|
|
|
|
cout<<"MP improved 2 points to "<<MPmax<<endl; |
|
|
|
|
cout<<"Speed improved 2 points to "<<speed<<endl; |
|
|
|
|
cout<<"AP improved 4 points to "<<AP<<endl; |
|
|
|
|
cout<<"DP improved 5 points to "<<DP<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
isLevelUp(); // recursively call this function, so the character can level up multiple times if got enough exp
|
|
|
|
|
} |
|
|
|
|
if(EXP>=LV*LV*75) |
|
|
|
|
{ |
|
|
|
|
LV++; |
|
|
|
|
AP+=4; |
|
|
|
|
DP+=4; |
|
|
|
|
HPmax+=8; |
|
|
|
|
MPmax+=2; |
|
|
|
|
speed+=2; |
|
|
|
|
bag.set(bag.nOfHeal()+LV, bag.nOfMW()+LV); |
|
|
|
|
cout<<name<<" Level UP!"<<endl; |
|
|
|
|
cout<<"Get " << LV << " Heal and " << LV << " Magic Water!"<<endl; |
|
|
|
|
cout<<"HP improved 8 points to "<<HPmax<<endl; |
|
|
|
|
cout<<"MP improved 2 points to "<<MPmax<<endl; |
|
|
|
|
cout<<"Speed improved 2 points to "<<speed<<endl; |
|
|
|
|
cout<<"AP improved 4 points to "<<AP<<endl; |
|
|
|
|
cout<<"DP improved 5 points to "<<DP<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
isLevelUp(); // recursively call this function, so the character can level up multiple times if got enough exp
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool swordsman::attack(player &p) |
|
|
|
|
{ |
|
|
|
|
double HPtemp=0; // opponent's HP decrement
|
|
|
|
|
double EXPtemp=0; // player obtained exp
|
|
|
|
|
double hit=1; // attach factor, probably give critical attack
|
|
|
|
|
srand((unsigned)time(NULL)); // generating random seed based on system time
|
|
|
|
|
double HPtemp=0; // opponent's HP decrement
|
|
|
|
|
double EXPtemp=0; // player obtained exp
|
|
|
|
|
double hit=1; // attach factor, probably give critical attack
|
|
|
|
|
srand((unsigned)time(NULL)); // generating random seed based on system time
|
|
|
|
|
int attack = AP/p.DP; //depand on player's speed and p.DP
|
|
|
|
|
|
|
|
|
|
// If speed greater than opponent, you have some possibility to do double attack
|
|
|
|
|
if ((speed>p.speed) && (rand()%100<(speed-p.speed))) // rand()%100 means generates a number no greater than 100
|
|
|
|
|
{ |
|
|
|
|
HPtemp=(int)((1.0*AP/p.DP)*AP*5/(rand()%4+10)); // opponent's HP decrement calculated based their AP/DP, and uncertain chance
|
|
|
|
|
cout<<name<<"'s quick strike hit "<<p.name<<", "<<p.name<<"'s HP decreased "<<HPtemp<<endl; |
|
|
|
|
p.HP=int(p.HP-HPtemp); |
|
|
|
|
EXPtemp=(int)(HPtemp*1.2); |
|
|
|
|
} |
|
|
|
|
// If speed greater than opponent, you have some possibility to do double attack
|
|
|
|
|
if ((speed>p.speed) && (rand()%100<(speed-p.speed))) // rand()%100 means generates a number no greater than 100
|
|
|
|
|
{ |
|
|
|
|
HPtemp=(int)((attack)*AP*5/(rand()%4+10)); // opponent's HP decrement calculated based their AP/DP, and uncertain chance
|
|
|
|
|
cout<<name<<"'s quick strike hit "<<p.name<<", "<<p.name<<"'s HP decreased "<<HPtemp<<endl; |
|
|
|
|
p.HP=int(p.HP-HPtemp); |
|
|
|
|
EXPtemp=(int)(HPtemp*1.2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If speed smaller than opponent, the opponent has possibility to evade
|
|
|
|
|
if ((speed<p.speed) && (rand()%50<1)) |
|
|
|
|
{ |
|
|
|
|
cout<<name<<"'s attack has been evaded by "<<p.name<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
// If speed smaller than opponent, the opponent has possibility to evade
|
|
|
|
|
else if ((speed<p.speed) && (rand()%50<1)) |
|
|
|
|
{ |
|
|
|
|
cout<<name<<"'s attack has been evaded by "<<p.name<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 10% chance give critical attack
|
|
|
|
|
if (rand()%100<=10) |
|
|
|
|
{ |
|
|
|
|
hit=1.5; |
|
|
|
|
cout<<"Critical attack: "; |
|
|
|
|
} |
|
|
|
|
// 10% chance give critical attack
|
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if(rand()%100<=10) { |
|
|
|
|
hit=1.5; |
|
|
|
|
cout<<"Critical attack: "; |
|
|
|
|
} |
|
|
|
|
// Normal attack
|
|
|
|
|
//<!-- change
|
|
|
|
|
HPtemp=(int)(((attack)*AP*5/(rand()%4+10)) * hit); |
|
|
|
|
//-->
|
|
|
|
|
cout<<name<<" uses chop, "<<p.name<<"'s HP decreases "<<HPtemp<<endl; |
|
|
|
|
EXPtemp=(int)(EXPtemp+HPtemp*1.2); |
|
|
|
|
//<!-- luck
|
|
|
|
|
p.HP=(int)(p.HP-HPtemp*((double)(rand() % 100 + 50) / (double)100)); |
|
|
|
|
//-->
|
|
|
|
|
|
|
|
|
|
// Normal attack
|
|
|
|
|
HPtemp=(int)((1.0*AP/p.DP)*AP*5/(rand()%4+10)); |
|
|
|
|
cout<<name<<" uses bash, "<<p.name<<"'s HP decreases "<<HPtemp<<endl; |
|
|
|
|
EXPtemp=(int)(EXPtemp+HPtemp*1.2); |
|
|
|
|
//<!-- luck
|
|
|
|
|
p.HP=(int)(p.HP-HPtemp*((double)(rand() % 100 + 50) / (double)100)); |
|
|
|
|
//-->
|
|
|
|
|
cout<<name<<" obtained "<<EXPtemp<<" experience."<<endl; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cout<<name<<" obtained "<<EXPtemp<<" experience."<<endl; |
|
|
|
|
//<!-- luck
|
|
|
|
|
EXP=(int)(EXP+EXPtemp*((double)(rand() % 100 + 50) / (double)100)); |
|
|
|
|
//-->
|
|
|
|
|
system("pause"); |
|
|
|
|
return 1; // Attack success
|
|
|
|
|
system("pause"); |
|
|
|
|
return 1; // Attack success
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool swordsman::specialatt(player &p) |
|
|
|
|
{ |
|
|
|
|
if(MP<40) |
|
|
|
|
{ |
|
|
|
|
cout<<"You don't have enough magic points!"<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 0; // Attack failed
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
MP-=40; // consume 40 MP to do special attack
|
|
|
|
|
|
|
|
|
|
//10% chance opponent evades
|
|
|
|
|
if(rand()%100<=10) |
|
|
|
|
{ |
|
|
|
|
cout<<name<<"'s leap attack has been evaded by "<<p.name<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
double HPtemp=0;
|
|
|
|
|
double EXPtemp=0;
|
|
|
|
|
//double hit=1;
|
|
|
|
|
//srand(time(NULL));
|
|
|
|
|
HPtemp=(int)(AP*1.2+20); // not related to opponent's DP
|
|
|
|
|
EXPtemp=(int)(HPtemp*1.5); // special attack provides more experience
|
|
|
|
|
cout<<name<<" uses leap attack, "<<p.name<<"'s HP decreases "<<HPtemp<<endl; |
|
|
|
|
cout<<name<<" obtained "<<EXPtemp<<" experience."<<endl; |
|
|
|
|
p.HP=(int)(p.HP-HPtemp); |
|
|
|
|
//<!-- luck
|
|
|
|
|
EXP=(int)(EXP+EXPtemp*((double)(rand() % 100 + 50) / (double)100)); |
|
|
|
|
//-->
|
|
|
|
|
system("pause"); |
|
|
|
|
} |
|
|
|
|
return 1; // special attack succeed
|
|
|
|
|
if(MP<40) |
|
|
|
|
{ |
|
|
|
|
cout<<"You don't have enough magic points!"<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 0; // Attack failed
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
MP-=40; // consume 40 MP to do special attack
|
|
|
|
|
|
|
|
|
|
//10% chance opponent evades
|
|
|
|
|
if(rand()%100<=10) |
|
|
|
|
{ |
|
|
|
|
cout<<name<<"'s chooooooooooooooop attack has been evaded by "<<p.name<<endl; |
|
|
|
|
system("pause"); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
double HPtemp=0;
|
|
|
|
|
double EXPtemp=0;
|
|
|
|
|
//double hit=1;
|
|
|
|
|
//srand(time(NULL));
|
|
|
|
|
//<!-- // Luck
|
|
|
|
|
HPtemp=(int)(AP*1.2*((double)(rand() % 100 + 50) / (double)100)+20); // not related to opponent's DP
|
|
|
|
|
//-->
|
|
|
|
|
EXPtemp=(int)(HPtemp*1.5); // special attack provides more experience
|
|
|
|
|
cout<<name<<" uses chooooooooooooooop attack, "<<p.name<<"'s HP decreases "<<HPtemp<<endl; |
|
|
|
|
cout<<name<<" obtained "<<EXPtemp<<" experience."<<endl; |
|
|
|
|
p.HP=(int)(p.HP-HPtemp); |
|
|
|
|
EXP=(int)(EXP+EXPtemp); |
|
|
|
|
system("pause"); |
|
|
|
|
} |
|
|
|
|
return 1; // special attack succeed
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Computer opponent
|
|
|
|
|