while
известен как цикл repeat-while, он выполняет сперва один проход через цикл до вычисления условия цикла. Цикл продолжает повторяться, пока условие не станет ложным.
finalSquare
, board
, square
и diceRoll
инициализированы тем же способом, что и в случае с циклом while
.
let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0
board[0]
всегда равен 0 и не имеет эффектов по перемещению.
diceRoll
. Текущий шаг цикла завершается.
while square < finalSquare
) такое же, как и раньше, но в этот раз оно не будет вычисляться до конца первого шага цикла. Структура цикла repeat-while более подходит для этой игры, нежели цикл while
из предыдущего примера. В цикле repeat-while выше square += board[square]
всегда выполняется сразу после того, как условие цикла while
подтверждает, что square
всё ещё в пределах доски. Это поведение убирает необходимость для проверки границ массива, которое можно увидеть в версии игры с помощью цикла while
, описанной ранее.
repeat {
// переместиться вверх или вниз через змею или лестницу
square += board[square]
// бросить кубик
diceRoll += 1
if diceRoll == 7 {diceRoll = 1}
// сброс значения кубика
square += diceRoll
} while square < finalSquare
print("Game over!")