-2

それで、私は多かれ少なかれ終わったと思う割り当てを持っていますが、どこかで出力をひどく台無しにしている何かがあり、さらには計算があり、どこに問題があるのか​​ わかりません。

課題は、一定数のプレイヤーがトンネルを通ってスポットに向かって走り、そこで停止してその周りを回転するゲームを作成することです。その後、彼らのめまいにより、ランダムにゴールに向かって前進するか、ゴールに向かって後退することになっていますそして、ゴールに近づくたびに別の「マーキング」を取得し、いずれかがゴールに到達するまでこのように続けます。

このプログラムには、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;
    }

他にも間違いがありましたらご指摘いただけると幸いです。よろしくお願いします。

4

1 に答える 1

0

Competitorオブジェクトを初期化する必要があります -- コンストラクターを追加します。

Competitor::Competitor(void)
{
    direction = 0;
    markedSpots = 0;
}

また、 rand()を呼び出してから、 % 演算子 -- rand()%1+0を使用して「mod」関数を実行します。まず、私たちがここにいる間に、なぜ 0 を足すのですか?

しかし、ここでの大きな問題は、% 1を実行していることです。これにより、1 で割った余りが得られます。もちろん、これは常に 0 になります。

そして、メインのwhileステートメントは終了しません。noWinnerを変更することはありません。

于 2012-10-24T04:56:06.313 に答える