我一直在尝试用Qt在C++中制作一个GUI 21点游戏。然而,我在路上遇到了一个路障。我去年用纯C++制作了这个游戏和游戏逻辑(链接如下(。我正在尝试使用相同的代码来构建游戏Github/Blacket的GUI版本。
这主要是为了让我的牌出现,加上这些牌的值、发牌人和玩家的设置。
在C++版本中,我制作了一个所有玩家的向量,并在其末尾添加了经销商,然后使用for循环,我会迭代玩家,让他们玩。
在Qt中,我创建了一个带有两个按钮的小部件";点击";以及";支架";用于玩家控制。"点击";按钮很简单,将按钮的点击事件与玩家的点击成员功能连接起来。
ctrl = new PlayerControl(nullptr, mainPlayer);
connect(ctrl->ui->hitButton, &QPushButton::clicked, [mainPlayer]{
mainPlayer->hit();
});
用于迭代矢量的代码:
for (size_t i = 0; i < players.size(); i++)
{
if (i == playerPos - 1)
{
ctrl->setVisible(true);
//how to make the loop to pause here until the user presses the
//"Stand button", and then proceed with the rest of the loop?
}
else if (i == players.size() - 1)
dealerPlay();
else
computerPlay(players[i]);
}
我真的很感激你的帮助
我真的不明白你展示的代码,也不明白它与你文章标题中的问题有什么关系。我只回答这个问题,它是:
如何在按下按钮之前进行for循环
答案是您可能不想这样做,因为这将涉及多线程或某种复杂的并发机制。在编写GUI时,应用程序的主线程通常处于一个循环中,等待来自操作系统的事件消息(如单击和按键(。当它收到这样的消息时,它应该快速处理它们,然后返回等待下一条消息。
在Qt中,您可以通过重写QMainWindow类中的函数或将Qt信号连接到插槽来处理这些事件。
因此,与其让循环遍历每个玩家并等待他们移动,不如让一些长期存在的变量来跟踪游戏的状态,当你检测到玩家移动时(即点击按钮(,你会更新这些变量,更新屏幕上显示的任何数据,然后从事件处理程序返回,以便处理下一个事件。