请帮我看看这个逻辑是否有问题

我在写抢地主的部分
但是这个逻辑好像有些问题,每次进入界面之后会一直刷新

int dealCards::dealLord(ExMessage msg) {

    settextstyle(25, 0, "楷体");
    srand((int)time(0));


    //先从一个随机的人开始,如果是玩家就问要不要叫地主,如果是bot就随机一个数得到叫与不叫
    //然后逆时针依次询问,没有人当地主时重新进入界面发牌,只有一人叫时直接成为地主,两人及以上叫时进入第二轮
    //第二轮开始时叫地主的那个如果继续抢地主那么直接成为地主,否则后一个抢地主的人成为地主
    int turn = 1;
    bool isLord[3] = { false };
    int player[3] = { 0,1,2 }; //0是玩家,1是右bot,2是左bot
    int curPlayer = rand() % 3;
    int isBot[2] = { rand() % 2 };
    int numLord = 0;//抢地主的人数
    int firstPlayer = curPlayer;
    for (int i = 0; i < 3 && turn == 1; i++, curPlayer++) {
        if (curPlayer == 0) {//如果第一个是玩家
            if (button(msg, 452, 418, 100, 38, NULL, NULL, WHITE, NULL, "叫地主")) {
                isLord[0] = true;
                numLord++;
                //叫地主.mp3
            }
            if (button(msg, 729, 418, 100, 38, NULL, NULL, WHITE, NULL, "不叫")) {
                //不叫.mp3
                isLord[0] = false;

            }
        }
        else {//如果不是玩家
            if (curPlayer == 1 && isBot[0]) {
                isLord[1] = true;
                numLord++;

            }
            if (curPlayer == 2 && isBot[1]) {
                isLord[2] = true;
                numLord++;
            }
        }
    }

    if (numLord == 0) {
        return -1;
    }
    if (numLord == 1) {
        for (int i = 0; i < 3; i++)
        {
            if (isLord[i] == true)
            {

                return i;
            }
        }
    }
    if (numLord == 2) {
        turn = 2;
        for (int i = 0; i < 3; i++)isLord[i] = false;
        if (firstPlayer == 0) {
            if (button(msg, 452, 418, 100, 38, NULL, NULL, WHITE, NULL, "抢地主")) {

                return 0;
                //抢地主.mp3
            }
            if (button(msg, 729, 418, 100, 38, NULL, NULL, WHITE, NULL, "不抢")) {

                //不抢.mp3
            }
        }
        else {
            if (firstPlayer == 1 && isBot[0]) {
                return 1;
            }
            if (firstPlayer == 2 && isBot[1]) {
                return 2;
            }
        }
    }
}
void dealCards::addCard(int i) {
    //传入的i:0是玩家,1是右bot,2是左bot
    if (!lordFinish) {
        if (i == -1) {
            curView = new gameingView;
        }
        if (i == 0) {
            player1[17] = landlord[0];
            player1[18] = landlord[1];
            player1[19] = landlord[2];
        }
        if (i == 1) {
            player2[17] = landlord[0];
            player2[18] = landlord[1];
            player2[19] = landlord[2];
        }
        if (i == 2) {
            player3[17] = landlord[0];
            player3[18] = landlord[1];
            player3[19] = landlord[2];
        }
        
    }
lordFinish = true;
}

//gamingView.cpp中的调用,lordFinish为全局变量初始为false
static dealCards a;
     
a.addCard(a.dealLord(msg));

在 addCard() 函数中增加 lordFinish 的判断,只在第一次调用时选择地主,后续直接使用上一次的选择结果。这样就可以避免界面刷新问题。


```c++
std::string callLord[2] = {"叫地主", "不叫"};
std::string robLord[2] = {"抢地主", "不抢"};

int dealCards::dealLord(ExMessage msg) {
    if (lordFinish) return lord;  //如果已经选择过地主,直接返回

    // 选择地主逻辑...
    
    lordFinish = true;  //选择地主后,更新标志位
    return lord;
}

void dealCards::addCard(int i) {
    if (!lordFinish) {  //只有第一次调用时选择地主
        lord = dealLord(msg);
    }
    // 添加地主牌...
} 

```

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^