Swift教程之控制流详解

2020-01-08 22:47:32王旭

复制代码  
var square = 0
var diceRoll = 0
while square < finalSquare {
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
}
println("Game over!")

 

这个例子用到了一个非常简单的掷骰子的方式,就是每次加1,而不是使用一个随机数。diceRoll用来表示每次行走的步数,需要注意的是,每次执行前,++diceRoll都会先执行加1,然后再与7比较,如果等于7的话,就设置为1,因此可以看出diceRoll的变化是1,2,3,4,5,6,1……

在掷骰子之后,玩家移动diceRoll指示的步数,这时可能已经超过了finalSquare,因此需要进行if判断,如果为true的话,执行该格子上的事件:如果是普通格子就不动,如果是梯子或者蛇就移动相应的步数,这里只需要直接使用square += board[square]就可以了。

在while循环执行完毕之后,重新检查条件square < finalSquare是否成立,继续游戏直到游戏结束。

Do-while循环

另一种while循环是do-while循环。在这种循环中,循环体中的语句会先被执行一次,然后才开始检测循环条件是否满足,下面是do-while循环的一般形式:

 

复制代码  
do {
statements
} while condition

 

上面的蛇与梯子的游戏使用do-while循环来写可以这样完成。初始化语句和while循环的类似:

 

复制代码
let finalSquare = 25
var board = Int[](count: finalSquare + 1, repeatedValue: 0)
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

 

在这种循环中,第一个动作就是检测是否落在梯子或者蛇上,因为没有梯子或者蛇可以让玩家直接到达第25格,所以游戏不会直接结束,接下来的过程就和上面的while循环类似了,循环的条件语句还是检测是否已经达到最终格子。

 

复制代码