戦闘員の数、ラウンド数、ラウンドごとのファイターごとのサイコロの数を選択して、結果を 3D ベクトル配列に格納できる「バトル」の練習コードを作成しました。ストレージ部分は機能しています。ただし、 printResult() 関数は失敗し ( main() の前に // を置きました)、 srand() も機能しません。便宜上、完全なプログラムを以下に示します。
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <ctime>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
class Combat{
private:
int numberOfRounds;
int numberOfCombatants;
int numberOfRolls;
int sidesDie;
vector <int> rollz;
vector <vector <int> >combatant;
vector <vector <vector <int> > > round;
public:
void printMenu();
void battle();
void printResult();
Combat(int, int , int, int );
Combat(int );
Combat();
int roll();
int roll(int die);
};
void Combat::printMenu()
{
cout<<setw (10)<<"Welcome to the Combat Menu";
cout<<'\n'<<setw (10)<<"Choose:";
cout<<'\n'<<setw (10)<<"Number of combatants: ";
cin>>numberOfCombatants;
cout<<'\n'<<setw (10)<<"Die sides:";
cin>>sidesDie;
cout<<'\n'<<setw (10)<<"Enter number of rounds: ";
cin>>numberOfRounds;
cout<<setw(10)<<"Enter number of rolls (per combatant per round):";
cin>>numberOfRolls;
}
Combat::Combat(){
numberOfRounds=8;
}
Combat::Combat(int x){
x=numberOfRounds;
}
Combat::Combat(int rnds,int cmb,int rll, int sides){
numberOfRounds=rnds;
numberOfCombatants=cmb;
numberOfRolls=rll;
sidesDie=sides;
}
int Combat::roll(int die)
{
die=sidesDie;
srand(time(0));
int r=(1+rand()%die);
return r;
}
int Combat::roll(){
srand(time(0));
int r=(1+rand()%6);
return r;
}
void Combat::battle(){
cout<<setw(10)<<" Computing results of battle ...\n";
int i,j,k;
for (i=0;i<numberOfRounds;++i){
cout<<"\nRound number "<<i+1;
round.push_back(combatant);
for(j=0;j<numberOfCombatants;++j){
cout<<"\nCombatant number "<<j+1;
combatant.push_back(rollz);
cout<<endl;
for(k=0;k<numberOfRolls;++k){
rollz.push_back(roll(sidesDie));
cout<<rollz.at(k)<<'\t';
}
}
cout<<endl<<endl;
}
cout<<endl;
}
void Combat::printResult(){
cout<<endl;
vector< vector <vector<int> > >::const_iterator it1;
int combt, counter=0;
for (it1=round.begin();it1 !=round.end();++it1){
++counter;
cout<<"\nRound number "<<counter<<endl;
for(vector<vector<int> >::const_iterator it2=combatant.begin();it2!=combatant.end();++it2){
++combt;
cout<<"\nCombatant "<<combt<<" hits ";
for(vector<int>::const_iterator it3=rollz.begin();it3!=rollz.end();++it3){
cout<<*it3<<'\t';
}
}
}
}
int main ()
{
Combat fight;
fight.printMenu();
fight.battle();
//fight.printResult();
cout<<endl;
}