JavaScript(jQuery),HTML,CSSで3桁の数当てゲーム(Hit&Blow)を作成したいと考えております。
まず、プレイヤーが決めた3桁数字を順番に入力させ、入力された数字を順番に表示し、3桁の値を保存するところまでを実装したいと考えていますが、
1桁目の数字入力、表示まではできたのですが、2桁目以降の表示や、一度入力した数字の再利用不可化が実現できておらず(考え方だけでも結構ですので)ご教示いただきたい次第です。
よろしくお願いいたします。
###実現したいこと
1)0〜9までの数字をひとつクリックさせる。(tableで入力欄作成)
1桁目(百の位)にクリックした数字を表示する。
一度クリックした数字は以降クリック不可にし、背景色をグレー色にする。
2)1)でクリックした以外の数値をクリックさせる。
2桁目(十の位)のにクリックした数字を表示する。
一度クリックした数字は同上
3)1),2)でクリックした以外の数値をクリックさせる。
3桁目(一の位)のにクリックした数字を表示する。
一度クリックした数字は同上
4)3桁入力後「OK」ボタンを押下後に、3桁の数字を保存(記憶)する。
※途中で「Del」ボタンを押下した場合は直近入力した数値を削除して、再入力可能状態とする。
###作成中のコード
lang
1 <!--メッセージ部分--> 2 <div id="message">3桁の設定ナンバーを決定してください 3 </div> 4 5 <!--ユーザのカード。設定した数字3桁を表示する--> 6 <div id="youcard"> 7 <ul id="youcards"> 8 <li id="youNum1"></li> 9 <li id="youNum2"></li> 10 <li id="youNum3"></li> 11 </ul> 12 </div> 13 14 <!--数値入力用キーボード--> 15 <div id="inputnumber"> 16 <table id="inputtable"> 17 <tbody> 18 <tr> 19 <td id="1" class="onNum">1</td> 20 <td id="2" class="onNum">2</td> 21 <td id="3" class="onNum">3</td> 22 </tr> 23 <tr> 24 <td id="4" class="onNum">4</td> 25 <td id="5" class="onNum">5</td> 26 <td id="6" class="onNum">6</td> 27 </tr> 28 <tr> 29 <td id="7" class="onNum">7</td> 30 <td id="8" class="onNum">8</td> 31 <td id="9" class="onNum">9</td> 32 </tr> 33 <tr> 34 <td id="del">Del</td> 35 <td id="0" class="onNum"> 0 </td> 36 <td id="ok">OK</td> 37 </tr> 38 </tbody> 39 </table> 40 </div> 41
lang
1//3桁の数字を設定する 2$(".onNum").on("click",function(){ 3 $("#youNum1").html(this.id); 4 $(this).css("background","#919191"); 5});
###修正したコード
lang
1 var youNums = []; //プレイヤーが設定した3桁数字の変数(配列) 2 var progress; //進行管理用の変数 3 //console.log(progress, youNums); 4 5 $(".onNum").on("click", function () { //数字0〜9をクリックした時 6 if (progress == undefined) { //変数progressがundefinedの場合 7 $("#youNum1").html(this.id); //youNum1にクリックした数字を表示 8 $(this).css("background", "#919191"); //クリックした数字をグレー色に変更 9 progress = 1; //変数progressに1を代入 10 youNums[0] = $("#youNum1").html(); 11 //console.log(progress, youNums); 12 13 } else if (progress == 1) { //変数progressが1場合 14 if (equal_youNum(this.id) == true) return; //利用済みの数字の場合処理を中断 15 $("#youNum2").html(this.id); 16 $(this).css("background", "#919191"); 17 progress = 2; 18 youNums[1] = $("#youNum2").html(); 19 //console.log(progress, youNums); 20 21 } else if (progress == 2) { 22 if (equal_youNum(this.id) == true) return; 23 $("#youNum3").html(this.id); 24 $(this).css("background", "#919191"); 25 $("#ok").css("background", "#da5758"); //OKボタンを赤色を変更 26 progress = 3; 27 youNums[2] = $("#youNum3").html(); 28 //console.log(progress, youNums); 29 30 } else { 31 } 32 }); 33 34 function equal_youNum(val) { //onNum1,onNum2の数字利用済み判定 35 if (val == $("#youNum1").html()) { //youNum1の数字と入力した数字がと一致するかのチェック 36 return true; //一致した場合true 37 } else if (val == $("#youNum2").html()) { //youNum2の数字と入力した数字がと一致するかのチェック 38 return true; //一致した場合true 39 } else { 40 return false; //いずれも一致しない場合false 41 } 42 } 43 44 $("#del").on("click", function () { //DELをクリックしたとき 45 if (progress == 3) { //進行管理が3の場合 46 $("#youNum3").empty(); //3桁目に表示していた数字を削除 47 $("#" + youNums[2]).css("background", "#fff"); //削除した数字の入力ボタンを白色に戻す 48 progress = 2; //変更管理を2に変更 49 youNums.splice(2); //プレイヤー設定番号の変数(配列)を削除 50 //console.log(progress, youNums); 51 52 } else if (progress == 2) { 53 $("#youNum2").empty(); 54 $("#" + youNums[1]).css("background", "#fff"); 55 progress = 1; 56 youNums.splice(1); 57 //console.log(progress, youNums); 58 59 } else if (progress == 1) { 60 $("#youNum1").empty(); 61 $("#" + youNums[0]).css("background", "#fff"); 62 progress = undefined; 63 youNums.splice(0); 64 //console.log(progress, youNums); 65 66 } else { 67 68 } 69 }); 70 71 $("#ok").on("click", function () { //OKをクリックしたとき 72 if (progress == 3) { //変数progressが3の場合 73 //youNums = [$("#youNum1").html(), $("#youNum2").html(), $("#youNum3").html()]; 74 $("#message").text(youNums[0] + " " + youNums[1] + " " + youNums[2] + " を設定しました"); 75 progress = 10; 76 } else { //変数progressが3以外の場合 77 } 78 //console.log(progress, youNums); 79 });
回答3件
あなたの回答
tips
プレビュー