プロトタイプから、テキストを画像に置き換えて、正式版を作成します。
画像は、一度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文字分の高さです。
実行速度的には式よりも定数の方が速いので、速度を優先させる時には式にしない方が良いでしょう。
|