アットウィキロゴ

JavaScriptは、ユーザーの入力があるまで待つことが出来ない。具体的に言うと、

please_dice();
document.write("サイコロの目は、<b>"+dice+"</b>だ。");

function please_dice() {
    if (クリックまだ) {
    setTimeout("please_dice()", 100);
    サイコロの乱数取得;
    サイコロの表示
    } else {
    dice = クリックで止めたサイコロの目;
}

実現して欲しい動作は、最初のplease_dice()を実行して、ユーザがサイコロをクリックで止めると次の処理に移る、というもの。 ところが、setTimeoutは、次行に処理を進めてから、第2引数のミリ秒後に第1引数の関数を実行する。つまり、setTimeoutでは止まってくれない。

setTimeoutの後の処理は、次に何をするかプログラム上でメモしておいてから、で解決か?

please_dice();
status = using_herb;

function please_dice() {
    if (クリックまだ) {
    setTimeout("please_dice()", 100);
    サイコロの乱数取得;
    サイコロの表示
    } else {
    dice = クリックで止めたサイコロの目;
    document.write("サイコロの目は、<b>"+dice+"</b>だ。");
    do_next(status);
}

function do_next(status) {
    switch (status) {
        case using_herb:
            HP += dice;
            document.write("体力が、<b>"+dice+"</b>回復した。");
            break;
    }
}

これなら、statusで次に何をするか覚えさせておいて、サイコロの目は何に使うのか分かる。この例では薬草を使うことしか書いてないけど、自分の武器攻撃や敵の攻撃とかにももちろんサイコロを使う。どの場合にもplease_dice()関数を使うので、その後の処理を明示しなくてはならない、ということかな。

タグ:

+ タグ編集
  • タグ:
最終更新:2011年11月23日 17:17