-1

構造体と 2 つの関数があります。関数の 1 つで構造体を使用してチェックを実行していて、別の関数でその関数を呼び出したいので、その関数で何らかのアクションが実行されると、もう一方がチェックを実行できます。 . オブジェクトボールが上がったとしましょう。別の動きをする前にチェックを実行してください。別の関数で関数を呼び出すことができることは知っていますが、変数 int を使用して他の関数を呼び出す方法で呼び出すことはできません。構造のためだと思います。表示関数でそのチェッカー関数を呼び出すにはどうすればよいですか? 前もって感謝します!

 struct box{
    //code
    };

    void checker(box A, box B, box C, box D, box E, box Q){
    /*Creating struct of type boxes here and statements to cheack if any of the limits between    them   intersect each other*/
    }

    void display(){
    //Displaying the objects here that are inside the structure box to check collision
    }
4

4 に答える 4

1

このような?

void display()
{
    box A, B, C, D, E, Q;
    // ...
    checker(A, B, C, D, E, Q);
    // ...
}
于 2012-11-04T00:13:34.860 に答える
1

引数を渡す方法を知りたいですか?

あなたはC++の初心者のようです。関数について少し読みたいと思うかもしれません。

機能 (I) Cplusplus について

機能② Cplusplusの機能

struct box{
//code
}; //forgot semicolon

void checker(box A, box B, box C, box D, box E, box Q){
//code
}

void display() //forgot parenthesis 
{
    box A, B, C, D, E, Q;

    //initialize and use variables.

    //call function...
    checker(A, B, C, D, E, Q);
}

あなたが何を求めているのか正確に伝えるのは難しいです。

アイデア。

たぶん、あなたはこのようなものが欲しいかもしれません(ここで大げさな推測をしています。ほとんどの場合、1つのシナリオを示しているだけです.):

class Box
{
//code
};

class GameState
{
    public:
        GameState(map<std::string, Box> _boxes);
        void display();
        void moveBox(std::string boxID, int x, int y);
    private:
        bool checkMove(std::string boxID, int x, int y);

        std::map<std::string, Box> boxes;
};

void mainLoop()
{
    map<string, Box> boxes;
    boxes["A"] = Box();
    boxes["B"] = Box();
    boxes["C"] = Box();
    boxes["D"] = Box();
    boxes["E"] = Box();
    boxes["Q"] = Box();

    bool quit = false;
    GameState game(boxes);

    while(true)
    {
        int action = game.getAction();

        switch(action)
        {
            case DISPLAY_ACTION:
                game.display();
                break;
            case MOVE_ACTION:
                string boxId;
                int x, y; 
                //get those somehow...

                game.moveBox(boxId, x, y);
                break;
            case QUIT;
                quit = true;
                break;
        }
        if (quit)
            break;
    }
}

int GameState::getAction(box& aBox)
{
    //return some action code
}

bool GameState::checkMove(string boxId, int x, y)
{
    //check box
}

void GameState::display()
{

}

void GameState::moveBox(string boxId, int x, int y)
{
    if (checkMove(boxId, x, y))
    {
        //more code
    }
}
于 2012-11-04T00:14:43.103 に答える
0

あなたの質問をもっと明確にする必要があります。しかし、文脈から、次のことをしようとしていることを示唆しています:

  1. オブジェクトのセットを含むゲームがあります。
  2. 各オブジェクトは、この構造体によって表されます。

    struct box { };
    
  3. ゲームの状態 (レイアウト) を表示する表示機能があります。

  4. 表示する前に衝突があるかどうかを確認したい。

上記が達成しようとしているものである場合、次のコードでうまくいく可能性があります。

class Game {
public:
  Game() {} // Initialize your box objects here
  ~Game() {}

  void display() {
    // Your code
    checker(a_, b_); // Check here
    // Display code
  }

private:
  struct Box {
    // box state data
  };

  Box a_;
  Box b_;
  // ... etc.

  void checker(const Box& a, const Box& b) const {
    // Do your check here
    // I used const here assuming your checker has no side effects 
  }

};
于 2012-11-04T01:05:44.940 に答える
0

まず、表示関数のプロトタイプにパラメーターがありません。

void display(/* parameters here if needed */) {
//I want to call the void checker here
}

あなたの質問について、関数を呼び出すことは些細なことです。たとえば、パラメータのない表示関数を使用すると、次のようになります。

void display() {
    // have some boxes defined here
    Box ba,bb,bc,bd,be,bq;
    // here we have some code related to the boxes
    // (...)
    // (...)
    // and now we call the function checker
    checker(ba,bb,bc,cd,be,bq);
}

checkerただし、 でボックスのコンテンツを作成し、 で表示することも必要なようですdisplayこれを行うには、 Box オブジェクトを参照によってに渡す必要があります。これによりchecker、その関数によって行われた変更は、関数が終了したときに保持されます。

したがって、チェッカーのプロトタイプを次のように変更する必要があります。

void checker(box &A, box &B, box &C, box &D, box &E, box &Q){
   /* your function body here */
}
于 2012-11-04T00:16:56.627 に答える