标签:WARRIOR 魔兽 CHeadquarter int 备战 013 NUM CWarriors kindNo
(21条消息) C++编程练习 013:魔兽世界之一:备战_德林恩宝的博客-CSDN博客
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 #define WARRIOR_NUM 5 6 7 class CHeadquarter; 8 class CWarriors{ 9 private: 10 CHeadquarter* pHeadquarter; 11 int kindNo;//种类 12 int nNo;//编号"第几号武士" 13 public: 14 //friend class CHeadquarter 15 static char* names[WARRIOR_NUM]; 16 static int InitialLifeValue[WARRIOR_NUM]; 17 CWarriors(CHeadquarter* p,int _kindNo,int _nNo):pHeadquarter(p),kindNo(_kindNo),nNo(_nNo){} 18 void PrintResult(int nTime); 19 }; 20 21 class CHeadquarter{ 22 private: 23 int totalLifeValue; 24 bool bStopped; 25 int totalWarriorsNum; 26 int color; 27 int curMakingSeqIdx; 28 int warriorsNum[WARRIOR_NUM]; 29 CWarriors* pWarriors[1000]; 30 public: 31 friend class CWarriors; 32 static int makingSeq[2][WARRIOR_NUM]; 33 void Init(int _color,int lv){ 34 color = _color; 35 totalLifeValue = lv; 36 bStopped = false; 37 totalWarriorsNum = 0; 38 curMakingSeqIdx = 0; 39 for(int i = 0;i < WARRIOR_NUM;++ i) 40 warriorsNum[i] = 0; 41 } 42 ~CHeadquarter(){ 43 for(int i = 0;i < totalWarriorsNum;++ i) 44 delete pWarriors[i]; 45 //delete pWarriors[]; 46 } 47 int Produce(int nTime){ 48 if(bStopped) return 0; 49 int searchingTimes = 0; 50 while(totalLifeValue < CWarriors::InitialLifeValue[makingSeq[color][curMakingSeqIdx]] && searchingTimes < WARRIOR_NUM){ 51 curMakingSeqIdx = (curMakingSeqIdx + 1) % WARRIOR_NUM; 52 ++ searchingTimes; 53 } 54 int kindNo = makingSeq[color][curMakingSeqIdx]; 55 if(totalLifeValue < CWarriors::InitialLifeValue[kindNo]){ 56 bStopped = true; 57 if(color == 0) 58 printf("%03d red headquarter stops making warriors\n",nTime); 59 else 60 printf("%03d blue headquarter stops making warriors\n",nTime); 61 return 0; 62 } 63 pWarriors[totalWarriorsNum] = new CWarriors(this,kindNo,totalWarriorsNum + 1); 64 totalLifeValue -= CWarriors::InitialLifeValue[kindNo]; 65 ++ warriorsNum[kindNo]; 66 curMakingSeqIdx = (curMakingSeqIdx + 1) % WARRIOR_NUM; 67 pWarriors[totalWarriorsNum] -> PrintResult(nTime); 68 ++ totalWarriorsNum; 69 return 1; 70 } 71 void GetColor(char* szColor){ 72 if(color == 0) 73 strcpy(szColor,"red"); 74 else 75 strcpy(szColor,"blue"); 76 } 77 }; 78 79 void CWarriors::PrintResult(int nTime){ 80 char szColor[20]; 81 pHeadquarter -> GetColor(szColor); 82 printf("%03d %s %s %d born with strength %d,%d %s in %s headquarter\n",nTime,szColor,names[kindNo],nNo,InitialLifeValue[kindNo],pHeadquarter -> warriorsNum[kindNo],names[kindNo],szColor); 83 } 84 85 char* CWarriors::names[WARRIOR_NUM] = {"dragon","ninja","iceman","lion","wolf"}; 86 int CWarriors::InitialLifeValue[WARRIOR_NUM]; 87 int CHeadquarter::makingSeq[2][WARRIOR_NUM] = {{2,3,4,1,0},{3,0,1,2,4}}; 88 int main(){ 89 int n; 90 int M; 91 scanf("%d",&n); 92 CHeadquarter RedHead,BlueHead; 93 for(int i = 1;i <= n;++ i){ 94 printf("Case:%d\n",i); 95 scanf("%d",&M); 96 for(int j = 0;j < 5;++ j) 97 scanf("%d",&CWarriors::InitialLifeValue[j]); 98 RedHead.Init(0,M); 99 BlueHead.Init(1,M); 100 int nTime = 0; 101 while(1){ 102 int tmp1 = RedHead.Produce(nTime); 103 int tmp2 = BlueHead.Produce(nTime); 104 if(tmp1 == 0 && tmp2 == 0) 105 break; 106 ++ nTime; 107 } 108 } 109 return 0; 110 }
标签:WARRIOR,魔兽,CHeadquarter,int,备战,013,NUM,CWarriors,kindNo 来源: https://www.cnblogs.com/balabalabubalabala/p/16608927.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。