LoginSignup
1
2

More than 5 years have passed since last update.

テトリスをつくってみました 説明7  ディプコピーはどうやるの?tetris2.js

Last updated at Posted at 2016-01-01

blockGenerate関数
グローバル変数playerBlockオブジェクトに対し、ランダムにブロックをセットします。




function blockGenerate () {
    var i = Math.floor ((Math.random() *10 )% SHAPES.length );
    var CopyOfROTATE_CHANGE = deepCopy ( ROTATE_CHANGE) ;
    playerBlock.rotatePattern = CopyOfROTATE_CHANGE [ COLOR [ i ] ];
    var CopyOfTETRIS_BLOCK = deepCopy ( TETRIS_BLOCK [i ] );

    //tweak: make one time rotation
    var itsShapes = playerBlock.rotatePattern.shift();
    playerBlock.rotatePattern.push (itsShapes );

    return CopyOfTETRIS_BLOCK;  // if it isn't copy but original, occurs bug.
                                                                //start block got wrong shape
}


    var CopyOfROTATE_CHANGE = deepCopy ( ROTATE_CHANGE) ;

ROTATE_CHANGEオブジェクトをディープコピーしています。objCopy_lib.jsに書いてある関数です。

shallow(シャロウ:「浅い」の意味)コピーと、deepディープコピーがあります。

おそらく、
shallow:値の場合、値をコピー。
参照なら参照をコピー(参照をたどらない)

deepcopy:値の場合、値をコピー。
参照なら参照をたどる。ずっとたどり、値に行き着くまでたどり、最後値をコピー

これが定義と思います。

コピーには、objCopy_lib.js を使ってください。どこかでパクったものですけどね。(deepcopy関数のコードはよくわかってません。どなたか説明求む)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2