64,654
社区成员
发帖
与我相关
我的任务
分享
//
// war.cpp
// war
//
// Created by vi on 15/5/23.
// Copyright (c) 2015年 vi. All rights reserved.
//
#include <iostream>
#include <string>
const int WARRIOR_num=5;
using namespace std;
class warrior{
friend class Headquarter;
private:
int no; //编号
int kindno; //武士的种类编号 0 dragon 1 ninja 2 iceman 3 lion 4 wolf
int eachlife=life[kindno];
public:
static string names[WARRIOR_num]; //名字的集合,按照编号排
static int life[WARRIOR_num]; //dragon 、ninja、iceman、lion、wolf
string get_name(); //获得武士的名字
// int get_life(); //获得武士的生命值
warrior(){};
};
//int warrior::get_life(){
// return life[kindno];
//}
string warrior::get_name(){
return names[kindno];
}
class Headquarter{
friend class warrior;
private:
int totalStrength=0; //总的生命值
bool stop; //是否停止制造
warrior *knight[10000]; //假设有10000武士
string color; //总部的颜色
int totalWarrior[WARRIOR_num]={0,0,0,0,0}; //各种武士的数量,武士的种类编号 0 dragon 1 ninja 2 iceman 3 lion 4 wolf
int allWarrior=0; //总共制造了多少武士
int making_ord[2][WARRIOR_num]; //各司令部制造武士的顺序
public:
Headquarter(){};
Headquarter(string color,int strength):color(color),totalStrength(strength){}; //初始化总部的生命值和颜色
void make_war(); //制造武士,把相应的数据保留
// void set_color(string a);
void print_case(int); //根据制造后保留的数据把相应的数据打印出来
int get_allWarr(); //获得一共制造了多少武士
void set_making(int *a); //初始化制造的顺序
};
void Headquarter::set_making(int *a){
int *b=a;
for(int i=0;i<2;i++)
{
b=a;
for(int j=0;j<5;j++){
making_ord[i][j]=*b;
b++;
}
}
}
int Headquarter::get_allWarr(){
return allWarrior;
}
void Headquarter::make_war(){
int start_index=0;
for(int time=0;totalStrength>0;time++){
knight[time]=new warrior();
for(int i=0;i<2;i++){
for(int j=start_index;j<WARRIOR_num;j++){
if(i==1&&j==5){
stop=true;
break;
}
else if(totalStrength-knight[time]->life[making_ord[i][j]]>=0){ //making_ord[i][j]得到的就是此刻制造的武士,名字的序号
knight[time]->no=time;
knight[time]->kindno=making_ord[i][j];
totalWarrior[making_ord[i][j]]++;
i=2;
start_index=j;
allWarrior++;
start_index++;
break;
}
else
continue;
}
}
if(stop){
delete knight[time];
break;
}
}
}
//void Headquarter::set_color(string a){
// color=a;
//}
void Headquarter::print_case(int time){
cout << "hello" << endl;
if(allWarrior>time)
printf("%03d %s headquarter stops making warriors",time,color.c_str());
else
printf("%03d %s %s %d bron with strength %d,%d %s in %s headquarter/n",time,color.c_str(),knight[time]->get_name().c_str(),
knight[time]->no,knight[time]->eachlife,totalWarrior[knight[time]->kindno],knight[time]->get_name().c_str(),color.c_str());
}
string warrior::names[WARRIOR_num] = { "dragon","ninja","iceman","lion","wolf" };
//int Headquarter::making_ord[2][WARRIOR_num] = { { 2,3,4,1,0 },{3,0,1,2,4} }; //两个司令部武士的制作顺序序列
#include <string>
#include <iostream>
#include <stdio.h>
int main(){
int all_life;
cin >> all_life;
scanf("%d %d %d %d %d",&warrior::life[0],&warrior::life[1],&warrior::life[2],&warrior::life[3],&warrior::life[4]);
Headquarter red("red",all_life),blue("blue",all_life);
int red_ord[WARRIOR_num]={2,3,4,1,0},
blue_ord[WARRIOR_num]={3,0,1,2,4};
red.set_making(red_ord);
blue.set_making(blue_ord);
red.make_war();
blue.make_war();
//red.set_making(red_ord);
//blue.set_making(blue_ord);
for(int time=0;red.get_allWarr()>time&&blue.get_allWarr()>time;time++){
red.print_case(time);
blue.print_case(time);
}
}