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

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

詳細はこちら
JavaScript

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

Q&A

解決済

2回答

1373閲覧

JavaScript - サイコロの目を動かしたい

asameshi

総合スコア16

JavaScript

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

0グッド

0クリップ

投稿2019/10/08 09:06

編集2019/10/08 09:16

###概要

htmlにtableで表を作り、そこに1~9の座標(id)を指定しています。
(例:サイコロの目1 => 座標5, サイコロの目2 => 座標1,9)

JavaScriptで要素を取得し、
該当idのtextContentに"●"を入れる事でサイコロを表現しています。

ボタンを押した時に、ランダムで持続的に変化するようにしたいのですが、
上手くできずに困っています。

####実現したい事
スタートボタンを押した時に、ランダムにマス目が変化するようにしたいです。

####試した事
squareの座標に"●"を代入し、それを配列に入れて、setIntertvalで動かす。

####エラーコード
SyntaxError: Invalid destructuring assignment target
エラーメッセージを調べると、分割代入と出てきました。
恥ずかしながら、初めて聞いた言葉で理解が乏しいです。
この辺りは自分で調べるつもりですが、もっとシンプルなロジックや、別の方法を知りたいです。

上手くできずに行き詰まってしまったため、質問させて頂きました。
よろしくお願い致します。

###ソースコード

html

1 2<table> 3 <tr> 4 <td name="square" id=1></td> 5 <td name="square" id=2></td> 6 <td name="square" id=3></td> 7 </tr> 8 <tr> 9 <td name="square" id=4></td> 10 <td name="square" id=5></td> 11 <td name="square" id=6></td> 12 </tr> 13 <tr> 14 <td name="square" id=7></td> 15 <td name="square" id=8></td> 16 <td name="square" id=9></td> 17 </tr> 18</table> 19 20<button id="startEye">START</button> 21

javascript

1 2const square = document.getElementsByName("square"); 3 4 function rollEye() { 5 const eyes = [square[4].textContent = "●"],[square[0].textContent = "●",square[8].textContent = "●"]; 6 timeId = setInterval(() => { 7 number = Math.floor(Math.random() * 2); 8 eyes[number]; 9 }, 10); 10 } 11 12 startEye.addEventListener("click", () => { 13 if (!timeId) { 14 rollEye(); 15 } 16 });

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

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

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

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

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

asameshi

2019/10/08 09:38

そうだったんですね!見直します、ありがとうございます。
guest

回答2

0

こんにちは

自己解決されたようですが、

もっとシンプルなロジックや、別の方法を知りたいです。

とのことでしたので、作ってみました。
シンプルになったかは分かりませんが、以下になります。

考え方としては、 たとえば 4 という出目を、以下のような3行のテキスト

101 000 101

で表し、このテキストの行を連結して、数値の 10 の配列
[1, 0, 1, 0, 0, 0, 1, 0, 1]
を得ておき、テーブルに表示するときに<td> の配列をループで回して、ループインデクスの位置の、上記の出目の配列の要素が 1 ならば●を、 0 ならば空文字列を <td> のテキストに設定します。

以上、参考になれば幸いです。

投稿2019/10/08 16:08

jun68ykt

総合スコア9058

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

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

asameshi

2019/10/09 07:09

コードと解説、ご丁寧にありがとうございます。 0と1で判断する方法もあるのですね!勉強させて頂きます。
jun68ykt

2019/10/09 07:35

どういたしまして。参考にして頂ければ幸いです。
guest

0

自己解決

とりあえず目標とする動きを実装できました。

javascript

1const eyes = { 2 1: [4], 3 2: [0,8], 4 3: [2,4,6], 5 4: [0,2,6,8], 6 5: [0,2,4,6,8], 7 6: [0,1,2,6,7,8], 8 7: [0,1,2,4,6,7,8], 9 8: [0,1,2,3,5,6,7,8], 10 9: [0,1,2,3,4,5,6,7,8] 11}; 12 13function rollEye() { 14 timeId = setInterval(() => { 15 for (let i=0; i <= 8;i++){ 16 square[i].innerHTML = " "; 17 } 18 randomNum = Math.floor(Math.random() * Object.keys(eyes).length + 1) 19 eyes[randomNum].forEach((value) => { 20 square[value].innerHTML = "●"; 21 }) 22 }, 10); 23}

投稿2019/10/08 15:04

asameshi

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問