Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Submit this file.
- // You must use this exact file name.
- #include "Arena.h"
- Arena::Arena(){
- fighters=NULL;
- weapons=NULL;
- fighterCount=0;
- weaponCount=0;
- reward=1000;
- mode="armed";
- }
- Arena::Arena(const Arena&a){
- fighterCount=a.fighterCount;
- weaponCount=a.weaponCount;
- reward=a.reward;
- mode=a.mode;
- fighters=new Fighter*[fighterCount];
- weapons=new Weapon*[weaponCount];
- for(int i=0;i<fighterCount;i++){
- fighters[i]=a.fighters[i];
- }
- for(int j=0;j<weaponCount;j++){
- weapons[j]=a.weapons[j];
- }
- }
- Arena::~Arena(){
- delete[]fighters;
- delete[]weapons;
- }
- bool Arena::addFighter(string name,int str,int hp){
- for(int i=0;i<fighterCount;i++){
- if(fighters[i]->getName()==name){
- return false;
- }
- }
- fighterCount+=1;
- Fighter **nfighters= new Fighter *[fighterCount];
- for(int j=0;j<fighterCount-1;j++){
- nfighters[j]=fighters[j];
- }
- nfighters[fighterCount-1]=new Fighter(name,str,hp);
- delete[]fighters;
- fighters=nfighters;
- return true;
- }
- bool Arena::addWeapon(string name,string type,int power){
- if(type=="melee"||type=="ranged"||type=="magic"||type=="unarmed"){
- for (int i=0;i<weaponCount;i++){
- if(weapons[i]->getName()==name)
- return false;
- }
- weaponCount+=1;
- Weapon** nweapons= new Weapon*[weaponCount];
- for(int j=0;j<weaponCount-1;j++){
- nweapons[j]=weapons[j];
- }
- nweapons[weaponCount-1]=new Weapon(name,type,power,"None");
- delete[]weapons;
- weapons=nweapons;
- return true;
- }
- return false;
- }
- bool Arena::giveWeaponToFighter(string personName,string weaponName){
- if(!doesFighterExist(personName)){
- return false;
- }
- if(!doesWeaponExist(weaponName)){
- return false;
- }
- int windex=findIndexOfWeapon(weaponName);
- if(weapons[windex]->getFighterName()!="None"){
- cout<<"kong"<<endl;
- string fname=weapons[windex]->getFighterName();
- int fdax=findIndexOfFighter(fname);
- cout<<"lala"<<endl;
- fighters[fdax]->removeWeapon();
- cout<<"lala11"<<endl;
- }
- int afighter=findIndexOfFighter(personName);
- fighters[afighter]->setWeapon(*weapons[windex]);
- weapons[windex]->setFighterName(personName);
- return true;
- }
- bool Arena::removeFighter(string name){
- for(int i=0;i<fighterCount;i++){
- if(fighters[i]->getName()==name){
- fighters[i]->removeWeapon();
- Fighter** nfighters= new Fighter*[fighterCount-1];
- fighterCount-=1;
- for(int j=0;j<i;j++){
- nfighters[j]=fighters[j];
- }
- for(int z=i+1;z<fighterCount;z++){
- nfighters[z]=fighters[z];
- }
- if(fighters!=NULL){
- delete[]fighters;
- fighters=NULL;
- }
- fighters=nfighters;
- cout<<"hello"<<endl;
- return true;
- }
- }
- return false;
- cout<<"Hello1"<<endl;
- }
- bool Arena::removeWeaponFromFighter(string fightername){
- for(int i=0;i<fighterCount;i++){
- if(fighters[i]->getName()==fightername){
- return fighters[i]->removeWeapon();
- }
- }
- return false;
- }
- bool Arena::destroyWeapon(string weaponName){
- for(int x=0;x<weaponCount;x++){
- if(weaponName==weapons[x]->getName()){
- string afighter=weapons[x]->getFighterName();
- removeWeaponFromFighter(afighter);
- Weapon **nweapon=new Weapon*[weaponCount-1];
- for(int z=0;z<x;z++){
- nweapon[z]=weapons[z];
- }
- for(int b=x+1;b<weaponCount-1;b++){
- nweapon[b]=weapons[b];
- }
- weaponCount-=1;
- delete[]weapons;
- weapons=nweapon;
- return true;
- }
- }
- return false;
- }
- bool Arena::doesFighterExist(string name)const{
- for(int i=0;i<fighterCount;i++){
- if(fighters[i]->getName()==name){
- return true;
- }
- }
- return false;
- }
- bool Arena::doesWeaponExist(string name)const{
- for(int i=0;i<weaponCount;i++){
- if(weapons[i]->getName()==name){
- return true;
- }
- }
- return false;
- }
- bool Arena::setReward(int mReward){
- if(mReward<0){
- return false;
- }
- reward=mReward;
- return true;
- }
- bool Arena::setMode(string mMode){
- if(mMode=="armed"||mMode=="unarmed"){
- mode=mMode;
- return true;
- }
- return false;
- }
- bool Arena::fight(string fighter1Name,string fighter2Name){
- int findex=findIndexOfFighter(fighter1Name);
- int sindex=findIndexOfFighter(fighter2Name);
- int fwdamage=0;
- int swdamage=0;
- int fdamage=0;
- int sdamage=0;
- if(mode=="unarmed"){
- fwdamage=0;
- swdamage=0;
- }
- // Weapon* fw=fighters[findex]->getWeapon();
- //Weapon* sw=fighters[sindex]->getWeapon();
- if(mode=="armed"){
- fwdamage=fighters[findex]->getWeapon().getPower();
- swdamage=fighters[sindex]->getWeapon().getPower();
- }
- if(mode=="armed"){
- fdamage=(fighters[findex]->getStr()+fwdamage)*computeMultiplier(fighters[findex]->getWeapon().getType(),fighters[sindex]->getWeapon().getType());
- sdamage=(fighters[sindex]->getStr()+swdamage)*computeMultiplier(fighters[sindex]->getWeapon().getType(),fighters[findex]->getWeapon().getType());
- }
- if(mode=="unarmed"){
- fdamage=fighters[findex]->getStr();
- sdamage=fighters[sindex]->getStr();
- }
- int turn=0;
- int fhp= fighters[findex]->getHp();
- int shp=fighters[sindex]->getHp();
- while(turn<5&&fhp>0&&shp>0){
- fhp-=sdamage;
- shp-=fdamage;
- turn+=1;
- }
- if(fhp>0&&shp<=0){
- fighters[findex]->addMoney(reward);
- cout<<fighter1Name<<" wins"<<endl;
- if(!fighters[sindex]->removeMoney(reward)){
- string kill;
- cout<<"My lord shall we kill this ("<<fighter2Name<<") money less loser? y/n"<<endl;
- cin>>kill;
- if(kill=="y"){
- removeFighter(fighter2Name);
- }
- return true;
- }
- fighters[sindex]->removeMoney(reward);
- }
- if(shp>0&&fhp<=0){
- cout<<fighter2Name<<" wins"<<endl;
- fighters[sindex]->addMoney(reward);
- if(!fighters[findex]->removeMoney(reward)){
- string kill;
- cout<<"My lord shall we kill this ("<<fighter1Name<<") money less loser? y/n"<<endl;
- cin>>kill;
- if(kill=="y"){
- removeFighter(fighter1Name);
- }
- return true;
- }
- fighters[findex]->removeMoney(reward);
- return true;
- }
- if((fhp<=0&&shp<=0)||turn>5){
- cout<<"draw"<<endl;
- return true;
- }
- return true;
- }
- int Arena::computeMultiplier(string type1,string type2)const{
- if(mode=="unarmed"){
- return 1;
- }
- if(type1!="unarmed"&&type2=="unarmed"){
- return 2;
- }
- if(type1=="melee"){
- if(type2=="ranged"){
- return 2;
- }
- }
- if(type1=="ranged"){
- if(type2=="magic"){
- return 2;
- }
- }
- if(type1=="magic"){
- if(type2=="melee"){
- return 2;
- }
- }
- return 1;
- }
- int Arena::findIndexOfFighter(string name)const{
- for(int i=0;i<fighterCount;i++){
- if(fighters[i]->getName()==name){
- return i;
- }
- }
- return -1;
- }
- int Arena::findIndexOfWeapon(string name)const{
- for(int i=0;i<weaponCount;i++){
- if(weapons[i]->getName()==name){
- return i;
- }
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement