1

大学のプロジェクトでロボット コントローラを作成する課題があります。現時点では非常にうまくいっていますが、厄介なバグがあり、それを修正できないようです。

基本的に、障害物を避けながらランダムに移動できるように、対照的なコントローラーを設計する必要があります。そのため、コンソールに「R」と表示されるロボットがあり、10 x 10 の領域内にあります。2D ベクトルを初期化し、グリッドを描画するために使用するコードは次のとおりです。

void matrix::init() // init my 2D vector
{
    dot = 10; // 10 by 10 area
    vector2D.resize(dot); 
    for (int i=0; i<dot; i++)
    {
        vector2D[i].resize(dot); 
    }
}

void matrix::draw() // drawing the vector to the screen
{
    for(int i=0; i<dot; i++)
    {
        for(int j=0; j<dot; j++)
        {
            cout <<vector2D[i][j]<<"."; // I being the Y access, J the X access
        }
        cout<<endl;
    }
}

void matrix::update() 
{
    init();
    draw();     
}

これは と呼ばれる独自のクラスmatrix.cppにあり、次に main.cppm.update(); mのオブジェクトとして呼び出されます。matrix

これで、画面上のロボットの位置がmatrix.cppクラス内のこのコードで設定されます

void matrix::robotPosition(int x, int y)
{
    bot = 'R';
    cout << "X Pos"<< x <<endl;
    cout << "Y Pos"<< y <<endl;
    vector2D[x][y] = bot; // Outputting location of robot onto the grid / matrix
}

画面上の位置を制御するために開発したコードは他にもありますが、質問のこの時点では必要ないと思います。

int main()
{
    matrix m;
    robot r;

    while(true)
    {
        m.update(); // vector2D init and draw
        m.robotPosition(r.getX(), r.getY());
        r.update();
        system("pause");
    }
}

プログラムが while ループをループするたびに、別のロボットが画面に描画されますが、古いロボットは削除されないようです。このコードは、 (Which is my Robot) を使用して特定のXおよびYを 2D ベクトルに割り当てることによって機能します。char 'R'各運動サイクルの後に 2D マトリックスを描画する必要があるという私の考えは正しいですか?

ありがとう

4

1 に答える 1

2

最初にロボットの位置を (5,5) に設定すると、 に設定さvector2D[5][5]Rます。次に、位置を (5,6) のように設定vector2D[5][6]すると、 に設定されRます。要素[5][5]と要素の両方[5][6]が に設定されてRいるため、ロボットは両方の位置にあります。

設計方法に応じて、いくつかの解決策があります。

  1. 現在のロボットの位置を、ロボット以外のキャラクタが何であれ、その位置を setmatrixの先頭に保存できます。robotPositionこれにより、新しい位置を設定する前に以前の位置がクリアされます。
  2. 各フレームの開始時にマトリックス全体をクリアできます。各フレームの開始時に呼び出していますupdate。これは、ベクターを既にあるサイズとまったく同じサイズに変更しようとします。これはクリアしません。代わりに、コンストラクターでその作業を行う必要がありinit、関数に変換できclearます。
  3. タイム ステップごとに異なる を使用する場合は、 の宣言をループmatrixに移動する必要があります。次に、構築中にクリアする必要があるフレームごとに1つあります(コンストラクターに物を移動する場合)。matrix m;whileinit
于 2013-12-22T15:53:18.763 に答える