我正在为iPhone的Swift中构建一个人和电脑玩家的投注功能。我为投注过程启动一个while循环,迭代每个玩家。如果是电脑玩家,则调用自动投注功能。如果是人类玩家,我想取消隐藏动作按钮(下注、检查、弃牌等),并在继续进入下注while循环之前等待来自用户的输入。(下面的简化代码)由于某种原因,取消隐藏按钮从未执行,即使在unhide之后的print语句成功打印。同时,while循环似乎跳过了在继续之前等待用户输入。什么是“正确”的方式来组织这一点,以实现我想做的事情?
感谢您的任何帮助/见解。
listOfPlayers = [computer1, player1, computer2]
while !bettingRoundComplete {
for player in listOfPlayers {
if player == computer1 {
autoBet()
}
if player == player1 {
betButton.isHidden = false
checkButton.isHidden = false
var playerFinishedTurn = false
while !playerFinishedTurn {
// wait for player to enter input via buttons (which should be unhidden but are not)
// do some things with input
// flip playerFinishedTurn flag to true
}
if player == computer2 {
autoBet()
}
// if bettingRoundComplete, exit loop (global variable flag triggered within betting functions that are called during while loop execution)
}
}
1条答案
按热度按时间5sxhfpxr1#
你对事件驱动的应用程序的工作原理有一个基本的误解。你的应用程序会收到一个事件的通知,比如一个用户操作,运行你的代码来响应这个操作,然后返回并等待其他事情发生。你不能有一个等待用户操作的while循环,因为当你是while循环时,你不会让用户响应。你需要重构你的代码,使其像一个状态机一样,进入“收集用户输入”状态。模式。