2017-11-26 8 views
-1
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ループの迅速なドキュメントの最初の例です。以下に、ドキュメンテーションのようにコードが何をしているかを説明します。 上記の例では、ダイスローリングに非常に簡単な方法を使用しています。乱数を生成するのではなく、diceRollの値が0で始まります。whileループを繰り返すたびに、diceRollが1だけインクリメントされ、それが大きくなりすぎたかどうかが確認されます。この戻り値が7に等しいときはいつでも、ダイスロールは大きすぎて1の値にリセットされます。結果は、常に1,2,3,4,5,6,1,2,3のdiceRoll値のシーケンスです。そうです。Whileループの例Swiftのマニュアル

ダイスを転がした後、プレーヤーはdiceRollスクエアで前方に移動します。サイコロがプレイヤーを正方形25を超えて移動させた可能性があります。その場合、ゲームは終了します。このシナリオに対処するために、コードはsquareがボード配列の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. 私が強調している最後の行の説明からそれを知りたい。現在squareの値に値を追加しているのはboard[square]なのですか? boardに関連するvar squareはありますか?詳細な例はこちら。 link

+0

'square'は、' board'配列から特定の要素を取り出すためのインデックスです。 –

+0

@DávidPásztor 'board 'に使われている' var square 'の値と' square'は違う/ 'Array board 'の' var square' – Tanzz

答えて

0

square変数は、25個の四角で物理ボード上のどこにあるかを表します。 boardアレイは、物理ボード上の特定の四角形にその上にはしごがあるのか​​、それともスライドがあるのか​​を表すだけです。例えば。 board[3]+8であり、「正方形3からのはしごがあり、8つの追加の正方形が11角形に進む」と効果的に言います。

はそうboardで使用var square値とsquareは、私はありません、彼らは同じsquareあるArray board

var square添字メンバーにすることができますどのように考え/異なっています。では、コードを1行ずつ進めてみましょう。考えてみましょう:単に私たちは、その値(「ゲームがまだ開始されていない」を意味する)ゼロから始まる物理的なゲームボード、上にある場所を表しsquareという変数があることを宣言し

var square = 0 

を。

コード内のロジックに従ってみましょう。最初のdiceRoll1になります。だから、square1で終わる、1だけインクリメントさ:

square += diceRoll 

ので、この時点でsquareが効果的にあなたの部分は、物理的なゲームボード上の最初の正方形に移動したことを示す、1です。

boardの配列を調べて、ヘビやラダーに着いたかどうかを確認しますが、board[1]はゼロであるため、私たちはそうしなかったことを意味します。私。、このラインは、私たちの最初の反復に何もしない終わる:

square += board[square] 

OK、我々はwhileループの最初の繰り返しで行われているので、我々は再びループと今回我々は今2diceRollをロール、どの我々は再びsquareに追加します。

square += diceRoll 

のでsquareは、我々は物理的なゲームボードの正方形の3の今していることを示す、今3です。だから我々は今、我々はヘビやはしごに着陸したかどうかを確認するために再びboard配列を見て:

square += board[square] 

この時間は、board[3]は(すなわち、正方形3で私たちの作品は、はしごに着陸した)+8あるので、私たちは今、私たちを移動します前方8個の正方形を正方形11にします(つまり、square11です)。

0

あなたが混乱しているかどうかはわかりませんが、できる限り簡単に説明しようとします。

square変数は、プレーヤーがになったフィールドを表すintegerです。

アレイは、上記のsquareの値に合計されるintegerの値を保持します。

boardの値の大部分はゼロです(選択された数を除いて)。値がゼロのフィールドで停止すると、何も変わりません。 squareの値は変わりません。

しかし、例えば

、プレイヤーがゲームを開始し、我々は次の値を持っている場合:

square = 1 
diceRoll = 2 

square += diceRoll //square is now 3 
if square < board.count {    
    //board[square] == board[3] == +8 
    square += board[square]  
    //square is now 11 
} 

あなたが言及した上で、プレイヤーがコメントではフィールド番号11

されるようになりましたが。

ボードで使用

VAR二乗値と四角は、私はアレイボードのVAR平方添字メンバーがいかに を考えた/違う

は再び、私はあなたを理解していることを完全にわからないんだけど、あなたは変数の値を渡している、添字メンバーとして変数自体を渡していないです。