HOME > プログラミング > 繰返 > 単純ループ

repeat loop cnt break continue繰返 単純ループ

 

万能なループ構文
ループの書き方は様々ありますが、HSPには非常に分かりやすいループの書き方ができます。
また、現在のループ処理中の回数をカウントする変数cntが用意されています。
回数を省略または-1を指定するとbreak命令を実行するまでループは終わりません。
変数cntの初期値を省略すると0からループ回数をカウントします。
repeat 回数,変数cntの初期値
  繰り返す処理
loop

ループした回数を確かめる
repeat 5	//5回ループする、変数cntの初期値は0から
	mes str(cnt)+"回目"
loop	//変数cntは0から始まるので変数cntが4以上でループを抜ける
		//そうでないときは変数cntを1カウントしてrepeatに戻る

命令名:repeat「ループする(開始行)」
回数:5「ループする回数(5回)」
繰り返す処理:mes str(cnt)+"回目"「繰り返した回数を表示する」
命令名:loop「変数cntが1増え、指定回数繰り返すまでrepeatに戻る」


 

ループを抜ける
条件を満たしたとき等にループを抜けるようにしたいときに使います。(loop命令の下の行へ移る。)
break

変数cntが9以上になるとループを抜ける
repeat	//永遠にループする、変数cntの初期値は0から
	mes str(cnt)+"回目"
	if cnt >= 9 : break	//変数cntが9以上でループを抜ける
loop	//変数cntをカウントしてrepeatに戻る

命令名:break「ループを抜ける」
※∞(無限)ループになって固まってしまった場合は、とにかくウィンドウを閉じるを何度も押して強制終了させましょう。


 

ループをやり直す
条件を満たしたとき等に現在のrepeat命令行からループをやり直します。
また、回数を再指定できます。
回数を省略すると、回数はそのままやり直しします。
continue 回数

2分の1でカウントダウンをやり直し、5カウントを超えると爆発する
randomize	//乱数を乱す
repeat	//永遠にループする、変数cntの初期値は0から
	if cnt != 0{	//変数cntが0でなければ
		if rnd(2) == 0{	//2分の1の確率で?
			//セーフ処理(カウントダウンし直す)
			mes "セーフ"	//セーフを表示する
			await 1000	//約1秒待つ
			cls	//画面を白で消す
			pos 0,0	//描画ポジションを指定する
			continue 0	//リピート回数0秒からやり直し
			
		}else{
			//ドカーン判定
			if cnt >= 5 : break	//変数cntが2以上でループを抜ける
		}
	}

	//カウントダウンを表示
	mes str(5 - cnt)+"..."	//カウントダウンを表示する
	await 1000	//約1秒待つ
	
loop	//変数cntをカウントしてrepeatに戻る
mes "ドカーン!"

命令名:continue「指定回数からやり直す」
回数:0「0回からやり直す」


 

変数cntの初期値とループ回数の関係
ループ回数は、変数cntの初期値に注意してください。
例えば5回のループで変数cntの初期値を3とした場合、ループの終了条件は変数cntが6のときです。
すなわち、continue命令で回数を1をすると、その後1,2,3,4,5,6,7と7回ループすること1になります。

変数cntとループ回数の関係
dim flag : flag = 0		//1回だけ処理したいためにフラグを宣言

repeat 5,3	//5回繰り返す、変数cntの初期値は3
	mes str(cnt)+"回目"
	if flag = 0{	//フラグが立っていなければ
		flag = 1	//フラグを立てる
		continue 1	//変数cntを1からやり直してrepeatへ
	}
loop


 

入れ子(ネスト)
ループは二重に書くことができます。
二重に書いたとき、変数cntは最も深いループに対する繰り返し回数となります。

ネストと変数cnt
repeat 3
	mes str(cnt)+"回目の"
	repeat 5
		mes str(cnt)+"回目"
	loop
loop


 

無限ループで処理が固まる対策
無限ループは、ループが永遠に終わらないことです。
コンピュータは高速で処理します。無限ループは、コンピュータがその中で一生懸命処理をしますが、ループから抜けられず、処理に集中して多くの力を割いてしまいます。
そこで、無限ループに集中させ過ぎないように、await命令を使います。

無限ループで処理が固まらないようにする
repeat	//無限ループ
	cls	//画面を白で消す
	mes str(cnt)+"回目"	//回数を表示する
	await 10	//待機する
loop

当サイトコンテンツの複写・転載・引用は禁止しております。