虽然Swift文档中的循环示例

时间:2017-11-26 15:28:51

标签: swift

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
while square < finalSquare {
    // roll the dice
    diceRoll += 1
    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]
    }
}
print("Game over!")

这是while循环的swift文档中的第一个示例。下面详细说明了代码在文档中的作用。 上面的例子使用一种非常简单的方法来进行骰子滚动。它不是生成一个随机数,而是以diceRoll值为0开始。每次通过while循环,diceRoll都会加1,然后检查它是否变得太大。每当此返回值等于7时,骰子滚动变得太大并重置为值1.结果是一系列diceRoll值始终为1,2,3,4,5,6,1,2和等等。

掷骰子后,玩家通过diceRoll方格向前移动。掷骰子可能已经将玩家移动到25以上,在这种情况下游戏结束了。为了应对这种情况,代码检查square是否小于board数组的count属性。 If square is valid, the value stored in board[square] is added to the current square value to move the player up or down any ladders or snakes. 我想知道从我强调的最后一行解释。 board[square]为当前square值增加值是什么?与var square数组相关的board是什么?详细例子在这里。 link

2 个答案:

答案 0 :(得分:0)

square变量代表我们在25块正方形物理板上的位置。 board数组仅表示物理板上的特定方块是否有梯子或其上有滑块。例如。 board[3]+8,它有效地说“有一个方格3的梯子向我们推进另外8个方格到方形11”。

  

所以var squaresquareboard使用的var square不同/我认为Array board <{1}}

的下标成员怎么样?

不,它们是相同的square。所以让我们逐行逐步完成代码。考虑:

var square = 0

这只是声明有一个名为square的变量代表我们在物理游戏板上的位置,其值从零开始(这意味着“游戏尚未开始”)。

因此,让我们按照代码中的逻辑进行操作。您的第一个diceRoll将是1。因此square增加1,最后为1

square += diceRoll

因此,此时square1,有效地表示您的作品已移至实体游戏板的第一个方格。

然后我们检查board数组以查看我们是否落在蛇或梯子上,但是因为board[1]为零,这意味着我们没有,所以在这期间不需要发生任何其他事情骰子的作用。也就是说,这一行在我们的第一次迭代中最终没有做任何事情:

square += board[square]

好的,我们完成了while循环的第一次迭代,所以我们再次循环,这次我们现在滚动diceRoll 2,我们将其添加到{ {1}}再次:

square

所以square += diceRoll 现在是square,表示我们现在是实体游戏板的方块3。所以我们现在再看一下3数组,看看我们是否落在了蛇或梯子上:

board

这一次,square += board[square] board[3](即我们在3号广场的棋子降落在梯子上),所以我们现在将我们的棋子向前移动8个方块到11号方(即+8现在是square)。

答案 1 :(得分:0)

好的,不确定我是否有什么让你感到困惑,但我会尽可能简单地解释一下。

11变量是square,代表玩家登陆的字段

integer数组会保留board个值,这些值将累加到上面integer变量的值上。

square数组中的大多数值都是零(除了选定的少数数组),每当玩家停在一个零值的字段时,什么都不会改变。 board值保持不变。

但是,例如,如果玩家开始游戏并且我们有以下值:

square

玩家现在在11号场上。

在上面的评论中你提到过:

  用于板的var square value和square是不同的/我想   怎样才能成为Array board的var square下标成员

同样,我不完全确定我理解你,但你将变量本身作为下标成员传递,你传递变量的值