2017年 9月23日
アイテムの選択画面を整理する。
まずタップ座標を作って
; アイテム選択画面-------------------------------- iselx1=10 : iselxk=60 isely1=11 : isely2=51 : iselyk=38 iselx2=305 iselx3=iselx2+iselxk iselx4=iselx3+iselxk iselx5=iselx4+iselxk iselx6=iselx5+iselxk dim iselkx1,20 ; タップ座標 dim iselkx2,20 dim iselky1,20 dim iselky2,20 repeat 9,1 iselkx1(cnt)=0 : iselkx2(cnt)=wx iselky1(cnt)=isely2+iselyk*(cnt-1)-6 iselky2(cnt)=isely2+iselyk*(cnt)-6 iselky1(cnt+10)=0 iselky2(cnt+10)=isely2-6 loop iselky1(9)=iselky1(8) : iselky2(8)=wy : selky2(9)=wy k=4 iselkx1(8)=0 : iselkx2(8)=wx/2 iselkx1(9)=wx/2 : iselkx2(9)=wx iselkx1(11)=0 : iselkx2(11)=iselx2-k iselkx1(12)=iselx2-k : iselkx2(12)=iselx3-k iselkx1(13)=iselx3-k : iselkx2(13)=iselx4-k iselkx1(14)=iselx4-k : iselkx2(14)=iselx5-k iselkx1(15)=iselx5-k : iselkx2(15)=iselx6-k iselkx1(16)=iselx6-k : iselkx2(16)=wx
これは表示の座標も含まれていて、それを元にタップ座標を作っている。
表示してタップエリアを確認して調整。
それを元にキー座標を返す関数を作る。
#defcfunc isel_key ; 選択画面入力 x=mousex : y=mousey : isel_keyn=0 repeat 9,1 : n1=cnt : n2=cnt+10 if iselkx1(n1)<x and iselky1(n1)<y and iselkx2(n1)>x and iselky2(n1)>=y : isel_keyn=n1 : break if iselkx1(n2)<x and iselky1(n2)<y and iselkx2(n2)>x and iselky2(n2)>=y : isel_keyn=n2 : break loop return isel_keyn
アイテム選択は 1~7、外すボタンは 8、戻るボタンは 9、ソート座標は11~16の値が返る。
表示も整えて、こんな感じ。
キャラ選択のをコピペして改造してあるので、押してすべらせればスクロールもする。
8枠の 1つを潰して「外す」のと「戻る」のを加えた、これは後でキャラ選択にもつける予定。
選択画面のソース。
/////// アイテム選択画面 ////////////////////// *iselect dim isel,ib+1 ; 一時選択キャラNo.一覧 repeat ib ; クリア isel(cnt)=0 loop sbn=equsi(kyg) ; 装備場所 pn=mpl(kn) ; プレイヤー n=0 ; 自勢力のアイテムをピックアップ repeat ib,1 ig=idb*cnt ; ItemNo. if id(ig)=0 : continue if id(ig+10)!pn : continue ; 自勢力で無い if id(ig+19)=un : continue ; そのキャラが持ってる if sbn=1 : if id(ig+9)!1 and id(ig+9)!2 : continue ; 右手 if sbn=2 : if id(ig+9)!1 and id(ig+9)!3 and id(ig+9)!4 and id(ig+9)!5 : continue ; 左手 if sbn=3 { if id(ig+9)>5 : continue ; 複数手 if kyg=0 and id(ig+9)=4 : continue ; 左端で左両手装備 if kyg=ud(ug+11)-1 and id(ig+9)=2 : continue ; 右端で右両手装備 } if sbn=4 : if id(ig+9)!6 : continue ; 防具 if sbn=5 : if id(ig+9)<7 : continue ; 特殊 if sbn=6 : if id(ig+9)!7 and id(ig+9)!9 and id(ig+9)!10 : continue ; アイテム isel(n)=cnt : n+ ; アイテムNo.登録 loop iselb=n ; 総数 iself=0 : iseln=0 : sel_yg=0 : ky=0 : kb=0 repeat ;------- メイン ---------------- ;------- 入力 ------- repeat 1 if kc>0 : kc- : break ky=isel_key() ; タップ座標 stick kb,256 ; ボタン loop if ky=8 and kb=256 : remove_syo : break ; 外す if ky=9 and kb=256 : break ; 戻る ;------- スクロール処理 ------- repeat 1 ; スクロール if kb=256 { if isel_kn=0 : isel_kn=1 : isel_ky=mousey break } if isel_kn=0 : break : else : isel_kn=0 isel_dy=-(mousey-isel_ky)/20 ; 移動量 if isel_dy=0 : if 1<=ky and ky<=7 : iseln=isel(sel_yg+ky-1) : iself=1 ; 選択 loop if iself=1 : break ; 選択して戻る if sel_yg>0 and isel_dy<0 : sel_yg- : isel_dy+ if sel_yg+7<iselb and isel_dy>0 : sel_yg+ : isel_dy- ;------- その他 ---------------- repeat 1 ; ソート if kb!256 : break ; タップしてない if ky<11 or 16<ky : break if iselb<2 : break ; 少ない isel_kn=0 if ky=11 : dn=0 ; 照合データ if ky=12 : dn=12 ; 攻撃 if ky=13 : dn=13 ; 防御 if ky=14 : dn=7 ; 射程 if ky=15 : dn=30 ; 属性 if ky=16 : dn=14 ; 特殊 repeat iselb-1 : cnt2=iselb-cnt ; バブルソート repeat cnt2 n1=isel(iselb-cnt) : nd1=id(n1*idb+dn) n2=isel(iselb-cnt-1): nd2=id(n2*idb+dn) if nd1<=nd2 : continue isel(iselb-cnt)=n2 : isel(iselb-cnt-1)=n1 ; 入れ替え loop loop loop ;------- 表示 ------- redraw 0 color 0,0,0 : boxf : color 255,255,255 isel_put ; 表示 dg_put redraw 1 await 1000/20 loop ;--------------------------------- kc=3 return
これで大体装備装置はできたと思うので、次は装備したものをステータス計算するプログラムを作る。