Шаблон управления потоком управления для iOS Swift SpriteKit Card Game - PullRequest
0 голосов
/ 12 февраля 2019

Я делаю карточную игру в Swift для iOS, используя SpriteKit, и мне было интересно, какой будет рекомендуемый шаблон проектирования для управления потоком.

Есть 4 игрока, один из которых - пользователь идругие 3 - ИИ.В игре есть ряд ходов, и в течение каждого хода мне нужно пару раз перебирать каждого игрока.

Для ходов ИИ-игрока мне бы хотелось, чтобы была искусственная задержка для симуляции "думать ", прежде чем они принимают свои решения.

Для пользователя, я хотел бы иметь всплывающее окно / предупреждение и ждать, пока пользователь сделает выбор, прежде чем продолжить.

В псевдо-код может выглядеть следующим образом:

func playGame() {
    while !gameOver() {
        // start a turn
        for currentPlayer in players {
            if currentPlayer == user {
                waitForInput()
                processInput()
            } else {
                delay(2) {
                    currentPlayer.makeDecision()
                    processDecision()
                }
            }
        }
        // finish a turn, add up scores
        addUpScores()
    }
}

В идеале, я бы хотел, чтобы waitForInput () «приостанавливал» выполнение программы до тех пор, пока пользователь не сделал выбор (то есть не нажал кнопку).Тогда определенные переменные будут установлены в зависимости от того, какая кнопка была нажата.Затем программа продолжится, чтобы позволить другим игрокам принимать свои решения.Я хотел бы, чтобы была искусственная задержка, когда currentPlayer является одной из частей AI моего кода (обозначается функцией задержки)

Кроме того, в то время как функции waitForInput () или delay () ожидают,пользователь все еще может нажать кнопку паузы или выйти из игры, поэтому я не хочу, чтобы что-то полностью блокировало основной поток.

Должен ли я отслеживать состояния игры и затем анализировать их в операторе switch в SpriteKit'sфункция обновления ()?Это кажется немного неэффективным / излишним.Есть ли лучший способ контролировать это?

...