在方法C ++中更改结构变量

时间:2015-11-13 19:24:09

标签: c++ artificial-intelligence

所以我为我的AI课程制作了一个C ++ Checkers游戏。我遇到了一些让我疯狂的打嗝,每个对手都是一个包含方向的结构:bool left;布尔右;当我尝试将其中一个值更改为true时,它似乎不会发生变化。这似乎是一个范围问题,但我不知道为什么,我通过使用vs调试工具跟着它。以下是一些代码:

     typedef struct {
        int pos;
        int num;
        bool left;
        bool right;
    }opp;
    int scoreOp(opp o){

        if (scoreMoveOp(o.pos + 7) == 10){
            o.left = true;
            return 10;
        }
        else if (scoreMoveOp(o.pos + 9) == 10){
            o.right = true;

            return 10;
        }

    int scoreOp(opp o){

        if (scoreMoveOp(o.pos + 7) == 10){ //scoreMoveOp essentially returns ten.
            o.left = true;
            return 10;
        }
        else if (scoreMoveOp(o.pos + 9) == 10){
            o.right = true;

            return 10;
        }

并且全部被称为:

    void checkOPPListForX(){
        for (int i = 0; i < O1Moves.size(); i++){
            if (X == O1Moves[i].second){
                //cout << "O1 has it, and its score is: " << scoreOp(O1) << endl;
                O1Score = scoreOp(O1);
                O1Check = true;
            }
            else O1Check = false;
        }

    checkOPPListForX();
            if (O1Score > O2Score && O1Score > O3Score && O1Score > O4Score){
                //move O1;
                //O1.pos
                if (O1.left)
                    O1.pos = O1.pos + 7;
                else if (O1.right)
                    O1.pos = O1.pos + 9;
            }

2 个答案:

答案 0 :(得分:2)

您通过值将变量传递给icon.replaceProps函数,这意味着该函数获得了一个副本。修改副本当然不会修改原件。

您需要通过引用传递参数

scoreOp

答案 1 :(得分:0)

最简单的方法是将你的函数放在struct中:

typedef struct {
    int pos;
    int num;
    bool left;
    bool right;
    int scoreOp() {.....}
}opp;

然后你可以用opp.ScoreOp()

来调用它

如果您通过引用传递

,那么这个解决方案就不太适合了