1 #include <iostream>
2 #include<queue>
3 using namespace std;
4
5 //p1的基础攻击
6 struct p1_struct
7 {
8 int conbat=100;
9 }p1_s;
10 //p2的基础攻击
11 struct p2_struct
12 {
13 int conbat=200;
14 }p2_s;
15 //p1的血量
16 struct p1_blood_struct
17 {
18 int blood=500;
19 }p1_b;
20 //p2的血量
21 struct p2_blood_struct
22 {
23 int blood=510;
24 }p2_b;
25 //p1的英雄队列
26 queue<int> p1;
27 //p2的英雄队列
28 queue<int> p2;
29 //p1的英雄出战数组
30 int p1_list_hero[5]={1,2,3,4,5};
31 //p2的英雄出战数组
32 int p2_list_hero[5]={6,7,8,9,10};
33
34 //最大出战英雄数量
35 const int hero_max_count=5;
36
37 //英雄攻击buff加成
38 bool compute_conbat(int id,int &conbat)
39 {
40 if(1==id||2==id||3==id||4==id||5==id)
41 conbat=conbat+150;
42 else if(6==id||7==id||8==id||9==id||10==id)
43 conbat=conbat+60;
44 return true;
45 }
46 //获取英雄对应的攻击
47 bool get_config_conbat(int id,int &conbat)
48 {
49 if(1==id||2==id||3==id||4==id||5==id){
50 conbat=p1_s.conbat;
51 compute_conbat(id,conbat);
52 }
53 else if(6==id||7==id||8==id||9==id||10==id){
54 conbat=p2_s.conbat;
55 compute_conbat(id,conbat);
56 }
57 else
58 return false;
59
60 return true;
61 }
62 //获取英雄血量
63 bool get_blood(int id,int &nblood)
64 {
65 if(1==id||2==id||3==id||4==id||5==id)
66 nblood=p1_b.blood;
67 else if(6==id||7==id||8==id||9==id||10==id)
68 nblood=p2_b.blood;
69 return true;
70 }
71 //开始战斗
72 int attack(){
73 //填充p1出战英雄队列
74 for(int nIndex=0;nIndex<hero_max_count;nIndex++)
75 {
76 p1.push(p1_list_hero[nIndex]);
77 }
78 //填充p2出战英雄队列
79 for(int nIndex=0;nIndex<hero_max_count;nIndex++)
80 {
81 p2.push(p2_list_hero[nIndex]);
82 }
83 //p1当前出战英雄id
84 int p1_hero_id=0;
85 //p2当前出战英雄id
86 int p2_hero_id=0;
87 //设置双方首位出战英雄id
88 p1_hero_id=p1.front();
89 p2_hero_id=p2.front();
90 p1.pop();
91 p2.pop();
92
93 //获取双方基础属性
94 int p1_conbat=0;
95 int p2_conbat=0;
96 int p1_blood=0;
97 int p2_blood=0;
98 get_config_conbat(p1_hero_id,p1_conbat);
99 get_config_conbat(p2_hero_id,p2_conbat);
100 get_blood(p1_hero_id,p1_blood);
101 get_blood(p2_hero_id,p2_blood);
102 //出战英雄结束队列
103 bool p1_break=false;
104 bool p2_break=false;
105 //开始战斗
106 while(1)
107 {
108 //p1打p2
109 if(p1_conbat-p2_blood>=0) //p1的英雄打死了p2的英雄
110 {
111 cout<<"p1_hero "<<p1_hero_id<<" killed p2_hero "<<p2_hero_id<<endl;
112 if(!p2.empty()){
113 cout<<"p2.size="<<p2.size()<<endl;
114 p2_hero_id=p2.front();
115 p2.pop();
116 get_config_conbat(p2_hero_id,p2_conbat);
117 get_blood(p2_hero_id,p2_blood);
118 }
119 else
120 {//p2英雄打完了(都死了)
121 p2_break=true;
122 }
123 }
124 else
125 {//p1打了p2多少血
126 cout<<"p1_hero "<<p1_hero_id<<" attack p2_hero "<<p2_hero_id<<" "<<p1_conbat<<" blood";
127 p2_blood=p2_blood-p1_conbat;
128 cout<<" p2_blood surplus "<<p2_blood<<endl;
129 }
130 //p2打p1
131 if(p2_conbat-p1_blood>=0) //p1的英雄打死了p2的英雄
132 {
133 cout<<"p2_hero "<<p2_hero_id<<" killed p1_hero "<<p1_hero_id<<endl;
134 if(!p1.empty()){
135 cout<<"p1.size="<<p1.size()<<endl;
136 p1_hero_id=p1.front();
137 p1.pop();
138 get_config_conbat(p1_hero_id,p1_conbat);
139 get_blood(p1_hero_id,p1_blood);
140 }
141 else
142 {//p1英雄打完了(都死了)
143 p1_break=true;
144 }
145 }
146 else
147 {//p2打了p1多少血
148 cout<<"p2_hero "<<p2_hero_id<<" attack p1_hero "<<p1_hero_id<<" "<<p2_conbat<<" blood";
149 p1_blood=p1_blood-p2_conbat;
150 cout<<" p1_blood surplus "<<p1_blood<<endl;
151 }
152
153 if(true==p1_break && true==p2_break)//平局
154 return 0;
155 if(true==p2_break)//p1赢了
156 return 1;
157 if(true==p1_break)//p2赢了
158 return 2;
159
160 }
161 }
162
163 int main(int, char**) {
164 int winner=attack();
165 if(0==winner)
166 cout<<"it ends in a draw!!"<<endl;
167 else
168 cout<<"The winner is P"<<winner<<" congratulate!!"<<endl;
169 }
运行结果: