• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランダム音声と正解・不正解(続))

ランダム音声と正解・不正解の照合関数の作成方法

このQ&Aのポイント
  • 質問文章では、音声をランダムに鳴らすボタンを作成することに成功しています。しかし、正解・不正解を照合する関数の作成に問題があり、変数rを別の関数に受け渡す方法を知りたいと思っています。
  • 変数rを別の関数に受け渡すことはできないため、正解・不正解の照合に問題が生じています。具体的には、乱数rが0か1の場合に正解と判定するようにしたいです。
  • 変数rを別の関数に正しく受け渡す方法や、0か1を正解と判定する方法について教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>function内の変数を次の変数に引き継ぐことは無理なんでしょうか。 rを定義している関数から 例えば、function ansCheck01()を呼び出すときに function ansCheck01(r)として置いて ansCheck01(r)で呼び出せば、その関数の中でrが使用できます。この場合は、値の変更はできません。 例えば、 function A(){ var v=10; B(v); alert(v); } function B(v){ v=v*v; } の場合、関数Bにv=10が渡され100になりますけど、Aに戻った時点では、vは10です。 値を変更したいような場合はオブジェクトにして function obj(v){ this.v=v; } function A(){ var v=new obj(10); B(v); alert(v.v); } function B(obj){ obj.v=obj.v*obj.v; } とかすると渡された関数の側で値を変更することができます。 >function外で変数rを指定すると、ページをリロードするまで変数が変わらないので、困ります。 関数外で定義してある変数は、それぞれの関数で値を変更することができます。つまり、変えられます。質問文のサンプルではそういう使い方になっていますね。 この場合、リロードすると、初期化されます。 なので、乱数で値が変わるということなのですが、 何らかのイベント(例えば、正解・不正解が終わって(終わったときとか)次の問題が始まる前とかの部分で、 r = Math.floor(Math.random() * sound.length); とかしてやることになろうかと思います。

babusan
質問者

お礼

 ありがとうございます。試してみます。うまくいったら補足で報告します。

babusan
質問者

補足

r = Math.floor(Math.random() * sound.length); を関数の中に組み込んで、新たに乱数を発生させる やり方でうまくいきました。  このたびは本当にありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

function ansCheck01(){ if(r == 0 || r == 1){ alert('★★正解★★'); } else { alert('------不正解------'); } } でどうでしょう? rの値が期待したモノと違うようなら適当なところで alert(r); すればいいと思いますが

babusan
質問者

お礼

 回答ありがとうございます。 「(r == 0 || r == 1)」については、本と照合した上で納得できました。 しかし、前のfunction内で設定した変数rは、そのfunction内で完結して いるようです。単純にbodyへdocument.write(r)を実行するボタンを作成 しても、エラーが起きますから。  だからと言って、function外で変数rを指定すると、ページをリロード するまで変数が変わらないので、困ります。  function内の変数を次の変数に引き継ぐことは無理なんでしょうか。

関連するQ&A