
randomize max=5;問題数 repeat max b=rnd(cnt+1) a(cnt)=a(b) a(b)=cnt loop foreach a mes a(cnt) loop
;===========================================================
; getkeyを利用した入力ボックス
;===========================================================
sdim inp,200
font "Impact",40
*main
;A~Z, BS, SP
repeat 45
rcnt=cnt+48
if cnt=43:rcnt=8
if cnt=44:rcnt=32
getkey key2,rcnt
if (key2=1){
if (v1!rcnt)|(v2>10){
if rcnt=8 : inp=strmid(inp,0,strlen(inp)-1)
if rcnt!8 & strlen(inp)<16 : poke inp,strlen(inp),rcnt
if v1!rcnt:v2=0
v1=rcnt
}
v2++
}
if (key2=0)&(v1=rcnt) : v1=0
loop
redraw 0
color 255,255,255 : boxf
color 0,0,0 : pos 0,0
mes "ENTER YOUR NAME\n"+inp
if mcnt\40/20=0 : boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5
redraw 1
await 30
mcnt++
goto*main
;=========================================================== ; inputを利用した入力ボックス ;=========================================================== sdim inp,200 input inp,0,0,15 font "",40 *main redraw 0 color 255,255,255 : boxf color 0,0,0 : pos 0,0 mes "ENTER YOUR NAME\n"+inp if mcnt\40/20=0 : boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5 redraw 1 await 30 mcnt++ goto*main
自力で入力ボックスを作るとなるとgetkeyでも可能ですが、大変です。そこで、onkeyのwparam値にキーコードが代入されるのを利用します。
全角だと拾えないのと、割り込みをしてるのでゲームなどの処理でウェイトが崩壊します。後者のほうは問題ですかね。ASTEROIDはこの方法なんですが、名前を打つとき、ゲームのスピードが狂います。まあ比較的、お勧めな方法です(ショートなら特に)。
;===========================================================
; onkeyを利用した入力ボックス
;===========================================================
onkey gosub*push_key
sdim inp
font "Impact",40
*main
redraw 0
color 255,255,255 : boxf
color 0,0,0 : pos 0,0
mes "ENTER YOUR NAME\n"+inp
if mcnt\40/20=0 : boxf ginfo_mesx,ginfo_mesy,ginfo_mesx+5,ginfo_mesy+ginfo_mesy-5
redraw 1
await 30
mcnt++
goto*main
*push_key
if wparam!8{
if strlen(inp)<16 & wparam!13 : sdim v1:poke v1,0,iparam:inp += v1
}else{
inp = strmid(inp,0,strlen(inp)-1)
}
return