🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1128閲覧

Javascriptの「二次元配列」と「ループ」の組み合わせ方を教えて下さい

gatolife

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/02/07 08:26

僕はいま、ブロック崩しゲームを作ろうとしています。
そのため、二次元配列とループを組み合わせてブロックを表示させようとしているのですが、
Cannot set property '0' of undefined (sketch: line 42)
というエラーが出てしまっています…
どうやら、配列の宣言方法を間違えたか、値の代入方法を間違えてしまったようです。
https://www.javadrive.jp/javascript/array/index5.html 
このサイトを確認したのですが、どこが間違っているのかわかりません…

javascript

1var countX; 2var countY; 3let blx = [ 4 [], 5 [] 6]; 7let bly = [ 8 [], 9 [] 10]; 11let blwidth = [ 12 [], 13 [] 14]; 15let blheight = [ 16 [], 17 [] 18]; 19let c; 20 21// プレイヤー用 22var px; 23var py; 24var pwidth; 25var pheight; 26var bx; 27var by; 28var bsize; 29var xbs; 30var ybs; 31 32 33function setup() { 34 createCanvas(600, 400); 35 // ブロック用 36 countX = 30; 37 countY = 10; 38 for (var i = 0; i < countX; i++) { 39 for (var j = 0; j < countY; j++) { 40 41 blx[i][j] = 20 * i; 42 bly[i][j] = 20 * j; 43 blwidth[i][j] = 20; 44 blheight[i][j] = 20; 45 } 46 } 47 48 49 // プレイヤー用 50 py = 350; 51 pwidth = 75; 52 pheight = 10; 53 bx = width / 2; 54 by = 330; 55 bsize = 15; 56 xbs = 4; 57 ybs = 4; 58 for (var i = 0; i < countX; i++) { 59 for (var j = 0; j < countY; j++) { 60 c = color(random(256), random(256), random(256)); 61 pc = color(random(256), random(256), random(256)); 62 } 63 } 64 65} 66 67function draw() { 68 background(0); 69 70 // ブロック用 71 for (var i = 0; i < countX; i++) { 72 for (var j = 0; j < countY; j++) { 73 stroke(0); 74 fill(c); 75 rect(blx[i][j], bly[i][j], blwidth[i][j], blheight[i][j]); 76 } 77 } 78 // プレイヤー用 79 px = mouseX - 75 / 2; 80 81 if (px < 0) { 82 px = 0; 83 } 84 if (px > width - pwidth) { 85 px = width - pwidth; 86 } 87 fill(pc); 88 rect(px, py, pwidth, pheight); 89 90 noStroke(); 91 fill(pc); 92 circle(bx, by, bsize); 93 94 bx += xbs; 95 by -= ybs; 96 if (bx < bsize / 2 || bx > width - bsize / 2) { 97 xbs *= -1; 98 } 99 if (by < bsize / 2 || by > height - bsize / 2) { 100 ybs *= -1; 101 } 102 103 104 if (bx >= px && bx <= px + pwidth && by >= py && by <= py + pheight) { 105 if (bx >= px && bx <= px + pwidth / 4) { 106 xbs = -4; 107 } 108 if (bx >= px + pwidth / 4 && bx <= px + pwidth / 2) { 109 xbs = -2; 110 } 111 if (bx > px + pwidth / 4 * 3 && bx < px + pwidth) { 112 xbs = 4; 113 } 114 if (bx > px + pwidth / 2 && bx < px + pwidth / 4 * 3) { 115 xbs = 2; 116 } 117 if (by >= py && by <= py + pheight) { 118 ybs *= -1; 119 } 120 } 121 122 for (var i = 0; i < countX; i++) { 123 for (var j = 0; j < countY; j++) { 124 if (bx + bsize / 2 > blx[i][j] && bx < blx[i][j] + blwidth[i][j] && 125 by + bsize / 2 > bly[i][j] && by < bly[i][j] + blheight[i][j]) { 126 ybs *= -1; 127 blwidth[i][j] = 0; 128 blheight[i][j] = 0; 129 blx[i][j] = 0; 130 bly[i][j] = 0; 131 // block.col=color(0); 132 } 133 } 134 } 135} 136コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2次元配列の宣言の仕方が間違っています。

let blx = [ [], [] ];

この場合blxは 2×n の配列しか作れません。

let blx =[]; for(int i=0;i<countx;i++){ blx[i]=[]; for(int j=0;j<county;j++){ blx[i][j]= ... } }

という形で宣言する必要があります。

投稿2021/02/08 05:12

Kaleidoscope

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問