それで、私は多かれ少なかれ終わったと思う割り当てを持っていますが、どこかで出力をひどく台無しにしている何かがあり、さらには計算があり、どこに問題があるのか わかりません。
課題は、一定数のプレイヤーがトンネルを通ってスポットに向かって走り、そこで停止してその周りを回転するゲームを作成することです。その後、彼らのめまいにより、ランダムにゴールに向かって前進するか、ゴールに向かって後退することになっていますそして、ゴールに近づくたびに別の「マーキング」を取得し、いずれかがゴールに到達するまでこのように続けます。
このプログラムには、main.cpp、ヘッダー ファイル、および cpp ファイルの 3 つのファイルが含まれています。
ヘッダー ファイル:
#ifndef COMPETITOR_H
#define COMPETITOR_H
#include <string>
using namespace std;
class Competitor
{
public:
void setName();
string getName();
void spin();
void move();
int checkScore();
void printResult();
private:
string name;
int direction;
int markedSpots;
};
#endif // COMPETITOR_H
2 番目の cpp ファイル:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include "Competitor.h"
using namespace std;
void Competitor::setName()
{
cin>>name;
}
string Competitor::getName()
{
return name;
}
void Competitor::spin()
{
srand(time(NULL));
direction = rand()%1+0;
}
void Competitor::move()
{
if(direction == 1)
{
markedSpots++;
}
else if(direction == 0 && markedSpots != 0)
{
markedSpots--;
}
}
int Competitor::checkScore()
{
return markedSpots;
}
void Competitor::printResult()
{
if(direction == 1)
{
cout<<" is heading towards goal and has currently "<<markedSpots<<" markings.";
}
else if(direction == 0)
{
cout<<"\n"<<getName()<<" is heading towards start and has currently "<<markedSpots<<" markings.";
}
}
メインの cpp ファイル:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include "Competitor.h"
using namespace std;
void inputAndSetNames(Competitor comps[],int nrOfComps);
void makeTwist(Competitor comps[],int nrOfComps);
void makeMove(Competitor comps[],int nrOfComps);
void showAll(Competitor comps[],int nrOfComps);
int winner(Competitor comps[],int nrOfComps, int nrOfTwistPlaces);
int main()
{
int nrOfTwistPlaces;
int nrOfComps;
int noWinner = -1;
int laps = 0;
cout<<"How many spinning places should there be? ";
cin>>nrOfTwistPlaces;
cout<<"How many competitors should there be? ";
cin>>nrOfComps;
Competitor * comps = new Competitor[nrOfComps];
inputAndSetNames(comps, nrOfComps);
do
{
laps++;
cout<<"\nSpin "<<laps<<":";
makeTwist(comps, nrOfComps);
makeMove(comps, nrOfComps);
showAll(comps, nrOfComps);
}while(noWinner == -1);
delete [] comps;
return 0;
}
void inputAndSetNames(Competitor comps[],int nrOfComps)
{
cout<<"Type in the names of the "<<nrOfComps<<" competitors:\n";
for(int i=0;i<nrOfComps;i++)
{
comps[i].setName();
}
cout<<"\n";
}
void makeTwist(Competitor comps[],int nrOfComps)
{
for(int i=0;i<nrOfComps;i++)
{
comps[i].spin();
}
}
void makeMove(Competitor comps[],int nrOfComps)
{
for(int i=0;i<nrOfComps;i++)
{
comps[i].move();
}
}
void showAll(Competitor comps[],int nrOfComps)
{
for(int i=0;i<nrOfComps;i++)
{
comps[i].printResult();
}
cout<<"\n\n";
system("pause");
}
int winner(Competitor comps[],int nrOfComps, int nrOfTwistPlaces)
{
int end = 0;
int score = 0;
for(int i=0;i<nrOfComps;i++)
{
score = comps[i].checkScore();
if(score == nrOfTwistPlaces)
{
end = 1;
}
else end = -1;
}
return end;
}
他にも間違いがありましたらご指摘いただけると幸いです。よろしくお願いします。