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