前回はフラッシュ暗算ゲームの基本部分のみを作成しました。 今回は前回のものに手を加えていき、よりゲームらしくしてみましょう。 まずは、解答時間に制限を設けてみる処理から追加してみます。 例えば、解答タイム10秒以内という処理を組み込む場合、 ボタンを押して解答する仕組みであったため、 ボタンでジャンプした後の処理を終えて戻ってきた時、カウントダウンを再開する形になります。 既に回答し終えているのにカウントダウンが再開されるのは不恰好ですから、 判定処理を終えた後はループを直ちに抜けるようにしなければなりません。 また、ループ中にボタンが押される時の処理はソレで良いとして、 時間切れになった時でも「時間切れ」として判定を行い結果を表示する必要がありますので、 ループの後でも判定処理を入れる必要があります。 もし、単純に判定処理をループ後にも追加する形にすると、 ループ中にボタンを押されている場合、判定処理を2回することになりますので、 無駄が生じないように「既にボタンを押しているなら再判定しないよう制御する」必要があります。 ココではボタンが押されていようが、時間切れになっていようが一度しか判定しない形にしました。
1 2 3 4 5 6 |
*game_main gosub *game_init gosub *game_draw gosub *game_answer gosub *game_judge // 正誤判定および結果表示はこのタイミングで行う stop |
1 2 3 |
*click_button click = 1 // ボタンクリックフラグON return |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
*game_answer color 255, 255, 255 : boxf : color font msmincho, 15 pos 10, 10 : mes "合計値を入力してください。" pos 10, 40 : input answer, 100, 20 pos 10, 70 : button gosub "解答", *click_button // クリックフラグを付けるだけにする font msmincho, SIZE / 3 * 2 click = 0 repeat 10, 1 wait 100 if click : break // ボタンが押されたらカウントダウン終了 redraw 0 color 255, 255, 255 : boxf (ginfo_winx - SIZE) / 2, (ginfo_winy - SIZE) / 2 : color circle (ginfo_winx - SIZE) / 2, (ginfo_winy - SIZE) / 2, (ginfo_winx + SIZE) / 2, (ginfo_winy + SIZE) / 2 color 255, 255, 255 circle (ginfo_winx - SIZE + 15) / 2, (ginfo_winy - SIZE + 15) / 2, (ginfo_winx + SIZE - 15) / 2, (ginfo_winy + SIZE - 15) / 2, 0 pos (ginfo_winx - SIZE / 3) / 2, (ginfo_winy - SIZE / 3 * 2) / 2 mes 10 - cnt redraw 1 loop font msmincho, 15 return |
1 2 3 4 5 6 |
#define SIZE 250 num = 3, 4, 5 // 第1ステージ、第2ステージ、第3ステージ koma = 50 objsize 100, 25 randomize |
1 2 3 4 5 6 7 8 9 |
*game_main stage = 0 foreach num gosub *game_init gosub *game_draw gosub *game_answer gosub *game_judge loop goto *init // 全問終えれば初期画面に戻る |
1 2 3 4 5 6 7 8 |
*game_init answer = 0, 0 dim question, num.stage // 保持配列の要素数を各問の表示個数分に変更する foreach question question.cnt = rnd(9) + 1 answer.1 += question.cnt loop return |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
*game_judge clrobj color 255, 255, 255 : boxf : color pos 10, 10 : mes "入力:" + answer.0 pos 10, 30 : mes "正解:" + answer.1 pos 10, 60 : button gosub "次へ", *click_button // クリックフラグを付けるだけにする font msmincho, SIZE, 1 pos (ginfo_winx - SIZE) / 2, (ginfo_winy - SIZE) / 2 if answer.0 ! answer.1 { color 255 mes "×" } else { color , , 255 mes "○" } click = 0 repeat wait 100 if click : break // ボタンが押されるまで処理を先に進めないようにする loop stage++ // 次のステージへ進める return |
1 2 3 4 5 6 7 8 |
#define SIZE 250 num = 3, 4, 5 koma = 50 objsize 100, 25 randomize mmload "error.wav", 0 // 誤解音 mmload "correct.wav", 1 // 正解音 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
*game_judge clrobj color 255, 255, 255 : boxf : color pos 10, 10 : mes "入力:" + answer.0 pos 10, 30 : mes "正解:" + answer.1 pos 10, 60 : button gosub "次へ", *click_button font msmincho, SIZE, 1 pos (ginfo_winx - SIZE) / 2, (ginfo_winy - SIZE) / 2 if answer.0 ! answer.1 { color 255 mes "×" mmplay 0 // 誤解音を鳴らす } else { color , , 255 mes "○" mmplay 1 // 正解音を鳴らす } click = 0 repeat wait 100 if click : break loop stage++ return |