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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

解決済

キーを押したときの処理がうまくいかない

Matsuta174320
Matsuta174320

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

2回答

0評価

0クリップ

622閲覧

投稿2020/06/25 06:32

編集2022/01/12 10:58

自作のタイピングゲームに特定のキーを押したらアイテムが発動するシステムを作っていますが、ソースコードの上側に置いたアイテムが動作しません。順番を入れ替えたりしてもダメでした。

html

<!DOCTYPE html> <head> <meta charset="utf-8"> <pre class="lang:js decode:true"> <script type="text/javascript" src="textfile.js"></script> <link rel="stylesheet" href="style.css"> </head> <div id="mondai"> <h1><p id="subject"></p></h1> </div> <contents> <form name="typing" onsubmit="return false;"> <input name="input" style="width:30%;padding:10px;font-size:16px;" autocomplete="off" type="text"><input name="btn" type="submit" style="width:3%;padding:10px;font-size:16px;" value="解答" > <input name="item1" type="button" style="width:10%;padding:10px;font-size:16px;" value="インシュランス" ><input name="item2" type="button" style="width:10%;padding:10px;font-size:16px;" value="ファイブアップ" > <input name="start" type="button" style="width:10%;padding:10px;font-size:16px;" value="ゲームスタート"><input type="button" name="button" value="アリーヴェデルチ" style="width:10%;padding:10px;font-size:16px;" onclick=closewindow()> <h3><p id="timer"></p></h3> <h3><p id="point">0</p></h3> <h3><p id="message"></p></h3> </contents> <script> //ここからJavaScript const subject = document.getElementById('subject'); const timer = document.getElementById('timer'); const point = document.getElementById("point"); const stock = document.getElementById("life"); const message = document.getElementById("message"); const start = document.getElementById("start"); const form = document.forms.typing; let rank; let TIME = 10; let count = 0; let state = false; let wrong = 0; let life = 1; let ins = 1; let fiveup = 1; let mondai; let gamestart = 0; let countdown; var useitem = new Audio("https://insertofficial.web.fc2.com/ko1.mp3"); var doitem = new Audio("https://insertofficial.web.fc2.com/cursor6.mp3"); var mainbgm = new Audio("https://insertofficial.web.fc2.com/8bit-act05_stage02.ogg"); var finishbgm = new Audio("https://insertofficial.web.fc2.com/zenmetu.ogg"); point.textContent = "ポイント:" + 0; timer.textContent = "ゲームスタートを押すとカウントダウンが始まりゲームがスタートします。ご自分のタイミングでクリックして下さい。"; subject.textContent = "ゲームスタートを押してね"; //制限時間 function gametimer(){ countdown = setInterval(function() { if(gamestart == 1){ timer.textContent = '制限時間:' + --TIME + '秒'; if(TIME <= 0) { life--; if (life <= 0) finish() else { TIME = 10; timer.textContent = "制限時間:" + 10 + "秒"; doitem.play(); message.textContent = "アイテムの効果が発動し、時間切れによる失格を防いだ!"; form.input.value = ''; }; } } }, 1000); } //正誤判定 form.btn.addEventListener('click', function(e) { if(!state) return; if(form.input.value === subject.textContent) { count++; point.textContent = "ポイント:" + count; timer.textContent = "制限時間:" + 10 + "秒"; TIME = 10; if(life == 2){ life--; } init(); } else { life--; if(life > 0){ timer.textContent = "制限時間:" + 10 + "秒"; TIME = 10; message.textContent = "アイテムの効果が発動し、不正解による失格を防いだ!" subject.textContent = mondai; form.input.value = ''; doitem.play(); } else { wrong++; finish(); } } }); //出題 function init() { //レベルに応じた問題を出題(コードが割と冗長なため、できれば改造したい) if(count > 60){ const rnd = Math.floor(Math.random() * level8.length); mondai = level8[rnd]; }else if(count > 40){ const rnd = Math.floor(Math.random() * level7.length); mondai = level7[rnd]; }else if(count > 30){ const rnd = Math.floor(Math.random() * level6.length); mondai = level6[rnd]; }else if(count > 20){ const rnd = Math.floor(Math.random() * level5.length); mondai = level5[rnd]; }else if(count > 14){ const rnd = Math.floor(Math.random() * level4.length); mondai = level4[rnd]; } else if(count > 9){ const rnd = Math.floor(Math.random() * level3.length); mondai = level3[rnd]; } else if(count > 4){ const rnd = Math.floor(Math.random() * level2.length); mondai = level2[rnd]; } else { const rnd = Math.floor(Math.random() * level1.length); mondai = level1[rnd]; } subject.textContent = mondai; form.input.value = ''; form.input.focus(); } //ゲームオーバー時の処理 function finish() { clearInterval(countdown); state = false; if(wrong <= 0){ mainbgm.pause(); mainbgm.currentTime = 0; finishbgm.play(); timer.textContent = "プレイしてくれてありがとう!もう一度プレイしたい場合はゲームスタートを押してください。"; message.textContent = ""; subject.textContent = 'GAME OVER\n時間切れにつき終了!正解数は' + count + '個でした!'; gamestart = 0; state = false; } else { mainbgm.pause(); mainbgm.currentTime = 0; finishbgm.play(); timer.textContent = "プレイしてくれてありがとう!もう一度プレイしたい場合はゲームスタートを押してください。"; message.textContent = ""; subject.textContent = 'GAME OVER\n時間切れにつき終了!正解数は' + count + '個でした!'; gamestart = 0; } } //スタートボタン form.start.addEventListener('click', function(e) { if(gamestart == 0){ state = true; gamestart = 1; init(); mainbgm.play(); count = 0; life = 1; ins = 1; fiveup = 1; point.textContent = "ポイント:" + count; gametimer(); }; }); function closewindow(){ alert("こんなゲームをプレイしてくれてありがとう!\n完"); window.close(); } //ここからアイテム発動に関するコード //インシュランス ※アイテムその2 document.onkeydown = function keydown(e) { if(e.keyCode == '39') { if(!state) return; if(ins < 1){ message.textContent = "このアイテムは使用済みです。" } else if(ins >= 1){ ins = 0; life++; message.textContent = "アイテム「インシュランス」発動!この問題に保険がかかった!"; useitem.play(); } } } //ファイブアップ ※アイテムその1 document.onkeydown = function keydown(e) { if(e.keyCode == '40') { if(!state) return; if(fiveup < 1){ message.textContent = "このアイテムは使用済みです。" } else { fiveup = 0; TIME = TIME + 5; message.textContent = "アイテム「ファイブアップ」発動!この問題の制限時間が5秒延長された!"; useitem.play(); } } } </script> </pre> </html>

keycodeを変更しても、必ず下側に書いたコードのアイテムしか発動されません。
ファイブアップを上に、インシュランスを下にすると、キーを押してもファイブアップが発動されず、、インシュランスを上にするとキーを押してもインシュランスが発動しなくなります。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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