質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

16898閲覧

ルーレットの作成方法について

kanngaeru

総合スコア14

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

2クリップ

投稿2017/10/13 10:58

編集2017/10/13 11:28

完全初心者です、、、
下記を満たすルーレットを作成しておりますが、上手くいかず壁にぶつかっております。

1.ルーレットの目を16個作成する
2.スタートボタンを押すとルーレットが回転する
3.ルーレットの回転にランダム要素を組み込む
4.ルーレットが回っているときに、ストップボタンを押すとルーレットが止まる
5.一度ストップボタンで停止した目は次回以降は停止しない
6.スタートとストップを16回の繰り返しで、全ての目に停止する
7.過去に停止した目が何か、ユーザに分かるようにする(目に色がつくなど)
8.リセットボタンを押すと初期表示の状態に戻る(もしルーレットが回っている場合はルーレットの回転が止まり、初期表示の状態になる)
9.(ソースコード)比較演算子は、「===」や「!==」を利用すること
10.スタートボタンを押すと、マス目の色を順に変えることでルーレットが回転しているように見せる。(1から16まで順番でなく、ランダムに色が変わる)
イメージ説明

###発生している問題

・そもそもルーレットが回転しているように見えない。
・比較演算をどこで利用すればいいか思いつかない。
・16マス全てに色がついた後に、ボタンを押すと無限ループになる。

###該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ルーレット</title> <link rel="stylesheet" href="roulette.css"> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript"> $(function(){ var array = []; var value = Math.floor(Math.random() *16)+1; var timer = null; $('#start').click(function(){ $('#start').css('background-color','red'); $('#stop').css('background-color','blue'); $('#start').attr("disabled","disabled"); $('#stop').removeAttr("disabled"); timer = setInterval(Random,10); function Random(){ value = Math.floor(Math.random() *16)+1; $('#div').text(value); } }); $('#stop').click(function(){ $('#stop').css('background-color','red'); $('#start').css('background-color','blue'); $('#start').removeAttr("disabled"); $('#stop').attr("disabled","disabled"); clearInterval(timer); while(jQuery.inArray(value, array) >= 0){ value = Math.floor(Math.random() *16)+1; } if(jQuery.inArray(value, array) == -1){ array.push(value); $('#div').text(value); }; $.each(array, function(i, num) { $('td').eq(num-1).css({ 'background-color':'red', 'color':'white' }); }); }); $('#reset').click(function(){ location.reload(); }); }); </script> </head> <body> <table> <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr> <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr> <tr><td>9</td><td>10</td><td>11</td><td>12</td></tr> <tr><td>13</td><td>14</td><td>15</td><td>16</td></tr> </table> <input type="button" value="start" id="start"> <input type="button" value="stop" id="stop"> <input type="button" value="reset" id="reset"> <div id="div"></div> </body> </html>
table, tr, td { border: solid 1px; } td { padding: 5px; text-align:center; }
hoisan👍を押しています

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

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

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

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

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

kei344

2017/10/13 11:21

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
kanngaeru

2017/10/13 11:29

大変失礼しました、、、コードブロックで囲いました。
deigo

2017/10/13 12:40

多分インデントが消えてるので、元ソースから貼りなおしたほうが良いですよ。
guest

回答2

0

ベストアンサー

とりあえず書いてみました。仕様がちがうようなら教えてください

CSS

1.confirm{background-Color:aqua;} 2.selected{background-Color:red;} 3

javascript

1$(function(){ 2 var stock,num,idx,time,timerId,swap; 3 $('#start').on('click',function(){ 4 timerId=setInterval(function(){ 5 idx=Math.floor(Math.random()*num); 6 $('#t1 td').removeClass("selected").eq(stock[idx]).addClass("selected"); 7 },time); 8 $('#start,#reset').prop('disabled',true); 9 $('#stop').prop('disabled',false); 10 }); 11 $('#stop').on('click',function(){ 12 clearInterval(timerId); 13 $('#t1 td').eq(stock[idx]).addClass("confirm"); 14 num--; 15 swap=stock[num]; 16 stock[num]=stock[idx]; 17 stock[idx]=swap; 18 $('#start').prop('disabled',num<=1); 19 $('#stop').prop('disabled',true); 20 $('#reset').prop('disabled',false); 21 }); 22 $('#reset').on('click',function(){ 23 stock=[];//ストックリスト 24 for(var i=0;i<16;i++) stock.push(i); 25 num=16;//残りマス 26 time=10;//timerスピード 27 idx=null;//現在位置 28 $('#t1 td').removeClass("confirm").removeClass("selected"); 29 $('#start').prop('disabled',false); 30 $('#stop').prop('disabled',true); 31 }).trigger('click'); 32}); 33

HTML

1<table id="t1"> 2<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr> 3<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr> 4<tr><td>9</td><td>10</td><td>11</td><td>12</td></tr> 5<tr><td>13</td><td>14</td><td>15</td><td>16</td></tr> 6</table> 7<input type="button" value="start" id="start"> 8<input type="button" value="stop" id="stop"> 9<input type="button" value="reset" id="reset"> 10<div id="div"></div> 11 12

投稿2017/10/13 12:48

編集2017/10/13 13:00
yambejp

総合スコア114583

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

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

kanngaeru

2017/10/16 04:41

ご丁寧にありがとうございます。助かりました!
guest

0

・そもそもルーレットが回転しているように見えない。
ルーレットに連動してパネルが光るようにする、とか。

・比較演算をどこで利用すればいいか思いつかない。
if(jQuery.inArray(value, array) == -1)
ここの比較を変更すればいいんじゃないでしょうか。

・16マス全てに色がついた後に、ボタンを押すと無限ループになる。
→スタイルを.css()で直接指定してるところを、.addClass()でクラスを指定するように変えましょう。
それでクラスが付いてないものをカウントし、ゼロだったらあらかじめボタンを非活性にする。

投稿2017/10/13 13:00

deigo

総合スコア200

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

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

kanngaeru

2017/10/16 04:42

ご回答頂きありがとうございます。助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問