5.メッセージの表示

メッセージウィンドウを実装します。

メッセージウィンドウ

ユーザー定義命令で、ウィンドウを表示する命令"window"と、メッセージを表示する命令"message"を作ります。
window p1,p2,p3,p4 は座標(p1,p2)を左上の座標とした、幅p3、高さp4のウィンドウを表示する命令です。
message p1 は文字列p1をメッセージウィンドウに表示する命令です。

半透明のウィンドウを表示するには、gmodeを3に指定してgcopyを使います。
モード3は、4番目のパラメーターで指定したブレンド率による半透明合成コピーを行なうモードです。
ブレンド率は0〜256の値を指定でき、256で完全なコピーになります。

黒く塗りつぶした裏画面を用意しておいて、その画面を半透明コピーすることでウィンドウを表示します。
裏画面を塗りつぶす色を変えれば、青いウィンドウなどにする事もできます。

下のサンプルではスペースキーでメッセージを表示します。

buffer 1,96,32
picload "maptip.bmp"
//半透明ウィンドウ用の背景
buffer 2,300,110
color 0,0,0 //ウィンドウの色
boxf 0,0,300,110
screen 0,320,320
font "MS ゴシック",12 //メッセージのフォントを指定
dim map,10,10

*main
gosub *keyEvent
gosub *drawMap
redraw 1 :wait 5 :redraw 0
goto *main

#module
//ウィンドウを表示する命令
#deffunc window int x,int y,int wid,int hei
gmode 3,0,0,128
pos x,y
gcopy 2,0,0,wid,hei
color 255,255,255
line x,y,x+wid,y
line x,y+hei
line x+wid,y+hei
line x+wid,y
return

//メッセージを表示する命令
#deffunc message str m
window 30,250,260,60 //ここで、上で定義したwindowを使用
pos 40,260
mes m
redraw 1
	repeat //スペースキーが押されるまで待機
	stick key
	if key = 16:break
	wait 1
	loop
redraw 0
return
#global

*keyEvent
stick key
if key = 16 :message "スペースキーをおしてください"
return

*drawMap
gmode 0
x = 0 : y = 0
repeat 10
j = cnt
	repeat 10
	i = cnt
	pos x,y
	gcopy 1,map(i,j)*32,0,32,32
	x += 32
	loop
x = 0 : y += 32
loop
return