9.プログラムの実際3


 プロトタイプから、テキストを画像に置き換えて、正式版を作成します。
 画像は、一度gmem$へ読み込み、そこからpattern命令で切り出して表示します。

-------- 以下 L09.SIT 'High-Low Game cls gmem$=L08.PCX locate 1,5*12 pattern 0,6*12,16,8*12+11 'ガイド表示 n=0 '回数 z=ran# '答えの決定 0〜999 b=z/1000 z=z-b*1000 'text 1,0,z w=0 x=0 y=0 gosub disp loop: gosub keyin gosub judge if n>=10 then over goto loop disp: locate 1,12 pattern w,0,w,11 locate 2,12 pattern x,0,x,11 locate 3,12 pattern y,0,y,11 return keyin: numin: k=key if k=27 then quit ;[ESC] if k=13 then enter ;[ENTER] if k<48 then numin ;[0] if k>59 then numin ;[9] w=x x=y y=k-48 m=w*100+x*10+y gosub disp locate 10,3*12 pattern 0,9*12,3,9*12+11 '空白 goto numin enter: n=n+1 gosub count return count: b=n/10 a=n-b*10 b=b-c*10 if b=0 then jp400 locate 1,3*12 pattern b,0,b,11 jp400: locate 2,3*12 pattern a,0,a,11 locate 4,3*12 pattern 0,12,3,23 '回目 return judge: locate 10,3*12 if m>z then high if m<z then low pattern 0,4*12,3,4*12+11 'Hit! pause goto quit high: pattern 0,2*12,3,2*12+11 'High text 10,3,"High" return low: pattern 0,3*12,2,3*12+11 'Low return over: locate 15,3*12 pattern 0,5*12,3,5*12+11 'over pause goto quit quit: cls end -------- 以上 L09.SIT

 数値を画像で表示する場合、1桁ずつ分解して表示しなければならないため処理が面倒ですが、L09.SITのcountの部分をサブルーチンとして再利用すると簡単です。この場合、2桁表示となっていますが、それ以上でも変更は難しくありません。
 画像の表示位置は、text命令の位置に合わせるため、元の値から計算している事が分かりやすいように式で記述してあります。「taxt x,y,""」とした時、「locate x,y*12」となっています。
 pattern命令の座標もL08.SITのtext命令で指定した座標から計算しています。「text x,y,"abc"」とした時、「pattern x,y*12,x+2,y*12+11」となります。+2は"abc"の文字数-1の値、+11は1文字分の高さです。
 実行速度的には式よりも定数の方が速いので、速度を優先させる時には式にしない方が良いでしょう。