1.二重にrepeat命令を使うので、repeat命令の次行にcnt相当の変数定義(以下は一例)
repeat 8 x = cnt repeat 6 y = cnt color x*30+15, y*40+15, 192 boxf x*40, y*20, x*40+39, y*20+19 pos x*40, y*20 color mes "("+x+","+y+")" loop loop
2.break命令で脱出した場合と、通常の場合を区別する為にフラグ変数定義(以下は一例)
is_breaked = 0 repeat rnd(5)+5 if cnt>8 : is_breaked = 1 : break loop if is_breaked = 1 : dialog "break命令で抜け出しました" : end dialog "普通に抜け出しました" end
3.上2つのせいでrepeat〜loop構文が絡むユーザー定義命令はローカル変数が多い(以下は一例)
#module #defcfunc area_checker array dimen, local breaked, local x, local y, local z, local t breaked = 0 repeat length(dimen) x = cnt repeat length2(dimen) y = cnt repeat length3(dimen) z = cnt repeat length4(dimen) t = cnt if dimen(x,y,z,t) = "ひゃっはー" : breaked = 1 : break loop if breaked = 1 : break loop if breaked = 1 : break loop if breaked = 1 : break loop if breaked = 1 : return "ひゃっはーは("+x+","+y+","+z+","+t+")座標に存在します" return "ひゃっはーは存在しません" #global sdim dimension, 12, 10, 10, 10, 10 dimension(rnd(10),rnd(10),rnd(10),rnd(10)) = "ひゃっはー" mes area_checker(dimension)
慣れてしまえば問題無いような気もしますが、この手の変数は命令の処理方法次第で消去する事ができます。ここに書くと非常に長くなるので開発Wikiのページに一例を。
http://hspdev-wiki.net/?%BE%AE%A5%EF%A5%B6%2F%C6%C3%BC%EC%2Frepeat%A1%C1loop%B9%BD%CA%B8%A4%CE%B3%C8%C4%A5
上記の通り、命令をマクロで修正して新たな引数とマクロを加えてやるだけでも、変数の定義を省略したり変数自体を消去する事ができます。
しかしながら、マクロレベルで修正してしまうとマクロ展開後のプログラムが恐ろしく読み辛くなってしまいます。どうにかHSP本体の部分で修正できないものでしょうか。