javascriptでテトリスの作り方を勉強しています。
サンプルコードを見つけ、写経しながら理解に努めているのですが、どうも理解できない箇所があります。
javascript
1function rotate( current ) { 2 var newCurrent = []; 3 for ( var y = 0; y < 4; ++y ) { 4 newCurrent[ y ] = []; 5 for ( var x = 0; x < 4; ++x ) { 6 newCurrent[ y ][ x ] = current[ 3 - x ][ y ]; 7 } 8 } 9 return newCurrent; 10}
上記4行目のnewCurrent[ y ] = [];という箇所です。
newCurrent[ y ]に空の配列を代入する必要はなぜあるのでしょうか?
ご教授よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
ループ処理がどのように行われるか、実際に値を代入し処理を追ってみると分かりやすいと思います。僕も分からなくなった時は、「順番にプロセスを追ってみる」事で理解できる事がよくあります。
js
1var newCurrent = []; 2 3for ( var y = 0; y < 4; ++y ) { 4 newCurrent[ y ] = []; 5 6 7 ----- y = 0 ------------------------------ 8 newCurrent[0] = [] 9 10 newCurrent = [ 11 [] 12 ] 13 -------------------------------------------- 14 | 15 | 16 V 17 18 for ( var x = 0; x < 4; ++x ) { 19 newCurrent[ y ][ x ] = current[ 3 - x ][ y ]; 20 21 22 ----- y = 0, x = 0 --------------------------------------------- 23 newCurrent[0][0] = current[3][0] | 24 | 25 newCurrent = [ | 26 [n1] | 27 ] y = 0, x = 0 28 | 29 {{ current[3][0]が 恐らく数値だと思われるため、 | 30 ある数値をn1と表記して代入 }} | 31 V 32 ----- y = 0, x = 1 --------------------------------------------- 33 newCurrent[0][1] = current[2][0] | 34 | 35 newCurrent = [ | 36 [n1, n2] y = 0, x = 1 37 ] | 38 V 39 ----- y = 0, x = 2 --------------------------------------------- 40 | 41 ... y = 0, x = 2 42 | 43 V 44 45 ----- y = 0, x = 3 --------------------------------------------- 46 | 47 ... y = 0, x = 3 48 | 49 V 50 . . . . .. . . . .. . . . .. . . . .. . . . . 51 52 {{ 処理の流れ }} 53 → 外ループ y = 0 54 → 内ループ y = 0, x = 0→1→2→3 55 → 外ループ y = 1 56 → 内ループ y = 1, x = 0→1→2→3 57 58 --------------------------------------------------------------------- 59 60 } 61 } 62 63 -------------------------------- 64 newCurrent = [ 65 [n1, n2, n3, n4] 66 [o1, o2, o3, o4] 67 [p1, p2, p3, p4] 68 [q1, q2, q3, q4] 69 ] 70 -------------------------------- 71 72 73 74 75 return newCurrent; 76}
投稿2019/06/12 04:48
編集2019/06/12 05:03退会済みユーザー
総合スコア0
0
JavaScript
1newCurrent[ y ] = [];
この行をコメントアウトした場合、開発者ツールのコンソールで下記行のエラーを確認出来ます。
https://www.google.com/search?q=chrome+developer+tools
JavaScript
1newCurrent[ y ][ x ] = current[ 3 - x ][ y ];
代入しなかった場合、newCurrent[ y ]
の値は何になるかを確認してみましょう。
JavaScript
1console.log(newCurrent[ y ]);
プロパティに代入し、その値を保存するには、対象が「Object型」てある必要があります。
Re: k373 さん
投稿2019/06/11 09:44
総合スコア18166
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
js
1var newCurrent = [];
がどの過程で2次元配列に変わるのか考えてみましょう
投稿2019/06/11 09:22
総合スコア2826
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/12 16:39
退会済みユーザー
2019/06/13 04:13