投稿

8月, 2015の投稿を表示しています

2次元配列のコピー::JavaScript

配列の中身のコピーは.slice()を使えば出来る。 しかし、2次元配列など、配列の中身が配列の時は、参照がコピーされてしまう。 例えば、 var array = new Array(3); var copied = new Array(3); for(i=0;i<3;i++){ array[i] = new Array(3); copied[i] = new Array(3); for(j=0;j<3;j++){ array[i][j] = 0; copied[i][j] = 0; } } copied = array.slice(); console.log("before array:",array[0][0]); copied[0][0] = 1; console.log("after array:",array[0][0]); console.log("before copied:",copied[0][0]); array[0][0] = 2; console.log("after copied:",copied[0][0]); というようにすると、一方の配列を書き換えるともう一方も変わってしまう。(と言うより同じものを参照している) before array: 0 after array: 1 before copied: 1 after copied: 2 ので、 var array = new Array(3); var copied = new Array(3); for(i=0;i<3;i++){ array[i] = new Array(3); copied[i] = new Array(3); for(j=0;j<3;j++){ array[i][j] = 0; copied[i][j] = 0; } } for(i=0;i<3;i++){ copied[i] = array[i].slice(); } console.log("before array:"

JavaScriptでライフゲームを作ってみた

Move Stop Reset クリックでパターンを作れます。 JavaScriptを始めてから5時間くらいで作れました。 練習用の課題としてライフゲームの実装はとても適してるのではないでしょうか。 BloggerでJavaScript貼り付ければ動いてくれるのは便利です。 自動セミコロン挿入は驚きましたが、気にせずセミコロンを書けばいいことがわかったので問題ありませんでした。 ブロックスコープじゃないのも戸惑いました。こっちはまだちゃんと理解できてないのではないかと思います。 参考にしたサイト とほほのJavaScriptリファレンス 初めてのHTML5ゲーム作成 JavaScript のスコープを理解する-tacamy.blog JavaScriptの自動セミコロン挿入-本の虫 http://noidgames.web.fc2.com/lifegame.html 一応コードも貼っておきます。 <style type="text/css"> #canvas1 { display: block; width:320px; background-color:black; } </style> <script type="text/javascript"> //明示的にグローバル変数を宣言 var canvas1; var ctx; var field = new Array(32); // フィールド情報 var isMove = 0; for(i=0;i<field.length;i++){ field[i] = new Array(32); for(j=0;j<field[i].length;j++){ field[i][j] = 0; } } window.onload = function() { canvas1 = document.getElementById('canvas1'); ctx1 = canvas1.getContext('2d'); canvas1.addEventList