所以我为我的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;
}
答案 0 :(得分:2)
您通过值将变量传递给icon.replaceProps
函数,这意味着该函数获得了一个副本。修改副本当然不会修改原件。
您需要通过引用传递参数 :
scoreOp
答案 1 :(得分:0)
最简单的方法是将你的函数放在struct中:
typedef struct {
int pos;
int num;
bool left;
bool right;
int scoreOp() {.....}
}opp;
然后你可以用opp.ScoreOp()
来调用它如果您通过引用传递
,那么这个解决方案就不太适合了