我在写抢地主的部分
但是这个逻辑好像有些问题,每次进入界面之后会一直刷新
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);
}
// 添加地主牌...
}
```
不知道你这个问题是否已经解决, 如果还没有解决的话:很抱歉,由于缺乏具体的代码和页面信息,无法准确判断抢地主部分逻辑是否存在问题。请您检查以下几点,以确定问题出在哪里:
请检查页面的代码、CSS和JavaScript等是否存在错误或死循环等问题。可以使用浏览器的开发者工具进行检查和调试。
请检查抢地主部分代码中的逻辑是否正确,是否存在死循环或逻辑错误等问题。
请确认您的网络连接是否正常,是否存在网络延迟,导致页面一直在刷新。
如果您遇到了具体的问题,请将相关代码和调试信息提供给我,我可以帮您进一步排查和解决。