フラッシュ暗算(基本構成)


まず、初期化の部分を考えます。

 1
 2
 3
 4
 5
 6
#define SIZE 250	// 数字の表示サイズ

	num = 3		// 合計出題数
	koma = 50	// 1コマの表示時間
	objsize 100, 25
	randomize
表示文字サイズSIZEは定数で、出題数numや1文字の表示時間komaは変数で…と分けているのは、 画面に表示する文字サイズは変更させる必要がないため不変である定数値に、 出題数や表示時間はレベルに応じて変更できるようにするため変数にしています。 SIZEを定数ではなく変数にしても問題ありませんし、 レベルに応じて文字サイズも変更したいのであれば変数にしてもOK。 ココで使用するものは変更しないので定数にしているだけです。 この初期化において乱数の初期化は行っていますが、 乱数のセットや、そもそも乱数を保持する配列変数の初期化を行っていません。 コレは問題毎の初期化では必要になる処理ですが、 ゲーム全体の初期化には必要ないことですので「ココでは行っていないだけ」です。
 1
 2
 3
*init
	pos 10, 10 : button "開始", *game_main
	stop
画面の初期化は上記だけで良いでしょう。 起動後にいきなりゲームがスタートしてしまわないようにするための処置です。 ちなみに、コレを書いただけではボタンのジャンプ先ラベルを作っていないので実行できません。 以下のゲーム本体部分も追加してください。
 1
 2
 3
 4
*game_main
	gosub *game_init
	gosub *game_draw
	stop
 1
 2
 3
 4
 5
 6
 7
 8
*game_init
	answer = 0, 0 // 入力用, 正解用(合計)
	dim question, num
	foreach question
		question.cnt = rnd(9) + 1 // 1〜9のいずれをセット
		answer.1 += question.cnt
	loop
	return
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
*game_draw
	clrobj
	font msmincho, SIZE
	foreach question
		color 255, 255, 255 : boxf : color , 150
		wait 10
		pos (ginfo_winx - SIZE / 2) / 2, (ginfo_winy - SIZE) / 2 // 画面中央
		mes question.cnt
		wait koma
	loop
	return
*game_mainラベルは*game_initラベル、*game_drawラベルへのジャンプのみ行っています。 *game_initラベルで合計値の初期化と共に、元となる値をランダムで決定しquestionに格納しています。 そして*game_drawラベルがユーザーに見せる部分で値を順次表示しています。 ループ内にウェイトが2箇所ありますが、6行目の「wait 10」は意外に重要で、 前に表示した値を消す画面をユーザーに見せる役割を持っています。 コレがないとどういうことが起こるのか? 前に表示した値と今回表示した値が異なる場合は特に問題ありませんが、 同じ値だった場合、前の値が表示されたままなのか、新しく表示されたものなのか区別がつきません。 空白の画面を見せることで「同じ値が続いても複数回表示されたものなのだ」と理解できます。 この他に必要な処理は「合計値の入力」と「入力値と合計値との一致判定」ですね。 *game_mainラベルに以下の合計入力への筋道である*game_answerラベルへのジャンプ、 その*game_answerラベルでの合計を入力させる処理、*game_judgeラベルでの判定処理を追加してください。
 1
 2
 3
4
5
*game_main
	gosub *game_init
	gosub *game_draw
	gosub *game_answer
	stop
 1
 2
 3
 4
 5
 6
 7
*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 "解答", *game_judge
	return
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
*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 "次へ", *game_main
	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 "○"
	}
	return
コレでフラッシュ暗算ゲームに必要な基本部分が一通り完成しました。 今回はココまでとしますが、コレを元によりゲームらしい作りに変化させていきましょう。 まとめてみたスクリプトはコチラからどうぞ。