アプリ版:「スタンプのみでお礼する」機能のリリースについて

 以前ここでお聞きした内容をもとに、自分でいろいろ考えているのですが、
どうしてもわからないので、再度おたずねします。

 いくつかある音声(sound01.mp3~sound08.mp3)を、ボタンクリックによっ
てランダムに鳴らします。次に別のボタンなりリンクなりの選択肢がいくつか
あって、条件に該当すれば正解、そうでなければ不正解という判定をしたいと
思います。その際、たとえば答えの選択肢が「1」「2」「3」「4」の四つ
あり、sound01とsound02の時は「1」が正解、sound03とsound04の時は「2」
が正解…というように設定します。

 ランダム音声を鳴らすボタンを作成するところまではうまくいきました。
しかし、その次の正解・不正解を照合する関数がうまくつくれません。音声を
ランダムに発生する関数randomSOUNDで発生させた乱数rを、別の関数ansCheck01
でチェックし、それが0か1だったら正解のアラート、そうでなければ不正解の
らに単純化して0のときだけ正解にしていますが、これでもうまくいきません。
変数rは別関数には受け渡すことができないのでしょうか。どう訂正すべきかを
ご指摘下さい。

 また、0か1を正解にしたいときはどうすればよいのかも併せて教えていただ
けると助かります。

<SCRIPT language="javascript">
var sound = new Array(
"sound01.mp3",
"sound02.mp3",
"sound03.mp3",
"sound04.mp3",
"sound05.mp3",
"sound06.mp3",
"sound07.mp3",
"sound08.mp3"
);
var r = Math.floor(Math.random() * sound.length);

function randomSOUND() {
bgs.src = sound[r];
}

function ansCheck01(){
if(r == 0){
alert('★★正解★★');
else{
alert('------不正解------');}

</SCRIPT>

A 回答 (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);
とかしてやることになろうかと思います。

この回答への補足

r = Math.floor(Math.random() * sound.length);

を関数の中に組み込んで、新たに乱数を発生させる
やり方でうまくいきました。

 このたびは本当にありがとうございました。

補足日時:2005/04/21 10:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/18 23:31

function ansCheck01(){


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

 回答ありがとうございます。

「(r == 0 || r == 1)」については、本と照合した上で納得できました。
しかし、前のfunction内で設定した変数rは、そのfunction内で完結して
いるようです。単純にbodyへdocument.write(r)を実行するボタンを作成
しても、エラーが起きますから。

 だからと言って、function外で変数rを指定すると、ページをリロード
するまで変数が変わらないので、困ります。

 function内の変数を次の変数に引き継ぐことは無理なんでしょうか。

お礼日時:2005/04/17 21:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!