Advertisement
Guest User

arena.cpp

a guest
Oct 18th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.90 KB | None | 0 0
  1. // Submit this file.
  2. // You must use this exact file name.
  3.  
  4. #include "Arena.h"
  5. Arena::Arena(){
  6. fighters=NULL;
  7. weapons=NULL;
  8. fighterCount=0;
  9. weaponCount=0;
  10. reward=1000;
  11. mode="armed";
  12. }
  13.  
  14. Arena::Arena(const Arena&a){
  15. fighterCount=a.fighterCount;
  16. weaponCount=a.weaponCount;
  17. reward=a.reward;
  18. mode=a.mode;
  19. fighters=new Fighter*[fighterCount];
  20. weapons=new Weapon*[weaponCount];
  21. for(int i=0;i<fighterCount;i++){
  22. fighters[i]=a.fighters[i];
  23. }
  24. for(int j=0;j<weaponCount;j++){
  25. weapons[j]=a.weapons[j];
  26. }
  27. }
  28. Arena::~Arena(){
  29. delete[]fighters;
  30. delete[]weapons;
  31. }
  32. bool Arena::addFighter(string name,int str,int hp){
  33. for(int i=0;i<fighterCount;i++){
  34. if(fighters[i]->getName()==name){
  35. return false;
  36. }
  37. }
  38.  
  39. fighterCount+=1;
  40. Fighter **nfighters= new Fighter *[fighterCount];
  41. for(int j=0;j<fighterCount-1;j++){
  42. nfighters[j]=fighters[j];
  43. }
  44.  
  45. nfighters[fighterCount-1]=new Fighter(name,str,hp);
  46. delete[]fighters;
  47. fighters=nfighters;
  48.  
  49. return true;
  50. }
  51.  
  52. bool Arena::addWeapon(string name,string type,int power){
  53. if(type=="melee"||type=="ranged"||type=="magic"||type=="unarmed"){
  54.  
  55. for (int i=0;i<weaponCount;i++){
  56. if(weapons[i]->getName()==name)
  57. return false;
  58. }
  59.  
  60. weaponCount+=1;
  61. Weapon** nweapons= new Weapon*[weaponCount];
  62. for(int j=0;j<weaponCount-1;j++){
  63. nweapons[j]=weapons[j];
  64. }
  65. nweapons[weaponCount-1]=new Weapon(name,type,power,"None");
  66. delete[]weapons;
  67. weapons=nweapons;
  68. return true;
  69.  
  70.  
  71. }
  72. return false;
  73. }
  74.  
  75. bool Arena::giveWeaponToFighter(string personName,string weaponName){
  76. if(!doesFighterExist(personName)){
  77. return false;
  78. }
  79. if(!doesWeaponExist(weaponName)){
  80. return false;
  81. }
  82. int windex=findIndexOfWeapon(weaponName);
  83. if(weapons[windex]->getFighterName()!="None"){
  84. cout<<"kong"<<endl;
  85. string fname=weapons[windex]->getFighterName();
  86. int fdax=findIndexOfFighter(fname);
  87. cout<<"lala"<<endl;
  88. fighters[fdax]->removeWeapon();
  89. cout<<"lala11"<<endl;
  90. }
  91. int afighter=findIndexOfFighter(personName);
  92. fighters[afighter]->setWeapon(*weapons[windex]);
  93. weapons[windex]->setFighterName(personName);
  94. return true;
  95.  
  96. }
  97.  
  98. bool Arena::removeFighter(string name){
  99. for(int i=0;i<fighterCount;i++){
  100. if(fighters[i]->getName()==name){
  101.  
  102.  
  103. fighters[i]->removeWeapon();
  104. Fighter** nfighters= new Fighter*[fighterCount-1];
  105. fighterCount-=1;
  106. for(int j=0;j<i;j++){
  107. nfighters[j]=fighters[j];
  108. }
  109. for(int z=i+1;z<fighterCount;z++){
  110. nfighters[z]=fighters[z];
  111. }
  112.  
  113. if(fighters!=NULL){
  114. delete[]fighters;
  115. fighters=NULL;
  116. }
  117. fighters=nfighters;
  118. cout<<"hello"<<endl;
  119. return true;
  120. }
  121. }
  122.  
  123.  
  124. return false;
  125. cout<<"Hello1"<<endl;
  126. }
  127.  
  128. bool Arena::removeWeaponFromFighter(string fightername){
  129. for(int i=0;i<fighterCount;i++){
  130. if(fighters[i]->getName()==fightername){
  131. return fighters[i]->removeWeapon();
  132. }
  133. }
  134. return false;
  135. }
  136.  
  137. bool Arena::destroyWeapon(string weaponName){
  138. for(int x=0;x<weaponCount;x++){
  139. if(weaponName==weapons[x]->getName()){
  140. string afighter=weapons[x]->getFighterName();
  141. removeWeaponFromFighter(afighter);
  142. Weapon **nweapon=new Weapon*[weaponCount-1];
  143. for(int z=0;z<x;z++){
  144. nweapon[z]=weapons[z];
  145. }
  146. for(int b=x+1;b<weaponCount-1;b++){
  147. nweapon[b]=weapons[b];
  148. }
  149. weaponCount-=1;
  150. delete[]weapons;
  151. weapons=nweapon;
  152. return true;
  153. }
  154. }
  155. return false;
  156. }
  157.  
  158. bool Arena::doesFighterExist(string name)const{
  159. for(int i=0;i<fighterCount;i++){
  160. if(fighters[i]->getName()==name){
  161. return true;
  162. }
  163. }
  164. return false;
  165. }
  166.  
  167. bool Arena::doesWeaponExist(string name)const{
  168.  
  169. for(int i=0;i<weaponCount;i++){
  170. if(weapons[i]->getName()==name){
  171. return true;
  172. }
  173. }
  174. return false;
  175. }
  176. bool Arena::setReward(int mReward){
  177. if(mReward<0){
  178. return false;
  179. }
  180. reward=mReward;
  181. return true;
  182. }
  183. bool Arena::setMode(string mMode){
  184. if(mMode=="armed"||mMode=="unarmed"){
  185. mode=mMode;
  186. return true;
  187. }
  188. return false;
  189. }
  190. bool Arena::fight(string fighter1Name,string fighter2Name){
  191.  
  192. int findex=findIndexOfFighter(fighter1Name);
  193. int sindex=findIndexOfFighter(fighter2Name);
  194. int fwdamage=0;
  195. int swdamage=0;
  196. int fdamage=0;
  197. int sdamage=0;
  198. if(mode=="unarmed"){
  199.  
  200. fwdamage=0;
  201. swdamage=0;
  202. }
  203.  
  204. // Weapon* fw=fighters[findex]->getWeapon();
  205. //Weapon* sw=fighters[sindex]->getWeapon();
  206. if(mode=="armed"){
  207. fwdamage=fighters[findex]->getWeapon().getPower();
  208. swdamage=fighters[sindex]->getWeapon().getPower();
  209. }
  210.  
  211.  
  212. if(mode=="armed"){
  213. fdamage=(fighters[findex]->getStr()+fwdamage)*computeMultiplier(fighters[findex]->getWeapon().getType(),fighters[sindex]->getWeapon().getType());
  214. sdamage=(fighters[sindex]->getStr()+swdamage)*computeMultiplier(fighters[sindex]->getWeapon().getType(),fighters[findex]->getWeapon().getType());
  215. }
  216. if(mode=="unarmed"){
  217. fdamage=fighters[findex]->getStr();
  218. sdamage=fighters[sindex]->getStr();
  219. }
  220. int turn=0;
  221. int fhp= fighters[findex]->getHp();
  222. int shp=fighters[sindex]->getHp();
  223. while(turn<5&&fhp>0&&shp>0){
  224. fhp-=sdamage;
  225. shp-=fdamage;
  226. turn+=1;
  227. }
  228. if(fhp>0&&shp<=0){
  229. fighters[findex]->addMoney(reward);
  230. cout<<fighter1Name<<" wins"<<endl;
  231. if(!fighters[sindex]->removeMoney(reward)){
  232. string kill;
  233. cout<<"My lord shall we kill this ("<<fighter2Name<<") money less loser? y/n"<<endl;
  234. cin>>kill;
  235. if(kill=="y"){
  236. removeFighter(fighter2Name);
  237. }
  238. return true;
  239. }
  240. fighters[sindex]->removeMoney(reward);
  241.  
  242. }
  243. if(shp>0&&fhp<=0){
  244. cout<<fighter2Name<<" wins"<<endl;
  245. fighters[sindex]->addMoney(reward);
  246. if(!fighters[findex]->removeMoney(reward)){
  247. string kill;
  248. cout<<"My lord shall we kill this ("<<fighter1Name<<") money less loser? y/n"<<endl;
  249. cin>>kill;
  250. if(kill=="y"){
  251. removeFighter(fighter1Name);
  252. }
  253. return true;
  254. }
  255. fighters[findex]->removeMoney(reward);
  256. return true;
  257.  
  258. }
  259. if((fhp<=0&&shp<=0)||turn>5){
  260. cout<<"draw"<<endl;
  261. return true;
  262.  
  263. }
  264. return true;
  265. }
  266. int Arena::computeMultiplier(string type1,string type2)const{
  267. if(mode=="unarmed"){
  268. return 1;
  269. }
  270. if(type1!="unarmed"&&type2=="unarmed"){
  271. return 2;
  272. }
  273. if(type1=="melee"){
  274. if(type2=="ranged"){
  275. return 2;
  276. }
  277. }
  278. if(type1=="ranged"){
  279. if(type2=="magic"){
  280. return 2;
  281. }
  282. }
  283. if(type1=="magic"){
  284. if(type2=="melee"){
  285. return 2;
  286. }
  287. }
  288. return 1;
  289. }
  290.  
  291. int Arena::findIndexOfFighter(string name)const{
  292. for(int i=0;i<fighterCount;i++){
  293. if(fighters[i]->getName()==name){
  294. return i;
  295. }
  296. }
  297. return -1;
  298. }
  299.  
  300. int Arena::findIndexOfWeapon(string name)const{
  301. for(int i=0;i<weaponCount;i++){
  302. if(weapons[i]->getName()==name){
  303. return i;
  304. }
  305. }
  306. return -1;
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement