第7章 繰り返し〜後半〜


次のプログラムを見てください。
	repeat
	mes cnt
	wait 5
	loop

少し変だと思いませんか?
そうです。repeat命令の右に繰り返し回数が書いてないのです。
この場合、繰り返しが永遠に続きます。(無限ループといいます)
繰り返しから抜け出すことはないわけですから、stopがなくても勝手に終了されることはないんですね。

無限ループ、または長い繰り返しを作る場合に必ず必要なのがwait命令です。
wait命令は、指定した時間だけプログラムの動作を止める命令です。
止める時間は1秒の100分の1です。つまり、このプログラムの場合0.05秒ですね。
もし一秒間止めたければ、wait 100と書けばよいわけです。

無限ループや長い繰り返しでwait命令を忘れた場合、
ウィンドウが閉じれなくなってしまうことがありますので注意してください。(フリーズと言う)


このプログラムでは、数字が次々と表示されていきましたが、
すぐに画面の下に消えていってしまって、途中からは見ることができません。
それを防ぐためには、下のようなプログラムをつくれば良いです。
	repeat
	cls
	pos 0,0:mes cnt
	wait 1
	loop

このプログラムでは、文字を表示する位置を指定することで画面からはみ出すことを防いでいます。
しかし、pos命令で位置を指定しただけでは、すぐに文字を表示している部分が真っ黒になり、
何が表示されているか分からなくなってしまいます。
これは、同じ位置に1,2,3,4,5・・・と何度も数字を重ねて表示しているためです。

これを防ぐためには、毎回画面を真っ白に戻してから数字を表示すれば良いですね。
そこで使うのが、cls命令です。これは画面を塗りつぶす命令でしたね。
前回と違うのは、clsの右に数値がないことです。
数値がない場合、0と入力したのと同じことになります。
つまり、clscls 0は全く同じものなのです。


repeat命令以外にも、goto命令でも繰り返しを実現できます。
ただ、goto命令での繰り返しの場合、cntに繰り返し回数が入りません。
ですから、先ほどのプログラムと同じ動作のものをつくるにはこうすればよいです。
*a
	cls 0
	pos 0,0:mes count
	count++
	wait 1
	goto *a

これが、*aとgotoの間のプログラムを永遠に続けるものであることは分かりますね?
*aからはじまって数値を表示した後にgoto命令で*aに戻る、というのを繰り返すのです。

このループではcntは使えないので、自分で変数countを作って繰り返しごとに数値を増加させています。
count++というのは、count=count+1というのと全く同じもので、countの中の数字を1増やします。
また、count+=1というのも、それらと同じものです。

count++count=count+1と同じ。
count--count=count-1と同じ。
count+=1count=count+1と同じ。
count-=1count=count-1と同じ。
count*=2count=count*2と同じ。
count/=2count=count/2と同じ。

↑のように、簡単に式を書く方法をよく覚えておいてください。
右のものより左のものの方が処理が早かったりします。
+=1や*=2などの数値の部分はもちろん変わっても構いません。count*=4やcount-=3なども使えます。

goto命令を使ったループでも、waitは絶対に忘れないように注意してください。
繰り返し回数が決められないgotoを使った繰り返しよりも、repeatを使った繰り返しの方が便利ですね。

今回のプログラムを実行して、画面を点滅しているのが分かったと思います。
これでは見にくくて見にくくて仕方がないですね(^^;)
これを直す方法は次章で説明することにします。


これでこの章は終わりですが、最後にawait命令という物を説明しておきます。
使い方はwait命令に良く似ており、await 5などのように書きます。
await命令はwait命令よりさらに10分の1の細かい時間プログラムを停止できる命令だと思われている方が
たくさんいますが、それは間違いです。await命令は前回のwaitからの待ち時間を指定します。
これにより、処理速度を一定に保つことが可能になります。
難しくてよく分からない人は、とりあえずwait命令だけが分かっていれば大丈夫です。

では、準備が出来た人は第8章へどうぞ!

戻る